ich eine Richtlinie habe, sein Rückruf wie folgt aussieht:noch zerstörte Steuerungsbereich Rundfunk AngularJS
function Callback(){
return {
templateUrl: 'somePath',
scope: true,
link: function(scope, el) {
scope.cancel = function(){
el.remove()
scope.$destroy()
}
},
controller: 'someController',
controllerAs: 'vm'
}
}
Die Link-Methode fügt nur ein Abbrechen Methode, die die Richtlinie aus dem DOM entfernt.
In der Richtlinie Controller für ein Ereignis Ich höre:
$rootScope.$on('parent', function(){
someService.addToArray(someData)
})
Diese Methode schiebt nur Daten in ein Array.
In einem übergeordneten Controller und anzeigen, wo diese Richtlinie verwendet wird, feuere ich tatsächlich die Übertragung. Ein Teil der übergeordneten Steuerung:
var vm = this
vm.broadcastEvent = broadcastEvent
function broadcastEvent(){
$rootScope.$broadcast('someEvent', 'someData')
}
Und in der Ansicht ich einige klickbare div haben, die diese Methode abfeuert.
Es funktioniert gut, hört die Richtlinie die Übertragung und fügt Daten zu einem Array, bevor ich das Element entfernen und den Bereich zerstören.
Das Problem ist, nachdem ich .cancel
aufrufen, wird das Element entfernt und vermutlich wird der Bereich zerstört, aber es fügt noch Daten zum Array hinzu. Fehle ich etwas darüber, wie scope.$destroy()
funktioniert?
Ich kann das Verhalten, das ich will, durch denegistrieren die $on
bekommen, muss ich nur so oder so tun? Ich denke, die Frage ist, zerstört das Zerstören der Controller-Bereich $on
in ihm definiert, oder müssen Sie sicherstellen, dass Sie explizit die Registrierung entfernen, bevor Sie den Bereich zu zerstören.
yep, das ist genau das, was ich getan habe, und es machte mehr Sinn, als ich die Frage schrieb. Danke wie immer @georgeawg! –
sollte der Deregister nicht passieren, bevor der Bereich zerstört wird? –