Когда я устанавливаю контроллер на элементе, этот элемент и его дочерние объекты имеют доступ к области этого контроллера. Это имеет смысл.Как получить доступ к изолированной области действия в директиве, которая не использует шаблон
Однако, когда я добавляю директиву с изолированной областью в элемент (как атрибут), я бы ожидал, что этот элемент и его дочерние объекты будут иметь доступ к изолированной области видимости, но это не так.
HTML:
<body ng-app="testMod" ng-controller="ParentController">
<div id="div1" ng-controller="MyController">
<a href="#" ng-click="doit()">MyController</a>
</div>
<div id="div2" my-directive>
<a href="#" ng-click="doit()">MyDirective</a>
</div>
</body>
JS:
(function() {
angular
.module('testMod', [])
.controller('ParentController', ['$scope', function($scope) {
$scope.doit = function() {
console.log('ParentController scope')
}
}])
.directive('myDirective', [function() {
return {
scope: {},
restrict: 'A',
controller: 'MyController'
};
}])
.controller('MyController', ['$scope', function($scope) {
$scope.doit = function() {
console.log("MyController scope");
};
}]);
})();
Когда я нажимаю на ссылку #div1
«s, MyController scope
выводится, как я ожидал.
Когда я нажимаю на ссылку #div2
, я ожидаю того же из-за изолированного объема, который я добавил в директиве, но вместо этого выводится ParentController scope
.
Итак, какие элементы используют изолированный объем? К чему это относится? Могу ли я дать детям div[my-directive]
доступ к нему?
Transclude не помогает мне здесь; Я хочу, чтобы у детей div[my-directive]
был доступ к изолированной области действия директивы, а не к родительской области, но я не могу использовать шаблон в этом случае. Я по существу хочу, чтобы поведение контроллера от #div1
, но мне нужна функция link
, чтобы сделать некоторые манипуляции с DOM для детей.