2013-08-26 3 views
0

I имеет следующую структуру:AngularJS: Как создать родительскую директиву с использованием перезаписи для компиляции перед дочерней директивой?

<dad-dir> 
    <kid-dir></bar-dir> 
    <kid-dir></bar-dir> 
</dad-dir> 

Здесь dadDir является родительской директивой, и kidDir является директивой ребенка. В dadDir, transclude установлено значение true. Результат выглядит примерно так:

<div class='dad-dir'> 
    <span class='kid-dir'>Kid directive output</span> 
    <span class='kid-dir'>Kid directive output</span> 
</div> 

проблема у меня есть, kidDir s компилируются/связаны, прежде dadDir. Это проблема, потому что я хочу, чтобы dadDir устанавливал определенные атрибуты, которые я хочу, чтобы наследовать kidDir. У меня есть строка console.log в функциях link как dadDir, так и kidDir, а те, что указаны в kidDir, регистрируются до dadDir.

Я попытался изменить приоритет, установив dadDir 's приоритет 10 и kidDir - 1, но это не влияет.

Любые идеи?

+0

'^ fooDir' - правильное понятие. как вы используете foodir, связывая функцию или просто заменяя некоторые вещи? – kangoroo

+0

, потому что в определении директивы foo-dir вы должны определить контроллер, а затем использовать его в bar-dir, link: – kangoroo

+0

@kangoroo У меня есть контроллер, определенный в родительской директиве –

ответ

0

Вы пытались перевести в материнский элемент?

в директиве fooDir:

transclude: true 
replace: true 
template: "<div ng-transclude></div>" 

и после того, как у ребенка Директива barDir

require: '^fooDir' 
+0

это именно то, что я делаю, но 'require' в child barDir дает мне ошибку:' no controller fooDir' ' –

1

Я считаю, что это было ошибкой в ​​angularjs версии 1.0.5, что я был ранее использованием. Я только что обновил до 1.2 и магически, require: '^dadDir 'от kidDir работ.

Смежные вопросы