Pull to refresh

Comments 9

У меня все-таки есть подозрение, что в данном случае возможно и более элегантное решение. Почему бы не использовать $parent?
Вы имеете ввиду, писать $parent в options? Это очень не универсально, так как мы не знаем, будет ли наш select обернут еще в какие либо скоупы внутри шаблона директивы.
Да, если взять шаблон из примера, то можно дописать $parent.colors. Но как только мы добавим ng-if (он создает scope) в шаблон, то нам придется менять «вызов» директивы и писать $parent.$parent.colors.
Понял. Т.е., получается, $transclude будет идти вверх по дереву, пока не найдет переменную?
Я точно не уверен, как именно оно работает. Но могу показать на примере, что происходит со скоупами.
Предположим, у нас есть такое дерево скоупов:

$rootScope < ScopeA < ScopeB < ScopeC (isolate) < ScopeD < ScopeE

ScopeC — изолирован (пусть это основной scope директивы).
Любая переменная в ScopeA будет доступна в ScopeB, но не доступна в ScopeC, D и E, так как С изолирована и все ее дочерние скоупы «не видят» выше нее. С помощью $transclude мы можем получить доступ до ScopeB (и, соответственно, до всех его родителей).
Почитал доку. Трансклюженная функция получает scope, унаследованный от родителя. Плохо понятно, что происходит в случае с ng-if. Потестил в коде, при обертывании в ng-if все ок, $parent.colors срабатывает.
Все, вижу, спасибо. Я не в том месте обертывал.
В шаблоне или в директиве?
В шаблоне, скорее. В директиве тоже можно, конечно, но это уже менее лаконично.
Sign up to leave a comment.

Articles