当前位置: 首页 > 面试题库 >

您是否需要在$ scope $ destroy事件中取消绑定$ scope。$ on?

虞裕
2023-03-14
问题内容

我有使用$ on绑定事件的指令,在销毁作用域时是否需要删除该绑定,或者它是自动完成的?还需要致电$ 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() *由于视图中的端到端绑定,当 *监听器 失去其外观时, 监听器将被自动销毁/清理
。注意,$rootScope.$on()绑定不会发生这种情况。您还可以查看AngularJS的$
scope文档

用几句话回答:

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

文档说明:

范围销毁-当不再需要子范围时,子范围创建者有责任通过scope。$ destroy()API销毁它们。这样做是为了阻止$
digest调用传播到子作用域,并允许垃圾回收器回收由子作用域模型使用的内存。

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

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

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

此plnkr将为您显示$scope.$on()
的不同行为$rootScope.$on()

通过在此插入控件中切换视图,控制器将重新绑定到您的视图。该$rootScope.$on();事件被绑定每次切换视图时不破坏前视图的事件绑定。这样,$rootScope.$on()听众将被堆叠/倍增。$scope.$on()绑定不会发生这种情况,因为它将通过切换视图而被破坏(丢失DOM中的E2E绑定表示)。

注意:

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

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



 类似资料:
  • 比如: 使用render中绑定了事件,那么在destroy时需要手动解绑事件吗?

  • 问题内容: AFAIK,您无需在onclick中指定协议: 坏 好 今天,我在GoogleAnallytics上注意到他们正在使用它: 这个例子是完全错误的,还是有理由指定除?以外的其他内容? 问题答案: 这里的一些响应声称“javascript:”前缀是“过去的遗留物”,这意味着浏览器有意对它进行了特殊处理,以实现向后兼容。是否有确凿的证据证明是这种情况(有人检查过源代码)吗? 对我来说,它的意

  • 问题内容: 我的应用程序中有大量内存泄漏,但是我还没有找到原因,这就是背景。 我正在使用AngularJS + JQuery(插件) 许多监听器的绑定如下: $(element).on(“ keyup”,function(){}); 所以问题是 我是否需要按照以下说明在指令中取消绑定这些侦听器? 顺便说一句,您通常如何发现Web应用程序中的内存泄漏?我使用chrome的配置文件(请参阅此处对内存性

  • 描述 (Description) 变量范围指定可用变量的位置。 将从本地范围搜索变量,如果它们不可用,则编译器将从父范围进行搜索。 例子 (Example) 以下示例演示了在LESS文件中使用命名空间和访问器 - <html> <head> <title>Less Scope</title> <link rel = "stylesheet" type = "text/

  • Target Scope The target scope configuration lets you tell Burp, at a suite-wide level, exactly what hosts and URLs constitute the target for your current work. You can think of the target scope as, ro

  • Weave Scope - Troubleshooting & Monitoring for Docker & Kubernetes Weave Scope automatically generates a map of your application, enabling you tointuitively understand, monitor, and control your conta