2015-09-30 2 views
2

Я хочу знать, как я могу получить значение переменной, которая находится внутри службы, у меня есть следующий код:Как читать переменную внутри службы в angularjs?

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 = []; 
     } 
     }; 
    }]); 

, и я хочу читать сбщ переменных из контроллера.

+1

Просто выведите метод 'getMessages()', который возвращает msgs; ' – haim770

+0

@SheraliTurdiyev. Тот факт, что метод 'message' мутирует массив' msgs', действительно нежелателен и его следует избегать. Тем не менее, разоблачение 'msgs' использованием метода точно отвечает на вопрос. – haim770

+0

Извините, я обновил свой ответ –

ответ

4

Объявление переменных с помощью 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 

Лучше шаблон будет создать метод получения для получения сообщений.

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(); 
3

Услуги создаются с 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; 
    } 
}]); 
0

1. Вы можете использовать поглотитель для чтения

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); в контроллере

Смежные вопросы