2014-10-30 69 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