У меня есть директива по неизолированной области. Я не хочу изолировать его, потому что он должен быть на элементах с другими директивами. Тем не менее мне нужно наблюдать за предметами. Поэтому я пробовал это:
scope.$watch(function() {
return scope.$apply(attrs.myAttribute);
}, function(val) {
return val ? doSomething():doSomethingElse();
});
Это не работает, потому что угловой выброс вызывает ошибку цикла дайджеста. Поэтому мой вопрос заключается в том, как я могу динамически наблюдать за объектом с помощью неизолированной директивы.
Спасибо,
Извините, но я не верю, что это сработает. Как вы можете называть 'scope. $ Watch (attrs', если в области нет ничего? Вы не можете просто смотреть атрибуты в этом стиле, а OP не хочет выделять область - поэтому определение области на уровне директивы не будет достаточным. Можете ли вы создать небольшую рабочую демонстрацию этого? [Вот JSFiddle] (https://jsfiddle.net/rqej2b4j/) того, как я интерпретирую этот ответ. Можете ли вы сделать этот функционал? – scniro
@scniro В моем project директива находится внутри области действия контроллера. Поэтому мне нужна директива, чтобы посмотреть что-то, что уже было определено в области видимости, но сделать это динамически. Например, если контроллер имел scope.foo, определенный на нем, мне нужен был мой элемент. Так что всякий раз, когда я менял свою директиву, моя директива могла действовать соответственно. Я определенно получаю и ваш ответ, но я не хотел, чтобы атрибут был интерпретирован как строка. –
user3828000
, но 'myAttr =" foo "' не будет доступен для просмотра внутри директивы - это просто атрибут в этой точке и никак не связан. Как вы размещаете его по охвату? @ User3828000. 'scope. $ watch (attrs.myAttr, [...]' всегда будет давать 'undefined', \t , поэтому в приведенном выше примере я бы заподозрил, что' doSomethingElse() 'всегда будет запускать – scniro