Подтвердить что ты не робот

Angularjs: свойство области ведения журнала в отображаемых функциональных ссылках undefined

У меня есть эта базовая plnkr, которая просто реализует базовую директиву "Hello, X". В функции связи я регистрирую scope.name, но получаю undefined? Почему это так? Не следует ли регистрировать значение свойства name в консоли?

4b9b3361

Ответ 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, интерполяция происходит до вызова функции связывания.

Отличная публикация на эту тему присутствует здесь.