Nếu HTML của bạn giống như bên dưới, bạn có thể làm một cái gì đó như thế này:
<div ng-controller="ParentCtrl">
<div ng-controller="ChildCtrl">
</div>
</div>
Sau đó, bạn có thể truy cập phạm vi cha mẹ như sau
function ParentCtrl($scope) {
$scope.cities = ["NY", "Amsterdam", "Barcelona"];
}
function ChildCtrl($scope) {
$scope.parentcities = $scope.$parent.cities;
}
Nếu bạn muốn truy cập bộ điều khiển chính từ chế độ xem của mình, bạn phải làm một cái gì đó như thế này:
<div ng-controller="xyzController as vm">
{{$parent.property}}
</div>
Xem jsFiddle: http://jsfiddle.net/2r728/
Cập nhật
Thực tế vì bạn đã xác định cities
trong trình điều khiển chính, trình điều khiển con của bạn sẽ kế thừa tất cả các biến phạm vi. Vì vậy, về mặt lý thuyết bạn không phải gọi $parent
. Ví dụ trên cũng có thể được viết như sau:
function ParentCtrl($scope) {
$scope.cities = ["NY","Amsterdam","Barcelona"];
}
function ChildCtrl($scope) {
$scope.parentCities = $scope.cities;
}
Các tài liệu AngularJS sử dụng phương pháp này, ở đây bạn có thể đọc thêm về $scope
.
Một cập nhật khác
Tôi nghĩ rằng đây là một câu trả lời tốt hơn cho các poster ban đầu.
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>
Mã não
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;
}
Nếu bạn sử dụng controller as
phương thức, bạn cũng có thể truy cập phạm vi cha như sau
function ChildCtrl($scope) {
var vm = this;
vm.parentCities = $scope.pc.cities; // note pc is a reference to the "ParentCtrl as pc"
}
Như bạn có thể thấy có nhiều cách khác nhau trong việc truy cập $scopes
.
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>