我在我的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,
}
});