Saya ingin mengakses $scope
variabel saya di konsol JavaScript Chrome. Bagaimana aku melakukan itu?
Saya tidak bisa melihat $scope
maupun nama modul saya myapp
di konsol sebagai variabel.
angularjs
angularjs-scope
murtaza52
sumber
sumber
window.MY_SCOPE = $scope;
hal pertama dalam fungsi pengontrol saya.$scope
objek elemen DOM yang dipilih ke dalam Inspektur DOM Firebug.Jawaban:
Pilih elemen di panel HTML alat pengembang dan ketik ini di konsol:
Di WebKit dan Firefox,
$0
adalah referensi ke simpul DOM yang dipilih di tab elemen, jadi dengan melakukan ini Anda mendapatkan cakupan simpul DOM yang dipilih dicetak di konsol.Anda juga dapat menargetkan ruang lingkup berdasarkan ID elemen, seperti:
Addons / Ekstensi
Ada beberapa ekstensi Chrome yang sangat berguna yang mungkin ingin Anda periksa:
Batarang . Ini sudah ada untuk sementara waktu.
ng-inspektur . Ini adalah yang terbaru, dan seperti namanya, ini memungkinkan Anda untuk memeriksa cakupan aplikasi Anda.
Bermain dengan jsFiddle
Saat bekerja dengan jsfiddle, Anda dapat membuka biola dalam mode pertunjukan dengan menambahkan
/show
di akhir URL. Saat berjalan seperti ini, Anda memiliki akses keangular
global. Anda dapat mencobanya di sini:http://jsfiddle.net/jaimem/Yatbt/show
jQuery Lite
Jika Anda memuat jQuery sebelum AngularJS,
angular.element
dapat dikirimkan pemilih jQuery. Jadi Anda bisa memeriksa ruang lingkup pengontrol denganDari sebuah tombol
... dan seterusnya.
Anda mungkin sebenarnya ingin menggunakan fungsi global untuk membuatnya lebih mudah:
Sekarang kamu bisa melakukan ini
Periksa di sini: http://jsfiddle.net/jaimem/DvRaR/1/show/
sumber
angular.element($0).scope()
, berfungsi sampai Anda mencoba memanggil beberapa metode. Saya mencoba, dan untuk beberapa alasan tidak ada permintaan HTTP yang mungkin dalam pengaturan ini?Untuk meningkatkan jawaban jm ...
Atau jika Anda menggunakan jQuery, ini melakukan hal yang sama ...
Cara mudah lain untuk mengakses elemen DOM dari konsol (seperti yang disebutkan jm) adalah mengkliknya di tab 'elemen', dan secara otomatis akan disimpan sebagai
$0
.sumber
angular.element(document.body).scope()
, terima kasih!Jika Anda telah menginstal Batarang
Maka Anda bisa menulis:
ketika Anda memiliki elemen yang dipilih dalam tampilan elemen di chrome. Ref - https://github.com/angular/angularjs-batarang#console
sumber
Ini adalah cara mendapatkan ruang lingkup tanpa Batarang, Anda dapat melakukan:
Atau jika Anda ingin menemukan ruang lingkup Anda dengan nama pengontrol, lakukan ini:
Setelah Anda membuat perubahan pada model Anda, Anda harus menerapkan perubahan pada DOM dengan menelepon:
sumber
angular.element
sudah menjadi metode pemilihan elemen. Berhentilah mengatakan Anda memerlukan jQuery untuk tugas-tugas sederhana seperti memilih elemen berdasarkan idnya!angular.element
sudah melakukan hal yang Anda gunakan untuk jQuery. Bahkan, jika jQuery tersediaangular.element
adalah alias untuk jQuery. Anda tidak perlu mempersulit kode Anda.angular.element('#selectorId')
danangular.element('[ng-controller=myController]')
melakukan hal yang sama, hanya dengan kode yang lebih sedikit. Anda mungkin juga memanggilangular.element('#selectorId'.toString())
Di suatu tempat di controller Anda (seringkali baris terakhir adalah tempat yang baik), taruh
Jika Anda ingin melihat lingkup internal / implisit, katakan di dalam ng-repeat, sesuatu seperti ini akan berhasil.
Kemudian di controller Anda
Perhatikan bahwa di atas kita mendefinisikan fungsi showScope () dalam lingkup orangtua, tapi tidak apa-apa ... ruang lingkup anak / batin / implisit dapat mengakses fungsi itu, yang kemudian mencetak ruang lingkup berdasarkan peristiwa tersebut, dan karenanya lingkup yang terkait dengan elemen yang memecat acara tersebut.
Saran @ jm- juga bekerja,
tapi saya rasa itu tidak berhasil di dalam jsFiddle. Saya mendapatkan kesalahan ini di jsFiddle di dalam Chrome:sumber
Satu peringatan untuk banyak jawaban ini: jika Anda alias controller Anda objek lingkup Anda akan berada di objek dalam objek yang dikembalikan dari
scope()
.Misalnya, jika direktif pengontrol Anda dibuat seperti itu:
<div ng-controller="FormController as frm">
maka untuk mengaksesstartDate
properti pengontrol Anda, Anda akan meneleponangular.element($0).scope().frm.startDate
sumber
$scope
, dinamai$ctrl
secara default, terlepas dari apakah Anda mengganti nama menggunakancontrollerAs
atau tidak. Saya tidak mengerti di mana Anda melihat "peringatan" dalam jawaban yang ada. Perhatikan bahwa sebagian besar jawaban di sini diberikan kembali ketikacontrollerAs
bukan praktik umum.controllerAs
itu bukan praktik umum, jadi membingungkan bagi pemula yang mungkin telah mengikuti "buku masak" yang memberitahu mereka untuk alias controller, tetapi kemudian tidak melihat properti tanpa menggunakan alias. Segalanya bergerak cepat dua tahun lalu.Saya setuju yang terbaik adalah Batarang dengan itu
$scope
setelah memilih objek (samaangular.element($0).scope()
atau bahkan lebih pendek dengan jQuery:$($0).scope()
(favorit saya))Juga, jika seperti saya Anda memiliki Anda ruang lingkup utama pada
body
elemen,$('body').scope()
berfungsi dengan baik.sumber
Untuk menambah dan meningkatkan jawaban lain, di konsol, masukkan
$($0)
untuk mendapatkan elemen. Jika aplikasi Angularjs, versi jQuery lite dimuat secara default.Jika Anda tidak menggunakan jQuery, Anda dapat menggunakan angular.element ($ 0) seperti pada:
Untuk memeriksa apakah Anda memiliki jQuery dan versinya, jalankan perintah ini di konsol:
Jika Anda telah memeriksa suatu elemen, elemen yang saat ini dipilih tersedia melalui referensi API baris perintah $ 0. Firebug dan Chrome memiliki referensi ini.
Namun, alat pengembang Chrome akan menyediakan lima elemen terakhir (atau tumpukan objek) yang dipilih melalui properti bernama $ 0, $ 1, $ 2, $ 3, $ 4 menggunakan referensi ini. Elemen atau objek yang paling baru dipilih dapat dirujuk sebagai $ 0, yang terbaru kedua sebagai $ 1 dan seterusnya.
Berikut ini adalah referensi API Baris Perintah untuk Firebug yang mencantumkan referensi itu.
$($0).scope()
akan mengembalikan lingkup yang terkait dengan elemen. Anda dapat melihat propertinya segera.Beberapa hal lain yang dapat Anda gunakan adalah:
$($0).scope().$parent
.$($0).scope().$parent.$parent
$($0).scope().$root
$($0).isolateScope()
Lihat Kiat dan Trik untuk Mendebug Kode Angular yang Tidak Diketahui untuk detail dan contoh lebih lanjut.
sumber
Periksa elemen, lalu gunakan ini di konsol
sumber
Cukup tetapkan
$scope
sebagai variabel global. Masalah terpecahkan.Kita sebenarnya membutuhkan
$scope
lebih sering dalam pengembangan daripada dalam produksi.Disebutkan oleh @JasonGoemaat tetapi menambahkannya sebagai jawaban yang cocok untuk pertanyaan ini.
sumber
Saya telah menggunakan
angular.element($(".ng-scope")).scope();
di masa lalu dan itu bekerja dengan baik. Hanya bagus jika Anda hanya memiliki satu cakupan aplikasi pada halaman, atau Anda dapat melakukan sesuatu seperti:angular.element($("div[ng-controller=controllerName]")).scope();
atauangular.element(document.getElementsByClassName("ng-scope")).scope();
sumber
Saya biasanya menggunakan fungsi data jQuery () untuk itu:
$ 0 saat ini dipilih di inspektur DOM chrome. $ 1, $ 2 .. dan seterusnya adalah item yang dipilih sebelumnya.
sumber
Katakanlah Anda ingin mengakses ruang lingkup elemen seperti
Anda dapat menggunakan yang berikut ini di konsol:
Ini akan memberi Anda ruang lingkup pada elemen itu.
sumber
Di konsol Chrome:
Contoh
Konsol Chrome
sumber
Ini membutuhkan jQuery untuk diinstal juga, tetapi berfungsi dengan baik untuk lingkungan dev. Itu terlihat melalui setiap elemen untuk mendapatkan instance dari lingkup kemudian mengembalikannya diberi label dengan nama pengontrol di sana. Ini juga menghapus properti yang dimulai dengan $ yang biasanya digunakan angularjs untuk konfigurasinya.
sumber
di sudut kita mendapatkan elemen jquery oleh angular.element () .... ayo ...
contoh:
<div id=""></div>
sumber
Untuk tujuan debugging saja, saya menempatkan ini di awal controller.
Dan ini adalah bagaimana saya menggunakannya.
kemudian hapus ketika saya selesai debugging.
sumber
Letakkan breakpoint dalam kode Anda di suatu tempat yang dekat dengan referensi ke variabel $ scope (sehingga $ scope berada dalam lingkup 'plain old JavaScript' saat ini). Kemudian Anda dapat memeriksa nilai $ scope di konsol.
sumber
Cukup tentukan variabel JavaScript di luar cakupan dan tetapkan ke lingkup Anda di controller Anda:
Itu dia! Ini harus bekerja di semua browser (setidaknya diuji di Chrome dan Mozilla).
Ini berfungsi, dan saya menggunakan metode ini.
sumber