Comments 9
У меня все-таки есть подозрение, что в данном случае возможно и более элегантное решение. Почему бы не использовать $parent?
Вы имеете ввиду, писать $parent в options? Это очень не универсально, так как мы не знаем, будет ли наш select обернут еще в какие либо скоупы внутри шаблона директивы.
Да, если взять шаблон из примера, то можно дописать $parent.colors. Но как только мы добавим ng-if (он создает scope) в шаблон, то нам придется менять «вызов» директивы и писать $parent.$parent.colors.
Да, если взять шаблон из примера, то можно дописать $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 (и, соответственно, до всех его родителей).
Предположим, у нас есть такое дерево скоупов:
$rootScope < ScopeA < ScopeB < ScopeC (isolate) < ScopeD < ScopeE
ScopeC — изолирован (пусть это основной scope директивы).
Любая переменная в ScopeA будет доступна в ScopeB, но не доступна в ScopeC, D и E, так как С изолирована и все ее дочерние скоупы «не видят» выше нее. С помощью $transclude мы можем получить доступ до ScopeB (и, соответственно, до всех его родителей).
В шаблоне или в директиве?
Sign up to leave a comment.
Тонкости AngularJS: select внутри шаблона директивы