我有的問題可以在http://jsfiddle.net/miketheanimal/2CcYp/13/看到,這可以將我的問題降到最低。嵌套指令和父範圍
我有一個控制器「主」,一個指令「外」,transclude的和一個指令「內部」,而不是。每個指令都有一個隔離範圍和一個控制器。主控制器和指令控制器設置$ 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的道歉操作,這是顯示名稱的最簡單方法!)。
我期望外來自控制器顯示名稱(即,「主」),這是確實的,我會期望內從顯示名稱外(即,「外部「),這不是,而是顯示」主要「。
這個問題實際上表現由於在實際的代碼,我想在內和外作用域之間結合的,但內最終結合主範圍。
這是相當邏輯,我認爲你的外部範圍是隔離的,所以你可以如何遺傳它? –
是的,範圍是孤立的,所以它們不會原型繼承,但它們確實有父範圍($ scope。$ parent bit),並且這些似乎並不按我期望的方式工作(內部 - >外部 - >主)。正如我在最後一段中指出的,當我試圖在* inner *和* outer *的範圍(即內部*範圍內:{innervar:'= outervar'} *)之間進行綁定時,這會成爲問題。 –
啊ng-transclude將ng-scope設置爲false! –