AngularJS Service中的Javascript Revealing Module Pattern无法正常工作

时间:2015-09-06 17:35:36

标签: javascript angularjs angular-services revealing-module-pattern

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

有人可以解释一下我在做什么错误。

1 个答案:

答案 0 :(得分:3)

  1. 当您执行以下代码行时:

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

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

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

    要修复此错误,请将getter和setter添加到工厂。

    1. 当您以与闭包变量相同的方式命名setter函数的参数时,您将隐藏它。这就是它无法正常工作的原因。
    2. 请给它另一个名字。

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