Учитывая директиву (container1) с transclude и изолированной областью действия, когда директива связана, я имею следующие области:
Scope 004 <-- scope of the body
Scope 005 <-- scope of directive container1
Scope 006 <-- scope of the ng-transclude
Я ожидал:
Scope 004 <-- scope of the body
Scope 005 <-- scope of the directive
Scope 006 <-- scope of the ng-transclude
Если одна и та же директива имеет общую область видимости вместо изолированной области видимости, я получаю ожидаемый результат.
Это вызывает у меня проблему, потому что, если транслируемый контент содержит другую директиву (component1) с изолированной областью, я получаю:
Scope 004 <-- scope of the body
Scope 005 <-- scope of the directive
Scope 006 <-- scope of the ng-transclude
Scope 007 <-- scope of directive component1
Я хочу использовать такие директивы, как это:
<container1>
<component1 data="objectExposedInContainer1"/>
</container1>
Но это не работает, внутри component1, $scope.data есть undefined, потому что objectExposedInContainer1 не находится в правильной области.
У меня есть два вопроса:
- Почему область
ng-transcludeне является дочерним элементом своей области директивы, если директива имеет изолированную область видимости? Это ошибка? - Если это не ошибка, как директива контейнера может передавать данные в контент, если не путем установки таких атрибутов, как я пытался.
Вот пример, где он не работает: http://plnkr.co/edit/NDmJiRzTF9e5gw8Buht2?p=preview. Поскольку Plunker построен с Anguar, его трудно отлаживать с Batarang. Я рекомендую загрузить код локально. Комментируйте line 10 of app.js, чтобы он работал с использованием общей области.