AngularJS从子控制器访问父作用域

前端之家收集整理的这篇文章主要介绍了AngularJS从子控制器访问父作用域前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我设置了我的控制器使用data-ng-controller =“xyzController as vm”

我有一个场景与父/子嵌套控制器。我没有问题通过使用$ parent.vm.property在嵌套html中访问父属性,但我不知道如何访问父属性从我的子控制器。

我试过注入$ scope然后使用$ scope。$ parent.vm.property,但是这不工作?

任何人都可以提供建议?

如果你的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>
原文链接:https://www.f2er.com/angularjs/148067.html

猜你在找的Angularjs相关文章