【问题标题】:Accessing parent scope from a child controller with ControllerAs syntax [duplicate]使用 ControllerAs 语法从子控制器访问父范围 [重复]
【发布时间】:2014-12-27 05:16:06
【问题描述】:

如何使用 Controller-As 方法实现以下目标:

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!
});

【问题讨论】:

  • 不是。我特别问“不假设父控制器是如何别名的”。您链接到的答案不提供此解决方案
  • $scope.$parent 对我来说不是父级的别名
  • 不,不是——虽然它不使用继承范围(如果它是$parent.$parent?)但无论如何,使用Controller-As,可以使用this.vmProperty定义ViewModel,而不是$scope.vmProperty。有了这个,$scope.$parent.vmProperty 是未定义的。
  • 嗯......你不能将控制器的整个想法明确地用于视图。所以你可以使用Controller As,你可以使用$parent,你也可以像你一样使用点符号。我真的看不出你想在这个问题中找到什么
  • 修改问题以澄清

标签: angularjs angularjs-scope angularjs-controller


【解决方案1】:

当您使用as 语法定义控制器然后访问子控制器中的父范围变量时,请使用以下内容:

var userData = $scope.parentCtrl.user;

其中parentCtrl 是使用as 语法的父控制器的名称,而用户是在同一控制器中定义的变量。

【讨论】:

  • 我在问题中指定(粗体文本):“不假设父控制器在视图中的别名”
猜你喜欢
  • 1970-01-01
  • 2014-02-22
  • 1970-01-01
  • 1970-01-01
  • 2015-07-08
  • 2014-04-21
  • 1970-01-01
  • 1970-01-01
  • 2017-10-01
相关资源
最近更新 更多