我有一個指令,它的回調看起來是這樣的:仍然廣播毀壞的控制器範圍angularjs
function Callback(){
return {
templateUrl: 'somePath',
scope: true,
link: function(scope, el) {
scope.cancel = function(){
el.remove()
scope.$destroy()
}
},
controller: 'someController',
controllerAs: 'vm'
}
}
的聯繫方法,只是增加了一個cancel方法,可以消除DOM中的指令。
在指令控制器我聽一個事件:
$rootScope.$on('parent', function(){
someService.addToArray(someData)
})
這種方法只是將數據推到一個數組。
在父控制器和視圖中,這個指令被利用的地方我實際上正在發射廣播。父控制器的一部分:
var vm = this
vm.broadcastEvent = broadcastEvent
function broadcastEvent(){
$rootScope.$broadcast('someEvent', 'someData')
}
而在視圖中,我有一些可點擊的div觸發此方法。
它工作得很好,該指令聽到廣播並將數據添加到數組之前,我刪除元素並銷燬範圍。
問題是,在我調用.cancel
後,該元素被刪除,據推測該範圍被銷燬,但它仍然向數組添加數據。我是否錯過了scope.$destroy()
的工作原理?
我可以通過註銷$on
來獲得我想要的行爲,我是否需要這樣做?我想問題是,是否銷燬控制器範圍取消了在其中定義的任何$on
,或者是否需要確保在銷燬範圍之前明確註銷?
是的,這正是我最終做的事情,而且當我寫這個問題時它更有意義。像往常一樣感謝@georgeawg! –
在範圍銷燬之前不應該取消註冊嗎? –