Saat ini saya menggunakan yang berikut ini.
$scope.$$childHead.customerForm[firstName]
, yang seperti itu:
<form name="customerForm">
<input type="text" name="firstName"
ng-model="data.customer.firstName"
tabindex="1"
ng-disabled="!data.editable"
validationcustomer />
</form>
Tetapi ini hanya berfungsi di Chrome. Sekarang saya mencoba yang berikut:
$scope.editCustomerForm[firstName]
, yang seperti itu:
<form name="customerForm" ng-model="editCustomerForm">
<input type="text" name="firstName"
ng-model="data.customer.firstName" tabindex="1"
ng-disabled="!data.editable"
validationcustomer />
</form>
Yang tidak berhasil. Perhatikan formulir saya ada di dalam Tab Yayasan. Bagaimana saya bisa mengakses firstName
?
EDIT : Sepertinya form
tidak ditambahkan ke scope
saat itu di dalam Tab Yayasan.
Adakah yang punya solusi untuk ini?
Anda bisa melampirkan formulir ke beberapa objek yang didefinisikan dalam pengontrol induk. Kemudian Anda dapat mencapai formulir Anda bahkan dari lingkup anak.
Pengontrol induk
Beberapa templat dalam lingkup anak
Masalahnya adalah bahwa formulir tidak harus ditentukan pada saat ketika kode di controller dijalankan. Jadi, Anda harus melakukan sesuatu seperti ini
sumber
var watcher = $scope.$watcher
dan di dalam pernyataan if Anda akan mengeluarkan pengamat () untuk melepaskan ikatan arloji. Ini menjadikannya sebagai jam tangan 1 kali sehingga Anda tidak menonton setiap intisari setelah diaturJika Anda ingin meneruskan formulir ke controller untuk tujuan validasi, Anda bisa meneruskannya sebagai argumen ke metode yang menangani pengiriman. Gunakan nama formulir, jadi untuk pertanyaan awal itu akan seperti:
sumber
<form name="myform"></form>
, atau bahkan<div ng-form name="myform"></div>
, kemudian acara klik Anda akan menjadi sebagai berikut:ng-click="submit(myform)"
. Kemudian Anda dapat mengakses objek formulir Sudut dalam fungsi klik Anda seperti:$scope.submit = function (form) { if (form.$valid) {
dll.Agak terlambat untuk jawaban tetapi datang dengan opsi berikut. Ini bekerja untuk saya tetapi tidak yakin apakah itu cara yang benar atau tidak.
Dalam pandangan saya, saya melakukan ini:
Dan di controller:
Sekarang setelah melakukan ini, saya sudah mendapatkan formulir saya di variabel controller saya yang
$scope.myForm
sumber
name
atribut untuk menjadi apa yang saya inginkan. Masalah dengan solusi dummy-objek lainnya adalah jika komponen ini digunakan dalam komponen lain dengan bentuk-ng, maka bentuk-ng lain menggunakan nama formulir ini secara harfiah. Jadi itu akan memiliki bidang dengan nama string-literal (BUKAN properti bersarang) dari "dummy.myForm", saya menemukan ini tidak dapat diterima.Untuk dapat mengakses formulir di controller Anda, Anda harus menambahkannya ke objek lingkup dummy.
Sesuatu seperti
$scope.dummy = {}
Untuk situasi Anda, ini berarti:
Di controller Anda, Anda akan dapat mengakses formulir dengan:
dan Anda akan dapat melakukan hal-hal seperti
Tautan WIKI
sumber
dummy.customerForm
akan ditentukan sampai kondising-if
terpenuhi jika elemen bentuk memiliking-if
persyaratan atasnyaJawaban ini agak terlambat, tetapi saya menemukan solusi yang membuat semuanya BANYAK lebih mudah.
Anda benar-benar dapat menetapkan nama formulir langsung ke controller Anda jika Anda menggunakan sintaks controllerAs dan kemudian referensi dari variabel "ini" Anda. Inilah cara saya melakukannya dalam kode saya:
Saya mengkonfigurasi controller melalui ui-router (tetapi Anda dapat melakukannya sesuka Anda, bahkan dalam HTML langsung dengan sesuatu seperti
<div ng-controller="someController as myCtrl">
) Ini adalah apa yang mungkin terlihat seperti dalam konfigurasi ui-router:dan kemudian di HTML, Anda cukup menetapkan nama formulir sebagai "controllerAs". "name" seperti:
sekarang di dalam controller Anda, Anda bisa melakukan ini:
sumber
Ya, Anda dapat mengakses formulir di controller (seperti yang dinyatakan dalam dokumen ).
Kecuali ketika formulir Anda tidak didefinisikan dalam lingkup pengontrol dan didefinisikan dalam lingkup anak sebagai gantinya.
Pada dasarnya, beberapa arahan sudut, seperti
ng-if
,ng-repeat
ataung-include
, akan menciptakan ruang lingkup anak yang terisolasi. Begitu juga arahan khusus denganscope: {}
properti yang ditentukan. Mungkin, komponen fondasi Anda juga menghalangi Anda.Saya memiliki masalah yang sama ketika memperkenalkan tag sederhana di
ng-if
sekitar<form>
.Lihat ini untuk info lebih lanjut:
https://groups.google.com/forum/#!topic/angular/B2uB8-9_Xbk
AngularJS - kehilangan cakupan saat menggunakan ng-include
Catatan: Saya sarankan Anda menulis ulang pertanyaan Anda. Jawaban untuk pertanyaan Anda adalah ya tetapi masalah Anda sedikit berbeda:
Jawabannya sederhana: tidak .
sumber
$scope.forms = {}
danname="forms.form1"
)tambahkan
ng-model="$ctrl.formName"
atribut ke formulir Anda, dan kemudian di controller Anda bisa mengakses form sebagai objek di dalam controller Anda denganthis.formName
sumber
Tentunya Anda tidak dapat mengakses formulir dalam lingkup bec. itu tidak dibuat. DOM dari templat html dimuat sedikit lambat seperti konstruktor pengontrol. solusinya adalah menonton sampai DOM dimuat dan semua ruang lingkup ditentukan!
dalam controller:
sumber