在AngularJS服务中显示模块模式的Javascript不起作用

Javascript Revealing Module Pattern in AngularJS Service not working

本文关键字:模式 Javascript 不起作用 模块 显示 AngularJS 服务      更新时间:2023-09-26

我在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调用,但它不工作,当我使用的artistIds变量在我的promise工厂的任何函数,它原来是空白数组[](初始值)。为什么?

好的,其次,当我使用一个名为setArtistIds的函数来实现同样的事情时,这个也能工作但即使这样,我也必须做一些像

这样的事情
function setArtistIds(i){      // Right
     artistIds = i;
}

但是当我这样做的时候就不是这样了:

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

谁能告诉我我做错了什么

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

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