Saya memiliki dua pengontrol, satu dibungkus satu sama lain. Sekarang saya tahu lingkup anak mewarisi properti dari lingkup induk tetapi apakah ada cara untuk memperbarui variabel lingkup induk? Sejauh ini saya belum menemukan solusi yang jelas.
Dalam situasi saya, saya memiliki pengontrol kalender dalam formulir. Saya ingin memperbarui tanggal mulai dan akhir dari lingkup induk (yang merupakan formulir) sehingga formulir tersebut memiliki tanggal mulai dan berakhir saat dikirimkan.
Jawaban:
Anda perlu menggunakan objek (bukan primitif) dalam lingkup induk dan kemudian Anda akan dapat memperbaruinya langsung dari lingkup anak
Induk:
Anak:
Demo kerja : http://jsfiddle.net/sh0ber/xxNxj/
Lihat Apa nuansa dari scope prototypal / prototypical inheritance di AngularJS?
sumber
Ada satu cara lagi untuk melakukan tugas ini dan tidak menggunakan
$scope.$parent
variabel.Persiapkan saja metode untuk mengubah nilai dalam lingkup induk dan gunakan di anak satu. Seperti ini:
Ini juga berfungsi dan memberi Anda lebih banyak kendali atas perubahan nilai.
Anda kemudian dapat juga memanggil metode bahkan dalam HTML seperti:
<a ng-click="changeSimpleValue('y')" href="#">click me!</a>
.sumber
Ini juga berfungsi (tetapi tidak yakin apakah ini mengikuti praktik terbaik atau tidak)
sumber
Saat Anda menetapkan atribut primitif ke lingkup, itu selalu lokal ke lingkup (mungkin dibuat dengan cepat), bahkan jika lingkup induk memiliki atribut dengan nama yang sama. Ini adalah keputusan desain, dan IMHO yang bagus.
Jika Anda perlu mengubah beberapa primitif (ints, boolean, string) di lingkup induk, dari tampilan, Anda memerlukannya menjadi atribut objek lain dalam lingkup itu, sehingga tugas dapat membaca:
dan itu akan, pada gilirannya:
viewData
objek dari ruang lingkup apa pun yang didefinisikanmyAttr
atributnya.sumber
Untuk mengakses variabel yang dideklarasikan di induk, kita harus menggunakan $ parent di pengontrol anak atau file template
Dalam pengontrol
Dalam template html
sumber