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

09-25 19:43