AngularJS 1 с TypeScript: где в контроллере положить $rootScope.on?

обслуживание

export class RandomServiceName implements ng.IServiceProvider {
  /* @ngInject */
  constructor(private $rootScope: ng.IRootScopeService) {
  }

  public $get(): RandomServiceName {
    return this;
  }

  doStuff() {
      this.$rootScope.$broadcast('hello', 'world');
  }
}

контроллер

import {RandomServiceName} from './random_service_name.ts';

export class RandomController {
  /* @ngInject */
  constructor(private $rootScope: ng.IRootScopeService,
              private $log: ng.ILogService,
              private RandomServiceName: RandomServiceName) {
      this.RandomServiceName.doStuff();
      this.$rootScope.$on('hello', (event: ng.IAngularEvent, data: string) =>
          this.$log.info(`Event '${event.name}' caught with data ${data}`)
      );
  }
}

Но это не имеет смысла, потому что constructor вызывается только один раз (за инициацию)...:\

1 ответ

Вы положили $on в вашем контроллере и вы также $off используя область вашего контроллера $destroy событие.

Подробнее: https://docs.angularjs.org/api/ng/type/$ rootScope.Scope # $ destroy

События

$ уничтожить

Трансляция, когда прицел и его дети разрушаются. Обратите внимание, что в AngularJS также существует событие $destroy jQuery, которое можно использовать для очистки привязок DOM перед удалением элемента из DOM.

Также:

Личное мнение: события могут сделать ваш код довольно сложным для рассуждения.

Другие вопросы по тегам