我有一个指令,它的回调看起来是这样的:仍然广播毁坏的控制器范围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! –
在范围销毁之前不应该取消注册吗? –