Как определить директиву в Angularjs, которая получает параметры и включает подэлементы с помощью ngIf или ngRepeat?
Полную демонстрацию проблемы можно найти здесь — http://jsfiddle.net/2aa47/4/. Вот HTML:
<div ng-controller='myController'>
<my-directive condition="flag">
Both 'flag' and 'a' are defined on controller's scope.
Hi. {{a}} -> Nothing is shown after 'Hi'.
</my-directive>
</div>
И сценарий. В моей реальной проблеме у меня значительно больший шаблон с ngIf посередине.
app.directive('myDirective', function () {
return {
restrict: 'E',
transclude: true,
scope: { condition: '=condition' },
template: '<div ng-if="condition" ng-transclude></div>'
};
});
Чтобы получить директиву параметров, необходимо создать изолированную область. И ngIf, и ngRepeat, и другие подобные директивы создадут область, которая наследуется от этой изолированной области. Затем включенные элементы получат область действия более позднего, то есть непосредственно под изолированным элементом директивы:
Controller's scope
Directive's isolated scope
Scope created by ngIf
Element transcluded by directive. Should be directly under controller's scope
Теперь включенные элементы внутри директивы не могут получить доступ к области действия контроллера. Как смягчить это?
Для справки, в проекте Angular есть такая проблема — https://github.com/angular/angular.js/issues/1809.