UPDATE
Способ сделать это, чтобы создать новую область на элементе с директивой как так.
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
элемент будет UNBIND-эд
REF-1: Добавьте UNBIND истинный атрибут элемента, так что директива знает, какой элемент вы отключаете.
REF-2: Передача события unbind по всем областям, чтобы директива знала, что вы хотите развязать элемент. Убедитесь, что вы сначала добавили атрибут. --- В зависимости от макета приложения, вам может понадобиться использовать $rootScope.$broadcast
REF-3: Когда отвязать событие транслируется
REF-4: Если элемент, связанный с директивой имеет true unbind
REF-5: Затем уничтожить область действия, указанную в директиве. Мы должны использовать setTimeout
, потому что я думаю, что угловой пытается что-то сделать после события $on
, и мы получаем ошибку, поэтому использование setTimeout
предотвратит эту ошибку.Хотя он срабатывает мгновенно.
Это работает с несколькими элементами, вот хорошая демонстрация.
Демо: http://jsfiddle.net/wzAXu/2/
Что Прецедент для этого? –
Я на самом деле использую 'ng-style', и я не хочу связывать определенные элементы, но продолжать привязывать к другим элементам, я использовал простой текстовый пример, поэтому его легче понять, но общий результат остановит что-либо, связанное с этот элемент. – iConnor
Это сообщение может быть полезно: http://stackoverflow.com/questions/13651578/how-to-unwatch-an-expression/ – Sharondio