2013-05-27 153 views
1

我有一個在另一個控制器內的控制器。Angularjs繼承父範圍混淆

<div ng-controller="post"> 
    <div ui-if="isAllowed"> 
    <footer ng-controller="footer"></footer> 
    </div> 
</div> 

我相信ui-if會創建一個新的範圍,所以這裏有3個範圍。

我希望頁腳控制器能夠訪問帖子的範圍。

.controller('post', function($scope) { 
    $scope.foo = "bar" 
}) 

我可以很容易做到,但$scope.$parent.$parent.foo我讀到範圍都應該從父自動繼承,並且父東西只是超級笨重。從Angularjs維基

報價:

(如果你真的想通過控制器範圍繼承來共享數據, 沒有什麼,你需要做的兒童範圍將有機會獲得 所有父範圍。加載或瀏覽時)

如何從頁腳範圍內訪問foo的屬性。另請參見控制器的加載順序 不同?

+0

你可以直接訪問它們,就像它們在你的主要適用範圍。 [Plunk Here](http://plnkr.co/edit/0a4mFJdSHs275tqCpYvk?p=preview) – rGil

+0

@rGil哦,你是對的。我正在看看分別顯示範圍的Batarang,但現在我意識到這不是什麼意思。謝謝。 – Harry

回答

3

正如維基所言,你不需要做任何事情。只需通過其名稱訪問它。

<div ng-controller="post"> 
    <div ui-if="isAllowed"> 
    <footer ng-controller="footer"> 
     {{ fooB }} 
    </footer> 
    </div> 
</div> 

function post($scope) { 
    $scope.fooA = 'Foo A'; 
} 

function footer($scope) { 
    $scope.fooB = $scope.fooA + " and Foo B"; 
} 

例如上面會呈現Foo A and Foo B

Fiddle here.

+6

如果這不起作用,會出現什麼問題?我正在使用Angular-loader,當我嘗試在父視圖上調用方法時,我得到一個'undefined'錯誤,該方法在對象上不存在?任何想法如何補救? – Hcabnettek