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

标签 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
        }
});

这个工厂在另一个工厂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 添加到您的工厂中。

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

    关于AngularJS 服务中的 Javascript 显示模块模式不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32426362/

    相关文章:

    angularjs - 如何缓存angularjs部分?

    javascript - Angular 2 : Two backend service calls on success of first service

    javascript - 使 $httpBackend 忽略对服务器发出的任何请求

    javascript - 随机化数组中的元素?

    javascript - 如何在具有多个选择的表单中使用 jquery 设置选定的下拉选项?

    javascript - 使用 Angular 从服务器下载文件

    javascript - 如何在移动设备中滚动到页面顶部

    javascript - 如何在 Angular 2 的同一服务中将一些硬编码数据与 API 一起使用?

    angularjs - Angular,当任何资源处于待处理状态时显示加载

    javascript - 将上下文变量作为参数传递给 onclick 事件处理程序