加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

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

发布时间:2020-12-17 09:36:56 所属栏目:安全 来源:网络整理
导读:我设置了我的控制器使用data-ng-controller =“xyzController as vm” 我有一个场景与父/子嵌套控制器。我没有问题通过使用$ parent.vm.property在嵌套html中访问父属性,但我不知道如何访问父属性从我的子控制器。 我试过注入$ scope然后使用$ scope。$ par
我设置了我的控制器使用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>

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读