说我有指令:
angular.module('myApp').directive('myDirective', function ($compile) {
return {
link: function ($scope, $element, $attrs) {
var $randomElem = $('<div>');
$element.append($compile($randomElem)($scope));
$randomElem.remove();
}
}
});
范围会自动销毁吗?如果没有,我怎么能摧毁它?
答案 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();