gpt4 book ai didi

angularjs - Angular ionic - 理解模型、工厂和服务

转载 作者:行者123 更新时间:2023-12-03 23:18:57 30 4
gpt4 key购买 nike

我刚刚开始学习 ionic 和 Angular ,并且无法理解使用工厂/服务进行建模的含义。

场景:

  • 我想对具有属性和方法的 Contact 对象进行建模。
  • 我想要一个对象 AddressBook,该对象具有包含联系人对象列表的属性,并且还具有方法。

根据我读过的所有文献,我想为联系人创建一个工厂/服务,为地址簿创建一个工厂/服务。

但是由于 Contact 是一个单例,我如何将这些东西组合在一起?一旦我“创建”一个新联系人,因为它是一个单例,它不只是对原始联系人进行更改吗?

angular.module('blah.services', ['ionic.utils'])
.factory('Contact', function($q){
var o = {
"name" : '',
"email" : ''
};
return o;
})
.factory('AddressBook', function($q, Contact){

var o = {};
o.contacts = [];

o.addContact = function(contact){
o.contacts.push(contact);
}

return o;
});

// and then somehwere something like
angular.module('blah.controllers', ['blah.services'])
.controller('somethingCtrl', function($scope, Contact, AddressBook) {

/* what am i supposed to do here?
is it something like
var c = new Contact();
c.name = 'foo';
AddressBook.addContact(c);
*/

});

这是我已经读过的一些内容,但仍然无法弄清楚。

http://viralpatel.net/blogs/angularjs-service-factory-tutorial/
http://mcgivery.com/ionic-using-factories-and-web-services-for-dynamic-data/
https://docs.angularjs.org/guide/providers
angular.service vs angular.factory

最佳答案

由于某种原因,您认为 Angular 服务与它们实际的含义有所不同。在 Angular 的情况下,它们只是用作 Angular 所拥抱的依赖注入(inject)模式的元素。他们对于面向对象没有发言权。

我的意思是,如果您有一个“类”函数Contact(而不是您创建的服务):

function Contact(name){
this.name = name;
}

那么你可以执行 var contact1 = new Contact("foo"); 并且它不需要 Angular 服务。

如果您想稍后注入(inject)它们并进行模拟测试,您可能仍然应该创建一个 Angular 可注入(inject)项,但它只不过是一个函数值,因此您可以只使用 .value:

.value("Contact", function Contact(){...})
.controller("SomeCtrl", function($scope, Contact){
$scope.contact1 = new Contact("foo");
}

关于angularjs - Angular ionic - 理解模型、工厂和服务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30279316/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com