当从指令中删除元素时,AngularJs会自动销毁范围吗?

时间:2016-02-10 17:50:48

标签: javascript angularjs

说我有指令:

angular.module('myApp').directive('myDirective', function ($compile) {
    return {
        link: function ($scope, $element, $attrs) {
            var $randomElem = $('<div>');
            $element.append($compile($randomElem)($scope));

            $randomElem.remove();
        }
    }
});

范围会自动销毁吗?如果没有,我怎么能摧毁它?

1 个答案:

答案 0 :(得分:7)

在您的情况下,您的$randomElem将与其父级(指令容器)具有相同的范围。所以它不会被破坏。

现在你要为这个元素创建一个新的范围:

// Case 1: child scope sharing the properties with parent
$element.append($compile($randomElem)($scope.$new()));

// case 2: child scope isolated, no sharing with parent
$element.append($compile($randomElem)($scope.$new(true)));

然后,您需要在删除元素时手动销毁范围。您可以使用$scope.$destroy()

例如:

var newScope = $scope.$new();
$element.append($compile($randomElem)(newScope));


newScope.$destroy(); // or $randomElem.scope().$destroy();
$randomElem.remove();