【问题标题】:Javascript Revealing Module Pattern in AngularJS Service not workingAngularJS服务中的Javascript显示模块模式不起作用
【发布时间】:2015-09-06 17:35:35
【问题描述】:

我在我的 angularJS 服务中使用以下代码来完成一些任务:

angular.factory('promiseFactory', function(){
     var artistIds = [];

     function setArtistIds(artistIds){
       artistIds = artistIds;
     }

     return {
            createPromiseForNotification: promiseFactory,
            getNotis: getNotis,
            setNotis : setNotis,
            //setArtistIds : setArtistIds,
            artistIds : artistIds
        }
});

这个工厂用于另一个工厂的通知.js,我正在尝试设置

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

在一些 ajax 调用但它不起作用时,当我在我的 promiseFactory 的任何函数中使用 artistIds 变量时,结果是空白数组 [](初始值)。为什么?

好的,其次,当我使用一个名为 setArtistIds 的函数来实现相同的事情时,这件事会起作用,但即便如此我也必须做类似的事情

function setArtistIds(i){      // Right
     artistIds = i;
}

但当我这样做时不是这样:

function setArtistIds(artistIds){      // Wrong
    artistIds = artistIds;
}

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

【问题讨论】:

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


    【解决方案1】:
    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,
            }
    });
    

    【讨论】:

    • 有没有办法访问与参数名称同名的外部范围变量。功能 setArtistIds(artistIds){ ArtistIds = ArtistIds; }
    • @ParamSingh 简短的回答是否定的。只是让代码看起来干净,不要使用相同的名称。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-05-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多