我遇到的问题可以在http://jsfiddle.net/miketheanimal/2CcYp/13/看到这将我的问题减少到最低限度。
我有一个控制器“main”,一个指令“outer”,它不包含的指令,以及一个指令“inner”。每个指令都有一个隔离范围和一个控制器。主控制器和指令控制器设置 $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 将它们嵌套为主 -> 外部 -> 内部。指令中的控制器函数将其父作用域名称(即 *$scope.$parent._name)复制到呈现的 HTML 中(抱歉直接操作 DOM,这是显示名称的最简单方法!)。
我希望外部显示来自控制器的名称(即“main”),它是,我希望内部显示来自外部的名称(即,“外部”),而不是,相反,它也显示“主要”。
问题实际上表现出来,因为在实际代码中,我想在内部和外部范围之间进行绑定,但内部最终绑定到主范围。