Скажем, у меня есть директива, которая просто выводит идентификатор области видимости.
.directive('myCustomer', function() {
return {
template: 'directive scope {{$id}}',
link: function(scope, el, attrs) {
//console.log('controller scope', 'HOW?');
}
};
});
Случай 1:
используется в контроллере, как обычно. Он выводит 003 как для контроллера, так и для директивы.
<div ng-controller="Ctrl">
controller scope : {{$id}}
<div my-customer></div>
</div>
демо: http://plnkr.co/edit/3UyDwk?p=preview
Случай 2.
Затем я использовал ту же директиву в контроллере, что и следующая, в ng-include и ng-repeat. Следующее выводит идентификаторы областей, 003, 004, 005… и так далее.
<div ng-controller="Ctrl">
controller scope : {{$id}}
<div ng-include="'ng-repeat.html'"></div>
</div>
демо: http://plnkr.co/edit/6vMpCt?p=preview
Я понимаю, что ng-include и ng-repeat создают свою собственную область.
Вопрос:
Мой вопрос: "Как я могу надежно получить область действия контроллера в директиве?"
Из приведенного выше случая 1 и случая 2 я хочу получить область «003» в директиве с тем же кодом.
Я могу использовать scope
для случая 1,
но для случая 2 мне нужно использовать scope.$parent.$parent
и если я использую только ng-repeat, мне нужно использовать scope.$parent
Что, если я использую его внутри ng-include и нг-включить? scope.$parent.$parent.$parent…
?
Я искал код типа scope.controllerScope()
, которого не существует.
Мой вариант использования - вызвать функцию в контроллере из директивы без использования изолированной области.
Надеюсь, мой вопрос понятен.