gpt4 book ai didi

AngularJS 从子 Controller 访问父范围

转载 作者:行者123 更新时间:2023-12-03 03:57:17 25 4
gpt4 key购买 nike

我已使用 data-ng-controller="xyzController as vm"设置 Controller

我有一个带有父/子嵌套 Controller 的场景。我使用 $parent.vm.property 访问嵌套 html 中的父属性没有问题,但我无法弄清楚如何从子 Controller 中访问父属性。

我尝试注入(inject) $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;
}

如果您想从您的 View 访问父 Controller ,您必须执行以下操作:

<div ng-controller="xyzController as vm">
{{$parent.property}}
</div>

参见 jsFiddle: http://jsfiddle.net/2r728/

更新

实际上自从你定义了 cities在父 Controller 中,您的子 Controller 将继承所有范围变量。所以理论上你不必打电话$parent 。上面的例子还可以写成如下:

function ParentCtrl($scope) {
$scope.cities = ["NY","Amsterdam","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", "Amsterdam", "Barcelona"];
}

function ChildCtrl() {
var vm = this;
ParentCtrl.apply(vm, arguments); // Inherit parent control

vm.parentCities = vm.cities;
}

如果您使用controller as方法您还可以访问父作用域,如下

function ChildCtrl($scope) {
var vm = this;
vm.parentCities = $scope.pc.cities; // note pc is a reference to the "ParentCtrl as pc"
}

如您所见,访问$scopes有多种不同的方式。 .

Updated fiddle

function ParentCtrl() {
var vm = this;
vm.cities = ["NY", "Amsterdam", "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>

关于AngularJS 从子 Controller 访问父范围,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21453697/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com