我设置了我的控制器使用data-ng-controller =“xyzController as vm”
我有一个场景与父/子嵌套控制器。我没有问题通过使用$ parent.vm.property在嵌套html中访问父属性,但我不知道如何访问父属性从我的子控制器。
我试过注入$ scope然后使用$ scope。$ parent.vm.property,但是这不工作?
任何人都可以提供建议?
如果你的HTML如下所示,你可以这样做:
原文链接:https://www.f2er.com/angularjs/148067.html<div ng-controller="ParentCtrl"> <div ng-controller="ChildCtrl"> </div> </div>
然后,您可以访问父作用域,如下所示
function ParentCtrl($scope) { $scope.cities = ["NY","Amsterdam","Barcelona"]; } function ChildCtrl($scope) { $scope.parentcities = $scope.$parent.cities; }
如果你想从你的视图访问父控制器,你必须这样做:
<div ng-controller="xyzController as vm"> {{$parent.property}} </div>
参见jsFiddle:http://jsfiddle.net/2r728/
更新
实际上,由于您在父控制器中定义了城市,您的子控制器将继承所有范围变量。所以理论上你不必调用$ parent。上面的例子也可以写成如下:
function ParentCtrl($scope) { $scope.cities = ["NY","Barcelona"]; } function ChildCtrl($scope) { $scope.parentCities = $scope.cities; }
AngularJS文档使用这种方法,here你可以阅读更多关于$ scope。
另一个更新
我认为这是一个更好的答案原海报。
HTML
<div ng-app ng-controller="ParentCtrl as pc"> <div ng-controller="ChildCtrl as cc"> <pre>{{cc.parentCities | json}}</pre> <pre>{{pc.cities | json}}</pre> </div> </div>
JS
function ParentCtrl() { var vm = this; vm.cities = ["NY","Barcelona"]; } function ChildCtrl() { var vm = this; ParentCtrl.apply(vm,arguments); // Inherit parent control vm.parentCities = vm.cities; }
如果使用控制器作为方法,您还可以访问父作用域,如下所示
function ChildCtrl($scope) { var vm = this; vm.parentCities = $scope.pc.cities; // note pc is a reference to the "ParentCtrl as pc" }
正如你可以看到,有许多不同的方式访问$ scope。
Updated fiddle
function ParentCtrl() { var vm = this; vm.cities = ["NY","Barcelona"]; } function ChildCtrl($scope) { var vm = this; ParentCtrl.apply(vm,arguments); vm.parentCitiesByScope = $scope.pc.cities; vm.parentCities = vm.cities; }
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.20/angular.min.js"></script> <div ng-app ng-controller="ParentCtrl as pc"> <div ng-controller="ChildCtrl as cc"> <pre>{{cc.parentCities | json}}</pre> <pre>{{cc.parentCitiesByScope | json }}</pre> <pre>{{pc.cities | json}}</pre> </div> </div>