清除元素和范围的破坏

时间:2014-09-15 08:46:03

标签: angularjs angularjs-directive angularjs-scope

问题是如何在AngularJS中清除破坏元素和范围。

我有一个二叉树结构,它通过递归使用相同的指令实现。 我想更改二叉树结构并使用指令重建树。这很好,似乎旧的元素和范围没有被正确删除或销毁。

不幸的是,我没有找到关于清理和破坏元素主题的好文档。我应该何时使用scope.$destroy()。 (在链接中获取元素范围子项不起作用)您能给我一个文档链接吗?

以下代码应该让您对我的指示有一个印象。

.directive('mydirective', function($compile) {
    return {
        priority: 1000,
        restrict: 'E', 
        scope: {
            node: '='
        },
        controller: 'mydirectiveController',

        link: function(scope, element, attrs) {

            function runLink() {

                // Node
                if ...
                    var pane1 = angular.element('<mydirective node="node.left" />');

                    element.children().remove(); // is not sufficient

                    element.append(pane1);
                    element.append(handler);
                    element.append(pane2);
                    $compile(element.contents())(scope);

                // Leaf
                else ...
                    element.children().remove(); // is not sufficient

                    $compile(widgets)(scope);
                    element.replaceWith(widgets);
            }
            runLink();

            scope.$watch('', function(newValue, oldValue) {
                if ...
                    runLink();
            });
        }
    };
}

1 个答案:

答案 0 :(得分:1)

一些事情......一个是,因为你的范围:是指令选项中的一个对象,你有隔离范围。所以它与父范围的范围不同。

此外,我相信角度指令文档中有一些内容可以解释当指令可以包含自身实例时某些不起作用的内容。阅读指令周围的所有链接,你应该很容易找到它。我今天刚碰到它。

如果您创建新范围作为设置指令的一部分,通常只需要调用$ destroy()。这里有关于堆栈溢出的例子。