Angular bersama kami sejak hari pertama, namun rasanya mereka tidak mendapatkan perhatian yang layak Show
Singkatnya, dengan variabel referensi template kita dapat mengakses objek pada template. Elemen, arahan, atau komponen DOM. Kita dapat meneruskan referensi ke komponen menggunakan kueri atau sebagai parameter dalam metode pemanggilan template
Mari kita mulai dengan sebuah masalah. Kami memiliki larik dengan 20 objek yang kami tampilkan menggunakan ekspresi Tugas kita adalah mengecat batas di sekitar item saat diklik dan menghapusnya saat diklik lagi, mengulangi prosesnya berulang kali — toggle Mari jelajahi beberapa solusi yang mungkin Salah satu solusi yang biasanya muncul adalah menyetel properti baru pada setiap objek yang menyatakan apakah akan menampilkan (atau tidak menampilkan) batas. Saat ini berfungsi, ini adalah solusi yang bermutasi, kami mengubah objek. Bagaimana jika kita berurusan dengan meja? . Ada variasi lain dari pendekatan ini, menggunakan simbol, getter yang tidak dapat dihitung, dll… Solusi lain mungkin berupa objek pencarian. Array atau Peta yang dapat kita gunakan untuk mencari item mana yang diubah. Ini memiliki overhead manajemen, yang mengharuskan kami melacak item yang ditambahkan dan/atau dihapus. Pencarian mungkin luas, bekerja dengan koleksi besar dan menggabungkan status UI dengan, yang biasanya, komponen halaman. Dengan beberapa pengoptimalan, memilih alat yang tepat, dan bekerja dengan cerdas, kami dapat menyatukannya, tetapi rasanya tidak benar Kami dapat melakukannya dengan lebih baik, dan Anda mungkin menebaknya dengan benar — menggunakan variabel templat
Kami menyebutnya direktif var karena ini berfungsi sebagai variabel yang dapat kami gunakan untuk menyimpan data. Itu tinggal di dalam template dan tidak melalui komponen (walaupun kita bisa melakukannya) Untuk menggunakannya, kita cukup menyetelnya sebagai atribut elemen dan menyetel Untuk kesederhanaan, objek data kami adalah array angka Kami tidak membutuhkan komponen, kami akan mengerjakan template Template menggunakan var cakupan untuk setiap itemDEMO. Template menggunakan var cakupan untuk setiap item
Dalam contoh di atas, kami membuat turunan dari direktif Terkadang kita perlu bekerja dalam satu ruang lingkup, artinya satu contoh Sekarang kita dapat menerima input, objek yang akan kita gunakan untuk menetapkan nilai yang telah ditentukan sebelumnya ke direktif, semacam penginisialisasi Sekarang kita dapat mencoba pendekatan baru, alih-alih contoh baru untuk Kami menginisialisasi Ini cukup banyak. Anda dapat menggunakannya untuk skenario lain, misalnya mengubah animasi tanpa status komponen, hanya status template Jika Anda memiliki kasus penggunaan lain, silakan beri komentar. Jika Anda ingin melakukan peningkatan, silakan bagikan dan tentu saja jika Anda memiliki catatan/perbaikan/masalah, silakan beri komentar di bawah 0 dan 1 adalah dua konsep yang relatif baru untuk deklarasi variabel dalam JavaScript. , 0 mirip dengan 3 dalam beberapa hal, tetapi memungkinkan pengguna untuk menghindari beberapa "gotcha" umum yang ditemui pengguna di JavaScript 1 adalah augmentasi dari 0 karena mencegah penugasan ulang ke variabel Dengan TypeScript sebagai perpanjangan dari JavaScript, bahasa ini secara alami mendukung 0 dan 1. Di sini kami akan menguraikan lebih lanjut tentang deklarasi baru ini dan mengapa deklarasi tersebut lebih disukai daripada 3 Jika Anda menggunakan JavaScript secara sembarangan, bagian selanjutnya mungkin merupakan cara yang baik untuk menyegarkan ingatan Anda. Jika Anda sangat akrab dengan semua keanehan deklarasi 3 dalam JavaScript, Anda mungkin akan lebih mudah untuk melewatinya tsfunction sumMatrix(matrix: number[][]) { var sum = 0; for (var i = 0; i < matrix.length; i++) { var currentRow = matrix[i]; for (var i = 0; i < currentRow.length; i++) { sum += currentRow[i]; } } return sum;}3 deklarasiMendeklarasikan variabel dalam JavaScript secara tradisional selalu dilakukan dengan kata kunci 3
Seperti yang mungkin sudah Anda ketahui, kami baru saja mendeklarasikan variabel bernama 2 dengan nilai 3 Kita juga dapat mendeklarasikan variabel di dalam suatu fungsi
dan kami juga dapat mengakses variabel yang sama di dalam fungsi lain
Dalam contoh di atas, _4 menangkap variabel 2 yang dideklarasikan dalam 6. Kapan pun _4 dipanggil, nilai 2 akan dikaitkan dengan nilai 2 di 6. Bahkan jika _4 dipanggil sekali 6 selesai berjalan, itu akan dapat mengakses dan memodifikasi 2
Aturan pelingkupan3 deklarasi memiliki beberapa aturan pelingkupan yang aneh untuk yang digunakan dalam bahasa lain. Ambil contoh berikut
Beberapa pembaca mungkin melakukan pengambilan ganda pada contoh ini. Variabel _5 dideklarasikan di dalam blok 6, namun kami dapat mengaksesnya dari luar blok itu. Itu karena 3 deklarasi dapat diakses di mana saja di dalam fungsi, modul, namespace, atau cakupan globalnya - semua yang akan kita bahas nanti - terlepas dari blok yang memuatnya. Beberapa orang menyebutnya 3-scoping atau function-scoping. Parameter juga merupakan cakupan fungsi Aturan pelingkupan ini dapat menyebabkan beberapa jenis kesalahan. Satu masalah yang mereka perburuk adalah fakta bahwa mendeklarasikan variabel yang sama beberapa kali bukanlah kesalahan
Mungkin mudah dikenali oleh beberapa pengembang JavaScript yang berpengalaman, tetapi 9-loop bagian dalam akan secara tidak sengaja menimpa variabel 0 karena 0 merujuk ke variabel lingkup fungsi yang sama. Seperti yang diketahui pengembang berpengalaman sekarang, jenis bug serupa lolos dari tinjauan kode dan dapat menjadi sumber frustrasi yang tak ada habisnya Kebiasaan menangkap variabelLuangkan waktu sebentar untuk menebak hasil dari cuplikan berikut
Bagi mereka yang tidak terbiasa, 2 akan mencoba menjalankan fungsi setelah beberapa milidetik (meskipun menunggu hal lain berhenti berjalan) Siap?
Banyak pengembang JavaScript sangat akrab dengan perilaku ini, tetapi jika Anda terkejut, Anda pasti tidak sendiri. Kebanyakan orang mengharapkan hasilnya
Ingat apa yang kami sebutkan sebelumnya tentang pengambilan variabel? Mari luangkan waktu sebentar untuk mempertimbangkan apa artinya itu. 2 akan menjalankan fungsi setelah beberapa milidetik, tetapi hanya setelah 9 berhenti mengeksekusi; . Jadi setiap kali fungsi yang diberikan dipanggil, itu akan mencetak 3 Solusi umum adalah menggunakan IIFE - Ekspresi Fungsi yang Segera Dipanggil - untuk menangkap 0 di setiap iterasi
Pola yang tampak aneh ini sebenarnya cukup umum. 0 dalam daftar parameter sebenarnya membayangi 0 yang dideklarasikan dalam 9 loop, tetapi karena kami menamakannya sama, kami tidak perlu terlalu banyak memodifikasi badan loop tsfunction sumMatrix(matrix: number[][]) { var sum = 0; for (var i = 0; i < matrix.length; i++) { var currentRow = matrix[i]; for (var i = 0; i < currentRow.length; i++) { sum += currentRow[i]; } } return sum;}0 deklarasiSekarang Anda telah mengetahui bahwa 3 memiliki beberapa masalah, itulah sebabnya pernyataan 0 diperkenalkan. Terlepas dari kata kunci yang digunakan, _0 pernyataan ditulis dengan cara yang sama 3 pernyataan ditulis dengan cara yang sama 0 Perbedaan utamanya bukan pada sintaksisnya, tetapi pada semantiknya, yang sekarang akan kita selami Pelingkupan blokKetika sebuah variabel dideklarasikan menggunakan 0, ia menggunakan apa yang oleh beberapa orang disebut pelingkupan leksikal atau pelingkupan blok. Tidak seperti variabel yang dideklarasikan dengan 3 yang cakupannya bocor ke fungsi yang memuatnya, variabel dengan cakupan blok tidak terlihat di luar blok terdekatnya atau 9-loop 1 Di sini, kami memiliki dua variabel lokal 2 dan 04. Cakupan 2 terbatas pada badan 6 sementara ruang lingkup 04 terbatas pada blok pernyataan 6 yang mengandung Variabel yang dideklarasikan dalam klausa _09 juga memiliki aturan pelingkupan yang serupa 2 Properti lain dari variabel lingkup blok adalah bahwa mereka tidak dapat dibaca atau ditulis sebelum mereka benar-benar dideklarasikan. Sementara variabel-variabel ini "hadir" di seluruh cakupannya, semua poin hingga deklarasi mereka adalah bagian dari zona mati temporal mereka. Ini hanyalah cara canggih untuk mengatakan bahwa Anda tidak dapat mengaksesnya sebelum pernyataan 0, dan untungnya TypeScript akan memberi tahu Anda bahwa _3 Sesuatu yang perlu diperhatikan adalah bahwa Anda masih dapat menangkap variabel cakupan blok sebelum dideklarasikan. Satu-satunya tangkapan adalah ilegal memanggil fungsi itu sebelum deklarasi. Jika menargetkan ES2015, waktu proses modern akan menimbulkan kesalahan; 4 Untuk informasi lebih lanjut tentang zona mati temporal, lihat konten yang relevan di Deklarasi ulang dan MembayangiDengan 3 deklarasi, kami menyebutkan bahwa tidak masalah berapa kali Anda mendeklarasikan variabel Anda; 5 Dalam contoh di atas, semua deklarasi 5 sebenarnya mengacu pada 5 yang sama, dan ini benar-benar valid. Ini sering berakhir menjadi sumber bug. Syukurlah, deklarasi 0 tidak memaafkan 6 Variabel tidak perlu keduanya diblokir untuk TypeScript untuk memberi tahu kami bahwa ada masalah 7 Itu bukan untuk mengatakan bahwa variabel cakupan blok tidak pernah dapat dideklarasikan dengan variabel cakupan fungsi. Variabel cakupan blok hanya perlu dideklarasikan di dalam blok yang jelas berbeda 8 Tindakan memperkenalkan nama baru dalam lingkup yang lebih bersarang disebut membayangi. Ini adalah pedang bermata dua karena dapat memperkenalkan bug tertentu dengan sendirinya jika terjadi bayangan yang tidak disengaja, sekaligus mencegah bug tertentu. Misalnya, bayangkan kita telah menulis fungsi 15 kita sebelumnya menggunakan 0 variabel _9 Versi loop ini benar-benar akan melakukan penjumlahan dengan benar karena 0 bayangan loop dalam 0 dari loop luar Membayangi biasanya harus dihindari demi menulis kode yang lebih jelas. Meskipun ada beberapa skenario yang mungkin tepat untuk memanfaatkannya, Anda harus menggunakan penilaian terbaik Anda Pengambilan variabel cakupan blokKetika kami pertama kali menyentuh gagasan menangkap variabel dengan deklarasi 3, kami secara singkat membahas bagaimana variabel bertindak setelah ditangkap. Untuk memberikan intuisi yang lebih baik tentang hal ini, setiap kali lingkup dijalankan, ia menciptakan "lingkungan" variabel. Lingkungan itu dan variabel yang ditangkapnya dapat tetap ada bahkan setelah segala sesuatu dalam cakupannya selesai dijalankan _0 Karena kami telah menangkap 20 dari dalam lingkungannya, kami masih dapat mengaksesnya meskipun blok 6 selesai dijalankan Ingatlah bahwa dengan contoh _2 kami sebelumnya, kami akhirnya perlu menggunakan IIFE untuk menangkap keadaan variabel untuk setiap iterasi dari 9 loop. Akibatnya, apa yang kami lakukan adalah membuat lingkungan variabel baru untuk variabel yang kami tangkap. Itu sedikit menyusahkan, tapi untungnya, Anda tidak perlu melakukannya lagi di TypeScript 0 deklarasi memiliki perilaku yang sangat berbeda ketika dideklarasikan sebagai bagian dari sebuah loop. Daripada hanya memperkenalkan lingkungan baru ke loop itu sendiri, deklarasi ini semacam membuat ruang lingkup baru per iterasi. Karena inilah yang kami lakukan dengan IIFE kami, kami dapat mengubah contoh 2 lama kami menjadi hanya menggunakan deklarasi 0 _1 dan seperti yang diharapkan, ini akan dicetak
tsfunction sumMatrix(matrix: number[][]) { var sum = 0; for (var i = 0; i < matrix.length; i++) { var currentRow = matrix[i]; for (var i = 0; i < currentRow.length; i++) { sum += currentRow[i]; } } return sum;}1 deklarasi1 deklarasi adalah cara lain untuk mendeklarasikan variabel _3 Mereka seperti 0 deklarasi tetapi, seperti namanya, nilainya tidak dapat diubah setelah mereka terikat. Dengan kata lain, mereka memiliki aturan pelingkupan yang sama dengan 0, tetapi Anda tidak dapat menetapkannya kembali Ini tidak boleh dikacaukan dengan gagasan bahwa nilai yang mereka rujuk tidak dapat diubah _4 Kecuali jika Anda mengambil tindakan khusus untuk menghindarinya, keadaan internal variabel 1 masih dapat dimodifikasi. Untungnya, TypeScript memungkinkan Anda menentukan bahwa anggota suatu objek adalah 32. Bab tentang Antarmuka memiliki detailnya tsfunction sumMatrix(matrix: number[][]) { var sum = 0; for (var i = 0; i < matrix.length; i++) { var currentRow = matrix[i]; for (var i = 0; i < currentRow.length; i++) { sum += currentRow[i]; } } return sum;}0 vs. tsfunction sumMatrix(matrix: number[][]) { var sum = 0; for (var i = 0; i < matrix.length; i++) { var currentRow = matrix[i]; for (var i = 0; i < currentRow.length; i++) { sum += currentRow[i]; } } return sum;}_1Mengingat bahwa kami memiliki dua jenis deklarasi dengan semantik pelingkupan yang serupa, wajar jika kami bertanya mana yang akan digunakan. Seperti kebanyakan pertanyaan luas, jawabannya adalah. tergantung Menerapkan prinsip hak istimewa terkecil, semua deklarasi selain yang Anda rencanakan untuk diubah harus menggunakan 1. Alasannya adalah jika sebuah variabel tidak perlu ditulis, orang lain yang bekerja pada basis kode yang sama seharusnya tidak secara otomatis dapat menulis ke objek, dan perlu mempertimbangkan apakah mereka benar-benar perlu menetapkan ulang ke variabel tersebut. Menggunakan _1 juga membuat kode lebih dapat diprediksi saat mempertimbangkan aliran data Gunakan penilaian terbaik Anda, dan jika ada, konsultasikan masalah tersebut dengan anggota tim Anda yang lain Sebagian besar buku pegangan ini menggunakan 0 deklarasi MerusakFitur ECMAScript 2015 lain yang dimiliki TypeScript adalah penghancuran struktur. Untuk referensi lengkap, lihat artikel di Mozilla Developer Network. Di bagian ini, kami akan memberikan ikhtisar singkat Penghancuran susunanBentuk paling sederhana dari destrukturisasi adalah penugasan destrukturisasi array _5 Ini menciptakan dua variabel baru bernama 38 dan 39. Ini setara dengan menggunakan pengindeksan, tetapi jauh lebih nyaman _6 Destrukturisasi bekerja dengan variabel yang sudah dideklarasikan juga _7 Dan dengan parameter ke suatu fungsi _8 Anda dapat membuat variabel untuk sisa item dalam daftar menggunakan sintaks 40 _9 Tentu saja, karena ini adalah JavaScript, Anda dapat mengabaikan elemen tambahan yang tidak Anda pedulikan _0 Atau elemen lainnya _1 Penghancuran tupleTuple dapat didestrukturisasi seperti array; _2 Merupakan kesalahan untuk merusak tuple di luar jangkauan elemennya _3 Seperti array, Anda dapat merusak sisa tuple dengan 40, untuk mendapatkan tuple yang lebih pendek _4 Atau abaikan elemen trailing, atau elemen lainnya _5 Penghancuran objekAnda juga dapat merusak objek _6 Ini menciptakan variabel baru _2 dan 04 dari 44 dan 45. Perhatikan bahwa Anda dapat melewati _46 jika Anda tidak membutuhkannya Seperti penghancuran array, Anda dapat memiliki tugas tanpa deklarasi _7 Perhatikan bahwa kita harus mengapit pernyataan ini dengan tanda kurung. JavaScript biasanya mem-parsing _47 sebagai awal blok Anda dapat membuat variabel untuk sisa item dalam objek menggunakan sintaks 40 _8 Penggantian nama propertiAnda juga dapat memberikan nama yang berbeda untuk properti _9 Di sini sintaks mulai membingungkan. Anda dapat membaca 49 sebagai ” 2 sebagai 51”. Arahnya dari kiri ke kanan, seolah-olah Anda telah menulis 0 Yang membingungkan, titik dua di sini tidak menunjukkan jenisnya. Jenisnya, jika Anda menentukannya, masih perlu ditulis setelah seluruh penghancuran 1 Nilai dasarNilai default memungkinkan Anda menentukan nilai default jika properti tidak ditentukan 2 Dalam contoh ini _52 menunjukkan bahwa 04 adalah opsional, jadi mungkin 54. 55 sekarang memiliki variabel untuk 56 serta properti 2 dan 04, bahkan jika 04 tidak terdefinisi Deklarasi fungsiDestrukturisasi juga berfungsi dalam deklarasi fungsi. Untuk kasus sederhana, ini sangat mudah 3 Tetapi menentukan default lebih umum untuk parameter, dan memperbaiki default dengan destrukturisasi bisa jadi rumit. Pertama-tama, Anda harus ingat untuk meletakkan pola sebelum nilai default 4
Kemudian, Anda harus ingat untuk memberikan default untuk properti opsional pada properti yang dirusak alih-alih penginisialisasi utama. Ingatlah bahwa _60 didefinisikan dengan 04 opsional 5 Gunakan penghancuran dengan hati-hati. Seperti yang ditunjukkan contoh sebelumnya, apa pun kecuali ekspresi penghancuran yang paling sederhana akan membingungkan. Hal ini terutama berlaku dengan perusakan bersarang yang sangat dalam, yang menjadi sangat sulit untuk dipahami bahkan tanpa menumpuk penggantian nama, nilai default, dan jenis anotasi. Cobalah untuk membuat ekspresi yang merusak tetap kecil dan sederhana. Anda selalu dapat menulis tugas yang akan dihasilkan oleh penghancuran sendiri MenyebarOperator spread adalah kebalikan dari destrukturisasi. Ini memungkinkan Anda untuk menyebarkan array ke array lain, atau objek ke objek lain. Sebagai contoh 6 Ini memberi nilai bothPlus _62. Menyebarkan membuat salinan dangkal _38 dan 39. Mereka tidak diubah oleh penyebaran Anda juga dapat menyebarkan objek 7 Sekarang _65 adalah 66. Penyebaran objek lebih kompleks daripada penyebaran array. Seperti penyebaran array, ia berjalan dari kiri ke kanan, tetapi hasilnya tetap berupa objek. Ini berarti properti yang datang belakangan di objek sebar akan menimpa properti yang datang lebih awal. Jadi jika kita memodifikasi contoh sebelumnya menjadi menyebar di bagian akhir 8 Kemudian properti _67 di 68 menimpa 69, yang bukan itu yang kita inginkan dalam kasus ini Penyebaran objek juga memiliki beberapa batasan mengejutkan lainnya. Pertama, ini hanya mencakup properti milik objek yang dapat dihitung. Pada dasarnya, itu berarti Anda kehilangan metode saat menyebarkan instance objek _9 Kedua, kompiler TypeScript tidak mengizinkan penyebaran parameter tipe dari fungsi generik. Fitur itu diharapkan dalam versi bahasa yang akan datang Bagaimana Anda mendeklarasikan variabel dalam HTML?Tag tag digunakan untuk mendefinisikan variabel dalam pemrograman atau ekspresi matematika. Konten di dalamnya biasanya ditampilkan dalam huruf miring. Tip. Tag ini tidak digunakan lagi.
Bagaimana cara menggunakan variabel komponen dalam HTML Angular?Jika Anda mendeklarasikan variabel pada sebuah komponen, variabel tersebut mengacu pada instance komponen . Jika Anda mendeklarasikan variabel pada tag HTML standar, variabel merujuk ke elemen. Jika Anda mendeklarasikan variabel pada elemen
Bagaimana cara menampilkan variabel TypeScript dalam HTML?Untuk menampilkan variabel TypeScript di DOM, pertama-tama kita memerlukan indeks. html yang akan menyertakan aplikasi. file js dengan tag skrip . Sayangnya tiga kata terakhir “dan benar-benar keren. ” tidak muncul pada baris baru seperti yang diharapkan dengan notasi `…`.
Bagaimana cara mendeklarasikan variabel dalam TypeScript Angular?Sintaks tipe untuk mendeklarasikan variabel dalam TypeScript adalah menyertakan titik dua (. ) setelah nama variabel, diikuti dengan tipenya . Sama seperti di JavaScript, kami menggunakan kata kunci var untuk mendeklarasikan variabel. Deklarasikan jenis dan nilainya dalam satu pernyataan. |