mata teras
- Fungsi
- dalam AngularJS adalah alat yang kuat untuk memerhatikan perubahan dalam nilai atau ekspresi berubah -ubah. Apabila perubahan dikesan, ia mencetuskan fungsi panggil balik yang dilaksanakan setiap kali perubahan berubah -ubah yang dipantau.
$watch
- Gunakan pengendali kesamaan JavaScript (===) untuk perbandingan. Jika nilai baru berbeza dari nilai lama, fungsi panggil balik dicetuskan. Walau bagaimanapun, perlu diperhatikan bahawa secara lalai,
$watch
hanya memeriksa kesamaan rujukan, yang bermaksud bahawa fungsi panggil balik hanya dicetuskan apabila nilai baru diberikan kepada pemboleh ubah yang dipantau.$watch
AngularJS juga menyediakan - dan
$watchGroup
sebagai jalan pintas yang mudah untuk menubuhkan pelbagai monitor atau array pemantauan atau objek dengan fungsi panggil balik yang sama. Walau bagaimanapun, kaedah ini hanya melakukan pemantauan cetek dan bertindak balas hanya kepada perubahan rujukan.$watchCollection
Menggunakan - , terutamanya pada pelbagai pembolehubah, boleh menjejaskan prestasi kerana perubahan dalam semua pembolehubah yang dipantau perlu diperiksa untuk setiap kitaran ringkasan. Pemaju harus mempertimbangkan menggunakan
$watch
atau$watchGroup
bergantung kepada keadaan, atau mengehadkan bilangan pembolehubah yang dipantau untuk meningkatkan prestasi.$watchCollection
Artikel ini dikaji semula oleh Mark Brown. Terima kasih kepada semua pengulas rakan sebaya SitePoint untuk mendapatkan kandungan SitePoint untuk yang terbaik!
AngularJS menawarkan banyak pilihan yang berbeza untuk menggunakan mod subscribe penerbitan melalui tiga kaedah "menonton" yang berbeza. Setiap kaedah mengambil parameter pilihan untuk mengubah suai tingkah lakunya.Dokumentasi rasmi mengenai
jauh dari lengkap: selepas semua, ini adalah masalah yang mengganggu AngularJS v1 secara keseluruhan. Malah sumber dalam talian yang menerangkan bagaimana untuk meneruskan adalah terfragmentasi paling baik. $watch
Dalam artikel ini, saya akan mengandaikan bahawa anda sudah biasa dengan konsep AngularJS. Jika anda rasa anda perlu menyemak, anda mungkin perlu membaca tentang
, pengikat, dan $scope
dan $apply
. $digest
Periksa pemahaman anda
Sebagai contoh, apakah cara terbaik untuk memantau elemen pertama array? Katakan kami mengisytiharkan array pada skop kami,;
- Apabila kita menambah elemen ke array, adakah
$scope.$watch('letters', function () {...});
akan mencetuskan fungsi panggil baliknya? - Apabila kita menukar elemen pertamanya, adakah ia akan membakar? Di manakah
-
$scope.$watch('letters[0]', function () {...});
? Adakah ia berfungsi dengan cara yang sama, atau lebih baik? - di atas, elemen array adalah nilai asal: Bagaimana jika kita menggantikan elemen pertama dengan nilai yang sama?
- sekarang menganggap bahawa array mengandungi objek: apa yang berlaku? Apakah perbezaan antara
-
$watch
,$watchCollection
dan$watchGroup
?
Jika anda keliru dengan semua soalan ini, sila teruskan membaca. Matlamat saya adalah untuk membimbing anda melalui proses dengan menerangkan ini dengan jelas mungkin dengan beberapa contoh.
$scope.$watch
mari kita mulakan dengan $scope.$watch
. Berikut adalah teras semua ciri Watch: setiap kaedah lain yang akan kita lihat hanyalah pintasan mudah untuk $watch
.
menggunakan $watch
Kelebihan sudut adalah bahawa anda boleh menggunakan mekanisme yang sama untuk melaksanakan operasi kompleks yang dicetuskan oleh perubahan data dalam pengawal. Sebagai contoh, anda boleh menyediakan monitor untuk data tertentu yang boleh diubah sebagai tindak balas kepada:
- timeout
- ui
- pengiraan asynchronous kompleks yang dilakukan oleh pekerja web
- Ajax Call
Anda boleh menyediakan hanya satu pendengar untuk mengendalikan sebarang perubahan data, tidak kira apa sebabnya.
sendiri. $scope.$watch
mari kita lihat kod
. $rootscope.watch()
. function(watchExp, listener, objectEquality, prettyPrintExpression)
-
Ekspresi yang dipantau. Ia boleh menjadi fungsi atau rentetan, dan ia dinilai dalam setiap kitaran pencernaan.
Aspek utama yang perlu diperhatikan di sini ialahwatchExp
Jika ungkapan dinilai sebagai fungsi, fungsi perlu menjadi idempotent. Dalam erti kata lain, untuk set input yang sama ia harus sentiasa mengembalikan output yang sama. Jika ini tidak berlaku, Angular akan mengandaikan bahawa data yang dipantau telah diubah. Ini seterusnya bermakna ia akan terus mengesan perbezaan dan memanggil pendengar dalam setiap lelaran kitaran dicerna.
-
Fungsi panggil balik yang dipecat apabila monitor pertama kali ditubuhkan, dan kemudian setiap kali perubahan dalam nilai
listener
dikesan semasa kitaran ringkasan. Panggilan awal pada tetapan dimaksudkan untuk menyimpan nilai awal untuk ekspresi.watchExp
-
Monitor akan melakukan perbandingan mendalam jika dan hanya jika nilai ini benar. Jika tidak, ia melakukan perbandingan cetek, iaitu rujukan perbandingan sahaja.
mari kita ambil array sebagai contoh:objectEquality
;
bermaksud bahawa hanya penempatan semula medan$scope.fruit = ["banana", "apple"]
akan menyebabkan pendengar dipanggil.
objectEquality == false
kita juga perlu menyemak sejauh mana "mendalam" adalah: kita akan membincangkannya kemudian.
-
prettyPrintExpression
Jika diluluskan, ia akan mengatasi ekspresi pemantauan. Parameter ini tidak dimaksudkan untuk digunakan dalam panggilan biasa kepada$watch()
;Berhati -hati: Seperti yang anda lihat sendiri, keputusan yang tidak dijangka terdedah kepada hasil yang tidak dijangka apabila parameter keempat diluluskan secara tidak sengaja.
Sekarang kita akan menjawab beberapa soalan dalam pengenalan. Sila lihat contoh bahagian ini:
berasa bebas untuk membiasakan diri dengan mereka;
Pemantauan Array
jadi anda perlu memantau array pada skop untuk membuat perubahan, tetapi apakah maksud "perubahan"?
Katakan pengawal anda kelihatan seperti ini:
app.controller('watchDemoCtrl', ['$scope', function($scope){ $scope.letters = ['A','B','C']; }]);
Satu pilihan adalah menggunakan panggilan seperti ini:
$scope.$watch('letters', function (newValue, oldValue, scope) { // 对 $scope.letters 执行任何操作 });
Dalam panggilan balik di atas, newValue
dan oldValue
mempunyai makna jelas dan dikemas kini setiap kali kitaran $digest
memanggilnya. Makna scope
juga intuitif, kerana ia memegang rujukan kepada skop semasa.
Tetapi kunci ialah: Bilakah pendengar ini akan dipanggil? Malah, anda boleh menambah, memadam, menggantikan elemen dalam array tanpa apa -apa yang berlaku. Ini kerana, secara lalai, letters
mengandaikan bahawa anda hanya mahu $watch
persamaan rujukan , jadi fungsi panggil balik hanya dicetuskan apabila anda memberikan nilai baru kepada . $scope.letters
sebagai parameter ketiga untuk true
(iaitu sebagai nilai parameter pilihan watch
yang diterangkan di atas). objectEquality
$scope.$watch('letters', function (newValue, oldValue, scope) { // 对 $scope.letters 执行任何操作 }, true);Objek pengawasan
Untuk objek, keadaan tidak berubah: Jika
adalah palsu, anda hanya memantau sebarang penugasan semula kepada pembolehubah skop itu, dan jika benar, fungsi panggilan balik akan dicetuskan setiap kali elemen dalam objek diubah. objectEquality
Perlu diperhatikan bahawa dengan memantau array menggunakan
, setiap kali fungsi panggil balik dicetuskan, objectEquality === true
dan newValue
akan menjadi nilai lama dan baru keseluruhan array. Oleh itu, anda perlu membandingkannya dengan satu sama lain untuk memahami apa yang sebenarnya berubah. oldValue
sebagai hujah pertama: $watch
$scope.$watch('letters[4]', function (newValue, oldValue, scope) { //... }, true);Apa yang berlaku jika array hanya mempunyai 2 elemen? Tiada masalah, fungsi panggil balik anda tidak akan dipecat melainkan anda menambah elemen keempat. Ok ok, secara teknikal ia kebakaran apabila anda menyediakan monitor dan kemudian hanya apabila anda menambah elemen keempat.
Jika anda merakam oldValue
, anda akan melihat bahawa dalam kedua -dua kes ia tidak akan ditentukan. Bandingkan ini dengan apa yang berlaku apabila memantau elemen sedia ada: Apabila ditubuhkan, anda masih mempunyai oldValue == undefined
. Jadi $watch
tidak boleh diproses!
Soalan yang lebih menarik sekarang: Adakah kita perlu lulus objectEquality === true
di sini?
Jawapan pendek: Maaf, tidak ada jawapan pendek.
ia benar -benar bergantung pada:
- Dalam contoh ini, kerana kita sedang mengusahakan nilai asal, kita tidak memerlukan perbandingan kedalaman, jadi kita boleh meninggalkan
objectEquality
. - Tetapi, katakan kita mempunyai matriks, contohnya
$scope.board = [[1, 2, 3], [4, 5, 6]]
; Kemudian kami mungkin ingin mendapatkan amaran apabila tugasan seperti$scope.board[0][1] = 7
mengubahnya.
bidang objek pemantauan
mungkin lebih berguna daripada memantau mana -mana elemen dalam array, kita boleh memantau mana -mana bidang dalam objek. Tetapi itu tidak menghairankan, bukan? Lagipun, array dalam JavaScript adalah objek .
app.controller('watchDemoCtrl', ['$scope', function($scope){ $scope.letters = ['A','B','C']; }]);
sejauh mana kedalamannya?
Pada ketika ini, kita juga perlu menjelaskan satu terperinci yang terakhir tetapi penting: Apa yang berlaku jika kita perlu memantau objek bersarang kompleks di mana setiap bidang adalah nilai bukan primitif? Sebagai contoh, pokok atau graf, atau hanya beberapa data JSON.
mari kita periksa!
Pertama sekali, kita memerlukan objek untuk memantau:
$scope.$watch('letters', function (newValue, oldValue, scope) { // 对 $scope.letters 执行任何操作 });
mari kita sediakan monitor untuk keseluruhan objek: Saya fikir setakat ini jelas bahawa dalam kes ini objectEquality
mesti ditetapkan ke true
.
$scope.$watch('letters', function (newValue, oldValue, scope) { // 对 $scope.letters 执行任何操作 }, true);
Persoalannya ialah: Jika tugasan seperti $scope.b.bb[1].bb2a = 7;
berlaku, adakah sudut akan cukup baik untuk memberitahu kami?
Jawapannya ialah: Ya, bernasib baik, ia akan (lihat dalam demo Codepen sebelumnya).
Kaedah lain
$scope.$watchGroup
Adakah pendekatan yang berbeza? Jawapannya tidak, tidak. $watchGroup()
adalah jalan pintas yang mudah yang membolehkan anda menyediakan pelbagai monitor menggunakan fungsi panggil balik yang sama dan lulus pelbagai $watchGroup()
. watchExpressions
. $scope.$watch()
$scope.$watch('letters[4]', function (newValue, oldValue, scope) { //... }, true);perlu diperhatikan bahawa menggunakan
, $watchGroup
dan newValues
akan menyimpan senarai nilai ungkapan, termasuk nilai yang telah berubah dan yang telah menyimpan nilai yang sama, dalam Perintah mereka dalam parameter pertama perintah lulus dalam array adalah sama. oldValues
. Ini kerana ia memantau ekspresi dan hanya bertindak balas terhadap perubahan rujukan. objectEquality
Jika anda menggunakan demo $watchGroup()
di bawah, anda mungkin terkejut dengan beberapa kehalusan. Sebagai contoh, unshift
akan menyebabkan pendengar dipanggil, sekurang -kurangnya sedikit sebanyak: ini kerana apabila meluluskan senarai ekspresi ke $watchGroup
, mana -mana mencetuskan ungkapan yang akan mengakibatkan fungsi panggilan balik pelaksanaan.
tidak akan menghasilkan sebarang kemas kini - kemas kini hanya akan dihasilkan jika nilai baru diberikan kepada medan B itu sendiri. $scope.obj.b
$scope.$watchCollection
Ini adalah satu lagi jalan pintas yang mudah untuk memantau tatasusunan atau objek. Untuk tatasusunan, pendengar dipanggil apabila mana -mana elemen diganti, dipadam, atau ditambah. Untuk objek, apabila sebarang sifat diubah. Sekali lagi,
tidak membenarkan $scope.$watchCollection
Ini adalah satu lagi jalan pintas yang mudah untuk memantau tatasusunan atau objek. Untuk tatasusunan, pendengar dipanggil apabila mana -mana elemen diganti, dipadam, atau ditambah. Untuk objek, apabila sebarang sifat diubah. Sekali lagi, , jadi ia hanya memantau elemen/medan dan tidak bertindak balas terhadap perubahan di subfield mereka. $watchCollection()
objectEquality
Semoga contoh -contoh ini membantu anda menemui kuasa ciri sudut ini dan memahami betapa pentingnya menggunakan pilihan yang tepat.
Jangan ragu untuk menyalin Codepen dan cuba menggunakan kaedah ini dalam konteks yang berbeza dan jangan lupa untuk meninggalkan maklum balas anda di bahagian komen!
Jika anda ingin melihat lebih mendalam beberapa konsep yang dibincangkan dalam artikel ini, berikut adalah beberapa cadangan untuk membaca selanjutnya:
Skop AngularJS
- Fahami Angular's dan
-
$apply()
$digest()
Corak yang muncul dalam pemprosesan acara JavaScript - Pewarisan prototaip dalam skop AngularJS Dokumen
- dan lain -lain
-
$watch
di AngularJS $watch
Apakah tujuan utama dalam AngularJS? $watch
Fungsi di AngularJS terutamanya digunakan untuk melihat perubahan dalam nilai pembolehubah atau ungkapan. Ia adalah sebahagian daripada Objek Saluran AngularJS untuk memantau perubahan dalam nilai pembolehubah atau ekspresi. Apabila perubahan dikesan, fungsi $watch
mencetuskan fungsi panggil balik yang dilaksanakan setiap kali perubahan berubah -ubah yang dipantau. $watch
Bagaimana ia berfungsi di AngularJS? $watch
fungsi dalam angularjs berfungsi dengan membandingkan nilai lama dan baru pemboleh ubah atau ekspresi yang dipantau. Ia menggunakan pengendali kesamaan JavaScript (===) untuk perbandingan. Jika nilai baru berbeza dari nilai lama, fungsi $watch
akan mencetuskan fungsi panggil balik. $watch
di AngularJS? $watch
untuk menggunakan di angularjs, anda perlu memanggil kaedah $watch
pada objek skop dan lulus dua parameter: nama pembolehubah atau ungkapan yang akan dipantau, dan berlaku apabila pembolehubah dipantau panggilan balik berfungsi untuk dilaksanakan apabila berubah. Berikut adalah contoh: $watch
app.controller('watchDemoCtrl', ['$scope', function($scope){ $scope.letters = ['A','B','C']; }]);Apakah perbezaan antara
$watch
dan $apply
dalam AngularJS?
Fungsi dalam $watch
di angularjs digunakan untuk melihat perubahan dalam pembolehubah atau ekspresi, manakala fungsi $apply
digunakan untuk memulakan secara manual tempoh pencernaan sudut, yang memeriksa apa -apa perubahan dalam pemboleh ubah yang dipantau dan mengemas kini pandangan Sehubungan itu. Fungsi $apply
biasanya digunakan apabila membuat perubahan model di luar konteks AngularJS, seperti dalam pengendali acara DOM atau fungsi setTimeout
.
Bolehkah saya memantau pelbagai pembolehubah dalam angularjs menggunakan $watch
?
Ya, anda boleh menggunakan $watch
untuk memantau pelbagai pembolehubah dalam AngularJS. Anda boleh melakukan ini dengan lulus pelbagai nama pembolehubah ke fungsi $watch
. Walau bagaimanapun, ingat bahawa pemantauan pelbagai pembolehubah boleh menjejaskan prestasi, kerana fungsi $watch
perlu memeriksa perubahan dalam semua pembolehubah yang dipantau dalam setiap kitaran pencernaan.
bagaimana saya berhenti memantau pembolehubah dalam $watch
di angularjs?
Apabila anda memanggil fungsi $watch
di AngularJS, ia mengembalikan fungsi logout. Anda boleh memanggil fungsi ini untuk menghentikan pembolehubah pemantauan. Berikut adalah contoh:
$scope.$watch('letters', function (newValue, oldValue, scope) { // 对 $scope.letters 执行任何操作 });
Apa itu $watchGroup
di AngularJS?
Fungsi $watchGroup
dalam AngularJS digunakan untuk memantau satu set ekspresi. Ia berfungsi seperti fungsi $watch
, tetapi ia mencetuskan fungsi panggil balik hanya sekali setiap kitaran dicerna, walaupun terdapat banyak ekspresi yang dipantau. Ini dapat meningkatkan prestasi apabila memantau pelbagai ungkapan.
Apa itu $watchCollection
di AngularJS?
Fungsi $watchCollection
dalam angularjs digunakan untuk memantau sifat -sifat objek atau unsur -unsur array. Ia mencetuskan fungsi panggil balik selagi mana -mana atribut atau perubahan elemen, tetapi tidak seperti $watch
, ia tidak memantau objek atau tatasusunan yang mendalam, yang dapat meningkatkan prestasi.
Bolehkah saya menggunakan $watch
dalam arahan AngularJS?
Ya, anda boleh menggunakan $watch
dalam arahan AngularJS. Malah, adalah perkara biasa untuk menggunakan $watch
dalam arahan untuk bertindak balas terhadap perubahan atribut atau pembolehubah skop arahan.
Apakah pertimbangan prestasi dalam angularjs menggunakan $watch
?
Menggunakan $watch
di AngularJs boleh menjejaskan prestasi, terutamanya apabila memantau banyak pembolehubah atau ekspresi. Ini kerana fungsi $watch
perlu menyemak perubahan semua pembolehubah yang dipantau dalam setiap kitaran pencernaan. Untuk meningkatkan prestasi, pertimbangkan untuk menggunakan $watchGroup
atau $watchCollection
mengikut keadaan, atau mengehadkan bilangan pembolehubah yang dipantau.
Atas ialah kandungan terperinci Menguasai $ menonton di AngularJS. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Javascriptisnotbuiltoncorc; it'saninterpretedlanguagethatrunsonenginesoftenwritteninc .1) javascriptwasdesignedasalightweight, interpratedlanguageforwebbrowsers.2)

JavaScript boleh digunakan untuk pembangunan front-end dan back-end. Bahagian depan meningkatkan pengalaman pengguna melalui operasi DOM, dan back-end mengendalikan tugas pelayan melalui Node.js. 1. Contoh front-end: Tukar kandungan teks laman web. 2. Contoh backend: Buat pelayan Node.js.

Memilih Python atau JavaScript harus berdasarkan perkembangan kerjaya, keluk pembelajaran dan ekosistem: 1) Pembangunan Kerjaya: Python sesuai untuk sains data dan pembangunan back-end, sementara JavaScript sesuai untuk pembangunan depan dan penuh. 2) Kurva Pembelajaran: Sintaks Python adalah ringkas dan sesuai untuk pemula; Sintaks JavaScript adalah fleksibel. 3) Ekosistem: Python mempunyai perpustakaan pengkomputeran saintifik yang kaya, dan JavaScript mempunyai rangka kerja front-end yang kuat.

Kuasa rangka kerja JavaScript terletak pada pembangunan yang memudahkan, meningkatkan pengalaman pengguna dan prestasi aplikasi. Apabila memilih rangka kerja, pertimbangkan: 1.

Pengenalan Saya tahu anda mungkin merasa pelik, apa sebenarnya yang perlu dilakukan oleh JavaScript, C dan penyemak imbas? Mereka seolah -olah tidak berkaitan, tetapi sebenarnya, mereka memainkan peranan yang sangat penting dalam pembangunan web moden. Hari ini kita akan membincangkan hubungan rapat antara ketiga -tiga ini. Melalui artikel ini, anda akan mempelajari bagaimana JavaScript berjalan dalam penyemak imbas, peranan C dalam enjin pelayar, dan bagaimana mereka bekerjasama untuk memacu rendering dan interaksi laman web. Kita semua tahu hubungan antara JavaScript dan penyemak imbas. JavaScript adalah bahasa utama pembangunan front-end. Ia berjalan secara langsung di penyemak imbas, menjadikan laman web jelas dan menarik. Adakah anda pernah tertanya -tanya mengapa Javascr

Node.js cemerlang pada I/O yang cekap, sebahagian besarnya terima kasih kepada aliran. Aliran memproses data secara berperingkat, mengelakkan beban memori-ideal untuk fail besar, tugas rangkaian, dan aplikasi masa nyata. Menggabungkan sungai dengan keselamatan jenis typescript mencipta powe

Perbezaan prestasi dan kecekapan antara Python dan JavaScript terutamanya dicerminkan dalam: 1) sebagai bahasa yang ditafsirkan, Python berjalan perlahan tetapi mempunyai kecekapan pembangunan yang tinggi dan sesuai untuk pembangunan prototaip pesat; 2) JavaScript adalah terhad kepada benang tunggal dalam penyemak imbas, tetapi I/O multi-threading dan asynchronous boleh digunakan untuk meningkatkan prestasi dalam node.js, dan kedua-duanya mempunyai kelebihan dalam projek sebenar.

JavaScript berasal pada tahun 1995 dan dicipta oleh Brandon Ike, dan menyedari bahasa itu menjadi C. 1.C Language menyediakan keupayaan pengaturcaraan prestasi tinggi dan sistem untuk JavaScript. 2. Pengurusan memori JavaScript dan pengoptimuman prestasi bergantung pada bahasa C. 3. Ciri lintas platform bahasa C membantu JavaScript berjalan dengan cekap pada sistem operasi yang berbeza.


Alat AI Hot

Undresser.AI Undress
Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover
Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool
Gambar buka pakaian secara percuma

Clothoff.io
Penyingkiran pakaian AI

Video Face Swap
Tukar muka dalam mana-mana video dengan mudah menggunakan alat tukar muka AI percuma kami!

Artikel Panas

Alat panas

SublimeText3 versi Cina
Versi Cina, sangat mudah digunakan

Notepad++7.3.1
Editor kod yang mudah digunakan dan percuma

Hantar Studio 13.0.1
Persekitaran pembangunan bersepadu PHP yang berkuasa

PhpStorm versi Mac
Alat pembangunan bersepadu PHP profesional terkini (2018.2.1).

SecLists
SecLists ialah rakan penguji keselamatan muktamad. Ia ialah koleksi pelbagai jenis senarai yang kerap digunakan semasa penilaian keselamatan, semuanya di satu tempat. SecLists membantu menjadikan ujian keselamatan lebih cekap dan produktif dengan menyediakan semua senarai yang mungkin diperlukan oleh penguji keselamatan dengan mudah. Jenis senarai termasuk nama pengguna, kata laluan, URL, muatan kabur, corak data sensitif, cangkerang web dan banyak lagi. Penguji hanya boleh menarik repositori ini ke mesin ujian baharu dan dia akan mempunyai akses kepada setiap jenis senarai yang dia perlukan.
