【问题标题】:Can someone provide an example of a $destroy event for scopes in AngularJS?有人可以为 AngularJS 中的范围提供 $destroy 事件的示例吗?
【发布时间】:2013-01-19 17:29:18
【问题描述】:

有人可以提供一个范围的 $destroy 事件的例子吗?这是来自http://docs.angularjs.org/api/ng.$rootScope.Scope#$destroy的参考文档

$destroy()

从父级删除当前范围(及其所有子级) 范围。删除意味着对 $digest() 的调用将不再 传播到当前范围及其子范围。删除也意味着 当前范围符合垃圾回收条件。

$destroy() 通常被 ngRepeat 等指令使用 管理循环的展开。

就在作用域被销毁之前,会广播 $destroy 事件 这个范围。应用程序代码可以注册一个 $destroy 事件处理程序 这将使它有机会执行任何必要的清理。

【问题讨论】:

    标签: angularjs


    【解决方案1】:

    演示:http://jsfiddle.net/sunnycpp/u4vjR/2/

    在这里我创建了 handle-destroy 指令。

    ctrl.directive('handleDestroy', function() {
        return function(scope, tElement, attributes) {        
            scope.$on('$destroy', function() {
                alert("In destroy of:" + scope.todo.text);
            });
        };
    });
    

    【讨论】:

    • 在这个例子中,使用 Batarang,被破坏元素的范围仍然存在。这不是内存泄漏吗?
    • 范围没有销毁,文档说:“删除也意味着当前范围有资格进行垃圾收集。”这样在下一次 gc 运行中,该范围将不复存在
    【解决方案2】:

    $destroy可以指2个东西:方法和事件

    1。方法 - $scope.$destroy

    .directive("colorTag", function(){
      return {
        restrict: "A",
        scope: {
          value: "=colorTag"
        },
        link: function (scope, element, attrs) {
          var colors = new App.Colors();
          element.css("background-color", stringToColor(scope.value));
          element.css("color", contrastColor(scope.value));
    
          // Destroy scope, because it's no longer needed.
          scope.$destroy();
        }
      };
    })
    

    2。事件 - $scope.$on("$destroy")

    @SunnyShah's answer

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-03-08
      • 2014-05-25
      • 1970-01-01
      • 1970-01-01
      • 2017-09-29
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多