我有一个问题,可以在 http://jsfiddle.net/miketheanimal/2CcYp/13/ 中看到。这是我将问题最小化后的版本。
我有一个控制器“main”,一个指令“outer”和一个不会转移的指令“inner”。每个指令都有一个隔离作用域和控制器。主要和指令控制器设置$ scope._name = '...',所以我可以区分它们。
我有一个控制器“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将它们嵌套为main -> outer -> inner。指令中的控制器函数将它们父级作用域名称(即$ scope.$ parent._name)复制到呈现的HTML中(对于直接操作DOM,我很抱歉,这是显示名称的最简单方法!)。
我期望outer显示来自控制器的名称(即“main”),它确实如此,而我希望inner显示来自outer的名称(即“outer”),但它没有,而是也显示“main”。
实际上,问题表现在实际代码上,我想在inner和outer作用域之间进行绑定,但是inner最终绑定到了main作用域。