根据我的理解,工厂是对Angular的提供程序的抽象,它允许您使用较少的代码行返回数据。但是,提供商提供了更大的灵活性,您可以更好地定义服务的功能。我仍然对如何从提供者调用简单函数感到困惑。每个人似乎都采取不同的方式,我不能让我的工作:
myApp.provider('myProvider', function() {
myVar = true;
$get: function() {
return {
myVar: myVar,
}
},
toggleFalse = function() {
myVar = false;
},
})
myApp.controller('myController', function($scope, myProvider) {
myProvider.toggleFalse();
});
这似乎不起作用 - 我一般都无法理解服务。它说toggleFalse
没有定义。如何在可通过控制器控制的Angular服务上正确定义setter函数?
答案 0 :(得分:0)
如果您执行console.dir(myProvider)
,则会看到您从$get
获得了返回的对象。您需要将函数放在返回的对象上:
$get: function() {
return {
myVar: myVar,
toggleFalse: function() {
myVar = false;
},
}
},
答案 1 :(得分:0)
这是一个简单的关闭问题。
如果您希望每个实例都具有唯一的所有内容,请将所有内容存储在$get
。
如果您希望对象的大部分是唯一的,但是有一些方法或对象/数组,每个实例彼此共享,那么在$get
之外的函数闭包中定义它们并将它们附加到对象从 $get
返回。
... ("myProvider", function () {
var sharedValue = 19,
sharedFunction = function () {
sharedValue += 1;
return shared value;
};
return {
$get : function () {
return {
unique : 1,
shared : sharedFunction
};
}
};
这不是一个Angular问题,而是一个JS的行为的核心部分,恰好在Angular范例内。