Имея контроллер, MyCtrl:
class MyCtrl {
constructor($scope, $rootScope, ...) {
this.$scope = $scope;
this.$rootScope = $rootScope;
this.doThis = _debounce(this.resize.bind(this), 300);
...
}
$onInit() { ... }
$onDestroy() { ... }
}
Внутри $onInit
называется $rootScope.$on
. Как и этот, другой контроллер выполняет те же операции, но для страницы другого типа, скажем, MyCtrl2. Когда я иду ко второму от первого, первого продолжают вызывать, потому что он не уничтожен. Я решил эту проблему, используя метод, описанный Предотвратить $ rootScope. $ On от вызова функции несколько раз путем добавления отмены регистрации. $onInit
сейчас:
$onInit() {
this.$rootScope.$on('toggleNav', () => {
this.doThis();
});
this.deregisterDoThis = this.$rootScope.$on('listen', function() {
this.$scope.doThis();
});
this.$rootScope.$on('$destroy', this.deregisterDoThis);
}
Теперь, если я перейду со страницы первого контроллера на страницу второго, все будет работать нормально. НО, когда я нажимаю, чтобы вернуться на страницу первой, в консоли появляется ошибка:
Uncaught TypeError: Cannot read property 'getAttribute' of null
at $.t.default [as attr] (vendor.dll.js?aca3f637cd46c07f3280:135)
at attachNotes (VM133106 chart-util.js:1016)
at invokeFunc (debounce.js?e59c:95)
at trailingEdge (debounce.js?e59c:144)
at timerExpired (debounce.js?e59c:132)
Есть идеи по этому поводу?