0
在我的控制器之一,有一項指令<div keypress-events>
訂閱了按鍵:AngularJS:退訂事件
directives.directive('keypressEvents', ['$document', '$rootScope', function ($document, $rootScope) {
return {
restrict: 'A',
link: function() {
$document.bind('keydown', function (e) {
$rootScope.$broadcast('keypress', e, e.which);
});
}
}
}]);
還有當用戶按下任何箭頭鍵執行分頁的監聽器。
var listener = $scope.$on('keypress', function (e, a, key) {
$scope.$apply(function() {
$scope.key = key;
if (key == 39) {
$scope.currentPage = Math.min($scope.currentPage + 1, $scope.numPages)
} else if (key == 37) {
$scope.currentPage = Math.max($scope.currentPage - 1, 1)
}
});
})
但是,當您導航到另一個控制器然後返回時,偵聽器將被調用兩次。那麼我如何取消訂閱該活動?
我只是試圖摧毀聽者,但這並不工作...
$scope.$on('$destroy', function() {
listener(); // remove listener.
});
我鼓勵使用on/off而不是bind/unbind,因爲從jQuery 3.0和angularJs的jqLite 1.6.0開始,.bind()已被棄用。 –
@MartinJimmyHlavňa感謝提及,我將它添加爲備註;) –