如何在angularjs中读取服务内部的变量

how to read a variable inside service in angularjs?

本文关键字:服务 内部 变量 读取 angularjs      更新时间:2023-09-26

我想知道如何获得服务内部变量的值,我有以下代码:

myModule.service('notify', ['$window', function(win) {  
       var msgs = []; // I want to read this variable
       this.message = function(msg) {
         msgs.push(msg);
         if (msgs.length == 3) {
           win.alert(msgs.join("'n"));
           msgs = [];
         }
       };
     }]);

,我想从控制器中读取msgs变量

用var声明变量使它们成为函数作用域的局部变量。如果你想公开它,你可以将它存储在对象本身。

myModule.service('notify', ['$window', function(win) {  
   this.msgs = []; // I want to read this variable
   this.message = function(msg) {
     this.msgs.push(msg);
     if (this.msgs.length == 3) {
       win.alert(this.msgs.join("'n"));
       this.msgs = [];
     }
   };
 }]);

然后您可以通过读取

来检索服务上的消息。
service.msgs

更好的模式是创建一个getter方法来检索消息。

myModule.service('notify', ['$window', function(win) {  
   var msgs = []; // I want to read this variable
   this.getMessages = function () {
     return msgs;
   };
   this.message = function(msg) {
     msgs.push(msg);
     if (msgs.length == 3) {
       win.alert(msgs.join("'n"));
       msgs = [];
     }
   };
 }]);

然后您可以通过调用

来检索您的消息
service.getMessages();

服务是用new创建的,因此将公开附加到this的任何内容。只需添加一个函数,将您的消息数组返回给this

myModule.service('notify', ['$window', function(win) {  
    var msgs = []; // I want to read this variable
    this.message = function(msg) {
        msgs.push(msg);
        if (msgs.length == 3) {
            win.alert(msgs.join("'n"));
            msgs = [];
        }
    };
    this.getMessages = function () {
        return msgs;
    }
 }]);

1。你可以使用getter读取

myModule.service('notify', ['$window', function (win) {
    var msgs = [];// I prefer _msgs for private variables
    Object.defineProperties(this, {
        msgs: {
            get: function () {
                return msgs;
            },
            /*set: function (val) {
                msgs = val;
            },*/ //if you need setter uncomment
            enumerable: true
        }
    });
    //other codes....
}]);
然后,您可以在控制器
中使用console.log(notify.msgs);