2014-10-30 71 views
2

孩子控制器如何能夠做到以下使用ControllerAs方法:訪問父範圍從ControllerAs語法

app.controller("parentCtrl", function($scope){ 
    $scope.parentObj = {prop1: "not set", prop2: "something"}; 
    $scope.doSomething = function(){...} 
}) 
.controller("childCtrl", function($scope){ 
    $scope.parentObj.prop1 = "changed"; 
}); 

<div ng-controller="parentCtrl"> 
    {{prop1}} 
    <div ng-controller="childCtrl"> 
    {{prop2}} 
    <button ng-click="doSomething()">Do</button> 
    </div> 
</div> 

未做有關父控制器是如何在視圖化名假設,即沒有{{pc.prop2}}

換句話說,我想從使用Controller-As方法的範圍繼承中受益。問題是如何

app.controller("parentCtrl", function(){ 
    this.parentObj = {prop1: "not set", prop2: "something"}; 
    this.doSomething = function(){...} 
}) 
.controller("childCtrl", function($scope){ 

    // $scope.parentObj is undefined! 
}); 
+1

不是。我特別要求「不要假設父控制器是否有別名」。你的鏈接的答案不提供這個解決方案 – 2014-10-30 23:44:06

+0

$ scope。$ parent不是父對象的別名 – yunandtidus 2014-10-30 23:47:36

+1

不,它不是 - 雖然它不使用繼承的範圍(如果它是'$ parent。$ )但是在任何情況下,使用Controller-As,用'this.vmProperty'定義ViewModel,而不是'$ scope.vmProperty'。有了這個,'$ scope。$ parent.vmProperty'是未定義的。 – 2014-10-30 23:53:47

回答

3

當您使用as語法來定義一個控制器,然後訪問父範圍變量子控制器使用下列內容:

var userData = $scope.parentCtrl.user; 

parentCtrl是父控制器的名稱中使用as語法和用戶是在相同的控制器中定義的變量。

+0

我在問題中用粗體顯示的文本中指定:「沒有假設父控制器在視圖中是如何被別名的」 – 2015-07-19 13:39:06