Javascript 在 AngularJS 服务中显示模块模式不工作

Javascript Revealing Module Pattern in AngularJS Service not working

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

谁能解释一下我做错了什么。

  1. 当你执行这行代码时:

    promiseFactory.artistIds = [1,2,3];

您只是在更改 属性 工厂返回的对象。

但是你所有的方法甚至都没有使用它,它们在闭包中使用变量 artistIds

为了修复此错误,请将 getter 和 setter 添加到您的工厂。

  1. 当您以与闭包变量相同的方式命名 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,
        }
});