Учитывая директиву (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
, чтобы он работал с использованием общей области.