有人可以为AngularJS中的范围提供$ destroy事件的示例吗?


68

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

$ destroy()

从父范围中删除当前范围(及其所有子级)。删除意味着对$ digest()的调用将不再传播到当前作用域及其子级。删除还意味着当前范围可以进行垃圾回收。

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

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

Answers:


107

演示: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);
        });
    };
});

4
在此示例中,使用Batarang,被破坏元素的作用域仍然存在。那不是内存泄漏吗?
sidonaldson

4
该文档说,作用域没有被破坏:“删除还意味着当前作用域可以进行垃圾收集。” 这样,在下一次gc运行中,该范围将不复存在
Nickydonna

19

$destroy 可以指两件事:方法和事件

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的答案

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.