Saya mencoba melihat apakah ada cara sederhana untuk mengakses ruang lingkup internal pengontrol melalui fungsi javascript eksternal (sama sekali tidak relevan dengan pengontrol target)
Saya telah melihat beberapa pertanyaan lain di sini
angular.element("#scope").scope();
akan mengambil lingkup dari elemen DOM, tetapi upaya saya saat ini tidak menghasilkan hasil yang tepat.
Inilah jsfiddle: http://jsfiddle.net/sXkjc/5/
Saat ini saya sedang melalui transisi dari JS polos ke Angular. Alasan utama saya berusaha mencapai ini adalah untuk menjaga kode perpustakaan asli saya sebanyak mungkin; menghemat kebutuhan bagi saya untuk menambahkan setiap fungsi ke controller.
Ada ide tentang bagaimana saya bisa mencapai ini? Komentar tentang biola di atas juga diterima.
sumber
.scope()
mengharuskan Data Debug untuk diaktifkan tetapi menggunakan Data Debug dalam produksi tidak dianjurkan karena alasan kecepatan. Solusi di bawah ini sepertinya berputar di sekitarscope()
Jawaban:
Anda perlu menggunakan $ scope. $ Apply () jika Anda ingin membuat perubahan pada nilai scope dari luar kendali angularjs seperti event handler jquery / javascript.
Demo: Biola
sumber
angular.element("#scope")
tidak berfungsi, meskipunangular.element($("#scope"))
berfungsi, Anda harus memiliki jquery jugaSudah lama sejak saya memposting pertanyaan ini, tetapi mengingat pandangan yang sepertinya masih ada, inilah solusi lain yang saya dapatkan selama beberapa bulan terakhir ini:
Kode di atas pada dasarnya menciptakan fungsi yang disebut
safeApply
yang calles yang$apply
fungsi (seperti yang dinyatakan dalam jawaban Arun) jika dan hanya sudut saat tidak akan melalui satu$digest
tahap. Di sisi lain, jika Angular saat ini sedang mencerna hal-hal, itu hanya akan menjalankan fungsi seperti itu, karena itu akan cukup untuk memberi sinyal ke Angular untuk melakukan perubahan.Banyak kesalahan terjadi ketika mencoba menggunakan
$apply
fungsi saat AngularJs sedang dalam$digest
tahap. ThesafeApply
kode di atas adalah pembungkus yang aman untuk mencegah kesalahan tersebut.(catatan: Saya pribadi suka membuang
safeApply
sebagai fungsi$rootScope
untuk keperluan kenyamanan)Contoh:
Demo: http://jsfiddle.net/sXkjc/227/
sumber
Cara lain untuk melakukannya adalah:
sumber
kita bisa menyebutnya setelah dimuat
http://jsfiddle.net/gentletech/s3qtv/3/
sumber
Sudah lama sejak saya mengajukan pertanyaan ini, tapi inilah jawaban yang tidak memerlukan jquery:
sumber
Inilah solusi yang dapat digunakan kembali: http://jsfiddle.net/flobar/r28b0gmq/
sumber
Anda juga dapat mencoba:
sumber
Jawaban yang diterima sangat bagus. Saya ingin melihat apa yang terjadi pada ruang lingkup sudut dalam konteks
ng-repeat
. Masalahnya, Angular akan membuat sub-lingkup untuk setiap item yang diulang. Saat memanggil ke metode yang ditentukan pada aslinya$scope
, yang mempertahankan nilai aslinya (karena penutupan javascript). Namun,this
merujuk pada ruang lingkup panggilan / objek. Ini bekerja dengan baik, selama Anda jelas kapan$scope
danthis
sama dan kapan mereka berbeda. hthBerikut adalah biola yang menggambarkan perbedaannya: https://jsfiddle.net/creitzel/oxsxjcyc/
sumber
Saya pemula, sangat menyesal jika ini adalah praktik yang buruk. Berdasarkan jawaban yang dipilih, saya melakukan fungsi ini:
Saya menggunakannya dengan cara ini:
Omong-omong, maaf untuk bahasa Inggris saya
sumber
mengakses nilai ruang lingkup
menganggap bahwa programRow.StationAuxiliaryTime adalah array objek
sumber
Kita perlu menggunakan Angular Js built in function $ berlaku untuk variabel lingkup acsess atau fungsi di luar fungsi controller.
Ini dapat dilakukan dengan dua cara:
| * | Metode 1: Menggunakan Id:
| * | Metode 2: Menggunakan init of ng-controller:
sumber