Jika HTML Anda seperti di bawah ini Anda dapat melakukan sesuatu seperti ini:
<div ng-controller="ParentCtrl">
<div ng-controller="ChildCtrl">
</div>
</div>
Kemudian Anda dapat mengakses lingkup induk sebagai berikut
function ParentCtrl($scope) {
$scope.cities = ["NY", "Amsterdam", "Barcelona"];
}
function ChildCtrl($scope) {
$scope.parentcities = $scope.$parent.cities;
}
Jika Anda ingin mengakses controller induk dari tampilan Anda, Anda harus melakukan sesuatu seperti ini:
<div ng-controller="xyzController as vm">
{{$parent.property}}
</div>
Lihat jsFiddle: http://jsfiddle.net/2r728/
Memperbarui
Sebenarnya karena Anda mendefinisikan cities
dalam kontroler induk, kontroler anak Anda akan mewarisi semua variabel lingkup. Jadi secara teori Anda tidak perlu menelepon $parent
. Contoh di atas juga dapat ditulis sebagai berikut:
function ParentCtrl($scope) {
$scope.cities = ["NY","Amsterdam","Barcelona"];
}
function ChildCtrl($scope) {
$scope.parentCities = $scope.cities;
}
Dokumen AngularJS menggunakan pendekatan ini, di sini Anda dapat membaca lebih lanjut tentang $scope
.
Pembaruan lain
Saya pikir ini adalah jawaban yang lebih baik untuk poster aslinya.
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;
}
Jika Anda menggunakan controller as
metode ini, Anda juga dapat mengakses lingkup induk sebagai berikut
function ChildCtrl($scope) {
var vm = this;
vm.parentCities = $scope.pc.cities; // note pc is a reference to the "ParentCtrl as pc"
}
Seperti yang Anda lihat ada banyak cara berbeda dalam mengakses $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>
angular.module('app').controller('ParentCtrl', ParentCtrl);
JavaScript
lihat: developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/...Saya baru saja memeriksa
bekerja untukku.
dan itu akan terjadi
untuk tampilan.
sumber
Saat Anda menggunakan
as
sintaks, sepertiParentController as parentCtrl
, untuk mendefinisikan pengontrol kemudian untuk mengakses variabel lingkup induk di pengontrol anak gunakan sebagai berikut:Dimana
parentCtrl
nama pengendali induk menggunakanas
sintaks danid
merupakan variabel yang didefinisikan dalam pengontrol yang sama.sumber
Beberapa kali Anda mungkin perlu memperbarui properti induk secara langsung dalam lingkup anak. mis. perlu menyimpan tanggal dan waktu kontrol orangtua setelah perubahan oleh pengontrol anak. mis. Kode di JSFiddle
HTML
JS
sumber
Anda juga dapat menghindari pewarisan ruang lingkup dan menyimpan barang-barang di ruang lingkup "global".
Jika Anda memiliki pengontrol utama dalam aplikasi Anda yang membungkus semua pengontrol lain, Anda dapat menginstal "pengait" ke lingkup global:
Kemudian di pengontrol anak, Anda dapat mengakses ruang lingkup "global" dengan
$scope.root
. Apa pun yang Anda atur di sini akan terlihat secara global.Contoh:
sumber
Saya percaya saya memiliki masalah serupa baru-baru ini
Pengaturan saya sedikit berbeda, tetapi hal yang sama mungkin masih berfungsi
sumber
Dari komponen anak, Anda dapat mengakses properti dan metode komponen induk dengan 'memerlukan'. Berikut ini sebuah contoh:
Induk:
Anak:
sumber
Sangat mudah dan berfungsi, tetapi tidak yakin mengapa ....
sumber
Mungkin ini lumpuh tetapi Anda juga bisa mengarahkan keduanya ke beberapa objek eksternal:
Manfaatnya di sini adalah bahwa pengeditan di ChildCtrl sekarang mendukung kembali ke data di induk.
sumber