gpt4 book ai didi

javascript - 您需要在 $scope $destroy 事件中取消绑定(bind) $scope.$on 吗?

转载 作者:可可西里 更新时间:2023-11-01 02:33:33 25 4
gpt4 key购买 nike

我有使用 $on 绑定(bind)事件的指令,当作用域被销毁时,我是否需要删除该绑定(bind),还是自动完成?我还需要调用 $element.off 吗?

return {
restrict: 'A',
link: function($scope, $element, $attrs) {
$element.on('load', function() {
$element[0].contentWindow.focus();
});
$scope.$on('iframe:focus', function() {
$element[0].contentWindow.focus();
});
}
};

最佳答案

$scope.$on() 如果由于 E2E 绑定(bind)在您的 View 中失去表示,监听器将被自动销毁/清理。请注意,这不会发生在 $rootScope.$on() 绑定(bind)中。您还可以查看 $scope documentation of AngularJS .

简单回答:

  • $scope.$on(); 会自动销毁。
  • 您需要手动销毁$rootScope.$on()

文档说:

Scope Destruction - When child scopes are no longer needed , it is theresponsibility of the child scope creator to destroy them viascope.$destroy() API. This is done in order to stop propagation of$digest calls into the child scope and allow for memory used by thechild scope models to be reclaimed by the garbage collector.

如何销毁 $rootScope.$on() 的示例:

// bind event
const registerScope = $rootScope.$on('someEvent', function(event) {
console.log("fired");
});

// clean up
$scope.$on('$destroy', registerScope);

plnkr将向您展示 $scope.$on()$rootScope.$on() 的不同行为。

通过切换 View plunkr Controller 将重新绑定(bind)到您的 View 。 $rootScope.$on(); 事件在每次切换 View 时都被绑定(bind),而不会破坏之前 View 的事件绑定(bind)。这样,$rootScope.$on() 监听器将被堆叠/相乘。 $scope.$on() 绑定(bind)不会发生这种情况,因为它会因切换 View 而被破坏(丢失 DOM 中的 E2E 绑定(bind)表示)。


注意:

  • $scope.$on('event'); 会监听 $scope.$broadcast('event') & $rootScope .$broadcast('事件')

  • $rootScope.$on('event'); 只会监听 $rootScope.$broadcast('event')

关于javascript - 您需要在 $scope $destroy 事件中取消绑定(bind) $scope.$on 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42247286/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com