我在我的 angularJS 服务中使用以下代码来完成一些任务:
angular.factory('promiseFactory', function(){
var artistIds = [];
function setArtistIds(artistIds){
artistIds = artistIds;
}
return {
createPromiseForNotification: promiseFactory,
getNotis: getNotis,
setNotis : setNotis,
//setArtistIds : setArtistIds,
artistIds : artistIds
}
});
这个工厂在另一个工厂notifications.js中使用,我正在尝试设置
promiseFactory.artistIds = [1,2,3];
在一些ajax调用上但它不起作用,当我在promiseFactory的任何函数中使用artistIds变量时,它结果是空白数组[](初始值)。为什么?
好吧,其次,当我使用一个名为 setArtistIds 的函数来实现同样的事情时,这个东西就起作用了,但即便如此,我也必须做类似的事情
function setArtistIds(i){ // Right
artistIds = i;
}
但当我这样做时就不会了:
function setArtistIds(artistIds){ // Wrong
artistIds = artistIds;
}
有人可以解释一下我做错了什么吗?
最佳答案
当您执行这行代码时:
promiseFactory.artistIds = [1,2,3];
您只是更改工厂返回的对象的属性。
但是您的所有方法甚至都没有使用它,它们在闭包中使用变量artistIds
。
为了修复此错误,请将 getter 和 setter 添加到您的工厂中。
- 当您以与闭包变量相同的方式命名 setter 函数的参数时,您就隐藏了它。这就是为什么它不起作用。
给它另一个名字。
angular.factory('promiseFactory', function(){
var artistIds = [];
function setArtistIds(newArtistIds){
artistIds = newArtistIds;
}
function getArtistIds(){
return artistIds;
}
return {
createPromiseForNotification: promiseFactory,
getNotis: getNotis,
setNotis : setNotis,
setArtistIds : setArtistIds,
getArtistIds : getArtistIds,
}
});
关于AngularJS 服务中的 Javascript 显示模块模式不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32426362/