Ini adalah kesalahan umum dalam aplikasi Angular baru. Anda tidak ingin menulis nilai-nilai Anda ke dalam HTML di server jika Anda dapat menghindarinya. Jika faktanya, jika Anda bisa mendapatkan server Anda membuat HTML seluruhnya, semuanya lebih baik.
Idealnya, Anda ingin mengirimkan template HTML Sudut Anda, lalu tarik nilai-nilai Anda melalui $ http di JSON dan letakkan di lingkup Anda.
Jadi jika memungkinkan, lakukan ini:
app.controller('MyController', function($scope, $http) {
$http.get('/getCardInfo.php', function(data) {
$scope.card = data;
});
});
<input type="text" ng-model="card.description" />
Jika Anda benar-benar HARUS merender nilai-nilai Anda ke dalam HTML dari server Anda, Anda bisa meletakkannya dalam variabel global dan mengaksesnya dengan $ window:
Di tajuk halaman Anda akan menulis:
<head>
<script>
window.card = { description: 'foo' };
</script>
</head>
Dan kemudian di controller Anda, Anda akan mendapatkannya seperti ini:
app.controller('MyController', function($scope, $window) {
$scope.card = $window.card;
});
Saya harap itu membantu.
Jika Anda tidak dapat mengerjakan ulang aplikasi Anda untuk melakukan apa yang disarankan @blesh (tarik data JSON turun dengan $ http atau $ resource dan isi $ scope), Anda bisa menggunakan ng-init sebagai gantinya:
Lihat juga AngularJS - Atribut nilai pada kotak teks input diabaikan ketika ada model-ng yang digunakan?
sumber
ng-init
cukup berguna ketika menetapkan nilai dari kode-balik / postback misalnya<input name="phone" data-ng-model="frm.phone" data-ng-init="frm.phone= '<%: Model.Phone %>'" data-ng-pattern="/^[0-9() \-+]+$/" type="tel" required />
. Agak jelek? Ya, tetapi apakah trik & mengatasi sakit kepala integrasi dalam proses.Ini jelas kurang, tetapi perbaikan yang mudah ditambahkan untuk AngularJS. Cukup tulis arahan cepat untuk mengatur nilai model dari bidang input.
Ini versi saya:
sumber
controller
untuk arahan Anda, dan mengapa tidak menggunakanlink
metode ini ?. Saya pemula untuk angularjsval = $attrs.ngInitial || $attrs.value || $element.val()
bisa berfungsi dengan elemen tertentu.IMHO solusi terbaik adalah arahan @Kevin Stone, tetapi saya harus memutakhirkannya agar berfungsi di setiap kondisi (pilih, textarea), dan yang ini pasti bekerja:
sumber
Anda dapat menggunakan arahan khusus (dengan dukungan untuk textarea, pilih, radio dan kotak centang), periksa posting blog ini https://glaucocustodio.github.io/2014/10/20/init-ng-model-from-form- bidang-atribut / .
sumber
Anda juga dapat menggunakan dalam kode HTML Anda:
ng-init="card.description = 12345"
Ini tidak direkomendasikan oleh Angular, dan seperti yang disebutkan di atas Anda harus menggunakan controller Anda secara eksklusif.
Tapi itu berhasil :)
sumber
Saya memiliki pendekatan sederhana, karena saya memiliki beberapa validasi dan topeng berat dalam formulir saya. Jadi, saya menggunakan jquery untuk mendapatkan nilai saya lagi dan menjalankan acara "ubah" ke validasi:
sumber
Seperti yang ditunjukkan orang lain, bukan praktik yang baik untuk menginisialisasi data pada tampilan. Akan tetapi, menginisialisasi data tentang Pengendali. (lihat http://docs.angularjs.org/guide/controller )
Jadi kamu bisa menulis
dan
Dengan cara ini pandangan tidak mengandung data, dan pengontrol menginisialisasi nilai saat nilai nyata sedang dimuat.
sumber
Jika Anda menyukai pendekatan Kevin Stone di atas https://stackoverflow.com/a/17823590/584761 pertimbangkan pendekatan yang lebih mudah dengan menulis arahan untuk tag tertentu seperti 'input'.
Jika Anda memilih rute ini, Anda tidak perlu khawatir tentang menambahkan-inisial ke setiap tag. Secara otomatis menetapkan nilai model ke atribut nilai tag. Jika Anda tidak menetapkan atribut nilai, maka nilai tersebut akan default ke string kosong.
sumber
Berikut adalah pendekatan server-centric:
Ini adalah ide dasar yang sama dengan jawaban yang lebih populer pada pertanyaan ini, kecuali $ supply.value mendaftarkan layanan yang berisi nilai default Anda.
Jadi, di server, Anda dapat memiliki sesuatu seperti:
Dan memasukkannya ke halaman Anda melalui teknologi sisi server pilihan Anda. Inilah Intisari: https://gist.github.com/exclsr/c8c391d16319b2d31a43
sumber
Yang ini adalah versi yang lebih umum dari ide-ide yang disebutkan di atas ... Ini hanya memeriksa apakah ada nilai dalam model, dan jika tidak, itu menetapkan nilai ke model.
JS:
HTML (contoh penggunaan):
sumber
$scope
panggilan untukgetter()
- berharap ini jelas bagi orang lain yang mencoba ini!Saya mencoba apa yang disarankan oleh @Mark Rajcok. Ini berfungsi untuk nilai-nilai String (Visa-4242). Silakan merujuk biola ini .
Dari biola:
Hal yang sama yang dilakukan dalam biola dapat dilakukan menggunakan
ng-repeat
, yang semua orang bisa merekomendasikan. Tetapi setelah membaca jawaban yang diberikan oleh @Mark Rajcok, saya hanya ingin mencoba yang sama untuk formulir dengan berbagai profil. Semuanya berjalan dengan baik sampai saya memiliki $ scope.profiles = [{}, {}]; kode dalam pengontrol. Jika saya menghapus kode ini, saya mendapat kesalahan. Tetapi dalam skenario normal saya tidak dapat mencetak$scope.profiles = [{},{}];
karena saya mencetak atau gema html dari server. Apakah mungkin untuk mengeksekusi di atas, dengan cara yang sama seperti @Mark Rajcok lakukan untuk nilai-nilai string seperti<input name="card[description]" ng-model="card.description" ng-init="card.description='Visa-4242'">
, tanpa harus menggemakan bagian JavaScript dari server.sumber
Baru saja menambahkan dukungan untuk elemen pilih ke Ryan Montgomery "fix"
});
sumber
Jika Anda memiliki nilai init di URL seperti
mypage/id
, maka pada pengontrol JS sudut Anda dapat menggunakanlocation.pathname
untuk menemukan id dan menetapkannya ke model yang Anda inginkan.sumber