我在angularJS服务中使用以下代码来完成一些任务:
angular.factory('promiseFactory', function(){
var artistIds = [];
function setArtistIds(artistIds){
artistIds = artistIds;
}
return {
createPromiseForNotification: promiseFactory,
getNotis: getNotis,
setNotis : setNotis,
//setArtistIds : setArtistIds,
artistIds : artistIds
}
});
此工厂用于其他工厂notification.js,其中我正在尝试设置
promiseFactory.artistIds = [1,2,3];
在一些ajax调用上但它不起作用,当我在promiseFactory的任何函数中使用artistIds变量时,它变成了空白数组[](初始值)。为什么呢?
好的,其次,当我使用一个名为setArtistIds的函数来实现相同的东西时,这个东西有效,但即使这样我也要做类似的事情
function setArtistIds(i){ // Right
artistIds = i;
}
但不是我这样做的时候:
function setArtistIds(artistIds){ // Wrong
artistIds = artistIds;
}
有人可以解释一下我在做什么错误。
答案 0 :(得分:3)
当您执行以下代码行时:
promiseFactory.artistIds = [1,2,3];
您只是更改工厂返回的对象的属性。
但是你的所有方法都没有使用它,它们在闭包中使用变量artistIds
。
要修复此错误,请将getter和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,
}
});