更新
这样做的方法是使用这样的指令在元素上创建一个新范围。
yourModule.directive('unbindable', function(){
return { scope: true };
});
并像这样将其应用于您的元素
<div unbindable id="yourId"></div>
然后要从任何更新中取消绑定此元素,请执行此操作。
angular.element( document.getElementById('yourId') ).scope().$destroy();
完成,这是一个演示。
演示:http: //jsfiddle.net/KQD6H/
因此,这会在元素上创建一个新范围,并且仅在所有范围都从其父范围继承所有数据时才有效。所以作用域与父作用域基本相同,但允许你在不影响父作用域的情况下销毁作用域。因为这个元素被赋予了它自己的作用域,所以当你销毁它时,它不会像所有其他元素一样得到父作用域,如果这有意义的话 0.o
此行以下的所有内容都是我的原始答案,我会留在这里以防有人喜欢这种方式
unbindable
我已经通过一个指令真正做到了这一点。当您unbinable
在元素上设置指令时,取消绑定元素所需的一切就是这个。
yourElement.attr('unbind', 'true'); // Ref 1
$scope.$broadcast('unbind'); // Ref 2
这是指令。
app.directive('unbindable', function(){
return {
scope: true, // This is what lets us do the magic.
controller: function( $scope, $element){
$scope.$on('unbind', function(){ // Ref 3
if($element.attr('unbind') === 'true'){ // Ref 4
window.setTimeout(function(){ $scope.$destroy() }, 0);//Ref 5
}
});
}
}
});
你像这样设置你的元素。
<h1 unbindable></h1>
因此,每当您将unbind="true"
属性添加到h1
并广播时unbind
,该元素将被解除绑定
REF-1:将 unbind true 属性添加到元素,以便指令知道您要取消绑定的元素。
REF-2:在范围内广播 unbind 事件,以便指令知道您要取消绑定元素 - 确保首先添加属性。--- 根据您的应用布局,您可能需要使用$rootScope.$broadcast
REF-3 : 解绑事件广播时
REF-4:如果与指令关联的元素具有真正的 unbind 属性
REF-5 : 然后销毁该指令的作用域。我们必须使用setTimeout
,因为我认为 angular 会在事件发生后尝试做某事$on
并且我们得到一个错误,所以使用setTimeout
将防止该错误。尽管它会立即开火。
这适用于多个元素,这是一个很好的演示。
演示:http: //jsfiddle.net/wzAXu/2/