Проблема, с которой я столкнулся, можно увидеть на странице http://jsfiddle.net/miketheanimal/2CcYp/13/ Это сводит мою проблему к минимуму.
У меня есть контроллер «main», директива «external», которая включает в себя, и директива «inner», которая этого не делает. Каждая директива имеет изолированную область действия и контроллер. Контроллеры main и директивы устанавливают $ scope._name = '...', чтобы я мог различать их.
var module = angular.module('miketa', []);
function main ($scope) {
$scope._name = 'main' ;
} ;
module.directive('outer', function() {
return {
restrict: 'E',
replace: true,
transclude: true,
scope: {},
template: '<div><div ng-transclude></div></div>',
controller: [ '$scope', function($scope) {
$scope._name = 'outer' ;
document.getElementById('opn').innerHTML = $scope.$parent._name ;
}]}});
module.directive('inner', function() {
return {
restrict: 'E',
replace: true,
scope: {},
template: '<div></div>',
controller: [ '$scope', function($scope) {
$scope._name = 'inner' ;
document.getElementById('ipn').innerHTML = $scope.$parent._name ;
}]}});
HTML вкладывает их как main -> external -> inner. Функции контроллера в директивах копируют имя своей родительской области видимости (например, * $ scope. $ Parent._name) в визуализированный HTML-код (извинения за непосредственное управление DOM, это был самый простой способ отобразить имена!).
Я ожидал бы, что external покажет имя из контроллера (т. Е. «Main»), который есть, и я бы ожидал, что inner покажет имя из external (т.е. «внешний»), которого нет, скорее он также показывает «main».
Проблема на самом деле проявляется, поскольку в реальном коде я хотел бы выполнить привязку между внутренней и внешней областью действия, но внутренняя заканчивается привязкой в основную область.