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.
Также:
Личное мнение: события могут сделать ваш код довольно сложным для рассуждения.