Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
AngularJS服务中的Javascript模块模式不工作_Javascript_Angularjs_Angular Services_Revealing Module Pattern - Fatal编程技术网

AngularJS服务中的Javascript模块模式不工作

AngularJS服务中的Javascript模块模式不工作,javascript,angularjs,angular-services,revealing-module-pattern,Javascript,Angularjs,Angular Services,Revealing Module Pattern,我在angularJS服务中使用以下代码来完成一些任务: angular.factory('promiseFactory', function(){ var artistIds = []; function setArtistIds(artistIds){ artistIds = artistIds; } return { createPromiseForNotification: promiseFactory,

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

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

     function setArtistIds(artistIds){
       artistIds = artistIds;
     }

     return {
            createPromiseForNotification: promiseFactory,
            getNotis: getNotis,
            setNotis : setNotis,
            //setArtistIds : setArtistIds,
            artistIds : artistIds
        }
});
此工厂用于另一个factory 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,
            }
    });
    

    是否有方法访问与参数名同名的外部范围变量。函数setArtistIds(artistIds){artistIds=artistIds;}@ParamSingh短答案是否定的。只需让代码看起来干净,不要使用相同的名称。