Angularjs: свойство области ведения журнала в отображаемых функциональных ссылках undefined
У меня есть эта базовая plnkr, которая просто реализует базовую директиву "Hello, X".
В функции связи я регистрирую scope.name
, но получаю undefined
? Почему это так? Не следует ли регистрировать значение свойства name
в консоли?
Ответы
Ответ 1
Это известная "проблема", когда интерполяция атрибутов @
происходит после вызова функции ссылки. Для изменения этой проблемы существует запрос на перенос, но неясно, будет ли он объединен.
Тем временем способ получения интерполированного значения - это наблюдать такой атрибут:
attrs.$observe('hello', function(changedValue){
console.log(scope.name);
});
И панель: http://plnkr.co/edit/Lnw6LuadTLhhcOTsPC8w?p=preview
Итак, в конце дня это немного запутанное поведение AngularJS, которое может быть изменено в будущем.
Ответ 2
Pawel прав (fooobar.com/questions/486417/...), но я хотел добавить, что проблема в том, что любой атрибут, содержащий интерполяцию {{}}, будет иметь значение null в параметр attrs во время функции связи как первый $digest, поскольку компиляция еще не выполнила их для оценки.
Тот факт, что привязки @равны нулю при связывании функций, является лишь симптомом этого.
В настоящее время нет реального исправления, так как мы не можем запускать $digests в середине процесса компиляции. Таким образом, $watch (или $watch) - единственный реальный способ получить эти значения.
Ответ 3
Для тех, кто в 2015 году читает этот пост, обратите внимание, что способ Angular обрабатывает атрибуты "@"
.
Angular 1.2, интерполяция происходит до вызова функции связывания.
Отличная публикация на эту тему присутствует здесь.