我有我的角應用程序在index.html中使用ng-view指令設置,視圖使用$ routeProvider config配置,每個視圖都有自己的控制器。在一個視圖控制器中,我有一個監聽器監視事件的$ rootScope。$。我希望這個監聽者在我改變視圖時不再運行,但事實並非如此。即使當我切換到不再使用該控制器的視圖時,手錶仍會在觸發時保持調用代碼。
我已經設置了一些測試代碼來偵聽$ destroy事件,並且我可以看到$ destroy事件正在被觸發,但偵聽器函數仍在運行。我已經在watch函數和$ destroy事件監聽器中打印出$ scope。$ id,並且我可以看到ID匹配。因此,即使在特定範圍發生$ destroy事件之後,它上的$ on監聽器仍然繼續運行。爲什麼會這樣?我的印象是,在導航到不同的視圖時,或者在任何情況下控制器都被銷燬,然後清除它的監聽器。
Plnkr:http://plnkr.co/edit/TxssxQJY5PVLTAIAr4xD?p=preview
var animateApp = angular.module('animateApp', ['ngRoute', 'ngAnimate']);
animateApp.config(function($routeProvider) {
$routeProvider
.when('/', {
templateUrl: 'page-home.html',
controller: 'mainController'
})
.when('/about', {
templateUrl: 'page-about.html',
controller: 'aboutController'
})
.when('/contact', {
templateUrl: 'page-contact.html',
controller: 'contactController'
});
});
angular.module('animateApp').service('service', ['$interval', '$rootScope', service]);
function service ($interval, $rootScope) {
var service = {};
service.abc = 1;
$interval(function() {
service.abc++;
$rootScope.$broadcast('service.abc', service.abc);
}, 500);
return service;
}
animateApp.controller('mainController', function($scope, $rootScope, service) {
$scope.pageClass = 'page-home';
$scope.$on('$destroy', function iVeBeenDismissed() {
console.log('goodbye ' + $scope.$id);
// release resources, cancel request...
})
$rootScope.$on('service.abc', function (newval) {
console.log($scope.$id);
})
});
animateApp.controller('aboutController', function($scope) {
$scope.pageClass = 'page-about';
});
animateApp.controller('contactController', function($scope) {
$scope.pageClass = 'page-contact';
});
你可以通過[plunk](http://plnkr.co)或[小提琴](http://jsfiddle.net) – Minato
來演示你的邏輯/問題請提供[mcve] – TheSharpieOne
對不起,實際上它是在監聽器上使用$ rootScope。$。我將用plnkr進行更新並進行編輯。 – dz210