AngularJS $on не ловит событие

299
06 августа 2017, 09:16

Здравствуйте, пытался понять один вопрос который у меня возник с $broadcast в AngulaJS, но так ничего не понял. Мое приложение работает, но хочется докопаться до истины. Собственно вопрос: Почему данный код не работает?

app.controller('AuthController', function ($scope, $rootScope, DeviceService){
      $rootScope.$on('device_info:ready', function(){
        console.log("It's OK");
    });
});
(function () {
    app.service('DeviceService', function ($rootScope) {
      function init() {
        if(true){
          $rootScope.$broadcast('device_info:ready');
        }
      }
      init();
  });
})();

А этот работает:

app.controller('AuthController', function ($scope, $rootScope, ServiceTest){
    $rootScope.$on('device_info:ready', function(){
        console.log("It's OK");
    });
    ServiceTest.test();
});
app.service('ServiceTest', function($rootScope){
  this.test = function(){
    if(true){
      $rootScope.$broadcast('device_info:ready');
    }
  };
});
  • Можно ли что-то сделать с первым примером чтобы он заработал?
  • Объясните пожалуйста почему первый не работает а второй работает(я примерно понимаю, что я "слушаю" событие до того как оно происходит?)
Answer 1

Сервис объявите вот так:

app.service('DeviceService', function ($rootScope) {
  return function () {
      function init() {
          if(true){
              $rootScope.$broadcast('device_info:ready');
          }
      }
      init();
  }
});    

В этом случае результатом создания сервиса будет функция, внутри, которой, вы уже можете объявить все свои свойства и т.д.

READ ALSO
Как изменить свойство input на JS

Как изменить свойство input на JS

Когда нам надо поменять стиль мы пишем:

361
Как решить проблему с кодировкой для корректного отображения в базе данных и на сайте?

Как решить проблему с кодировкой для корректного отображения в базе данных и на сайте?

Если зарегистрироваться через сайт, то информация на русском в базу данных не попадает(пустые поля)а если к кодировке в файле подключения(все...

250
Результат запроса SQL

Результат запроса SQL

Я хочу что б мне вылезло результат ячейки которая совпадает с введенным мылом!

258
Как добавить элемент в бд, без обновления страницы. Codeigniter [PHP]

Как добавить элемент в бд, без обновления страницы. Codeigniter [PHP]

Как добавить элемент в бд, без обновления страницыЯзык PHP CMS - Codeigniter

238