Bagaimana saya bisa menambahkan atribut elemen dengan syarat misalnya checked
kotak centang?
Versi Angular sebelumnya NgAttr
dan saya pikir NgChecked
yang semuanya sepertinya menyediakan fungsionalitas yang saya cari. Namun, atribut ini tampaknya tidak ada di Angular 2 dan saya tidak melihat cara lain untuk menyediakan fungsi ini.
javascript
angular
Jonathan Miles
sumber
sumber
Jawaban:
null
menghapusnya:atau
Petunjuk:
Atribut vs properti
Ketika elemen HTML tempat Anda menambahkan pengikatan ini tidak memiliki properti dengan nama yang digunakan dalam pengikatan (
checked
dalam hal ini) dan juga tidak ada komponen atau arahan Angular yang diterapkan ke elemen yang sama yang memiliki@Input() checked;
, maka[xxx]="..."
tidak dapat digunakan.Lihat juga Apa perbedaan antara properti dan atribut dalam HTML?
Apa yang harus mengikat ketika tidak ada properti seperti itu
Alternatif yang
[style.xxx]="..."
,[attr.xxx]="..."
,[class.xxx]="..."
tergantung pada apa yang Anda mencoba untuk mencapai.Karena
<input>
hanya memilikichecked
atribut, tetapi tidak adachecked
properti[attr.checked]="..."
adalah cara yang tepat untuk kasus khusus ini.Atribut hanya dapat menangani nilai string
Jebakan yang umum adalah juga bahwa untuk
[attr.xxx]="..."
binding nilai (...
) selalu berstruktur. Hanya properti dan@Input()
s yang dapat menerima tipe nilai lain seperti boolean, angka, objek, ...Sebagian besar properti dan atribut elemen terhubung dan memiliki nama yang sama.
Koneksi atribut-properti
Ketika terikat ke atribut, properti juga hanya menerima nilai yang diikat dari atribut.
Ketika diikat ke properti, properti menerima nilai yang terikat padanya (boolean, angka, objek, ...) dan atributnya lagi nilai yang dirangkai.
Dua kasus di mana nama atribut dan properti tidak cocok.
https://developer.mozilla.org/en-US/docs/Web/API/HTMLLabelElement/htmlFor (lihat kalimat pertama dari deskripsi
htmlFor property reflects the value of the for
-for
mungkin tidak berfungsi karena kata kunci dalam C atau JavaScript)Mengapa colspan bukan atribut asli yang dikenal di Angular 2?
Sudut telah diubah sejak saat itu dan tahu tentang kasus khusus ini dan menanganinya sehingga Anda dapat mengikat
<label [for]="
meskipun tidak ada properti seperti itu (sama untukcolspan
)sumber
attr.
. Tetapi jika Anda ingin menambahkan atribut khusus, Anda pasti memerlukanattr.
awalanattr.
porsi ini. Saya mencoba mengatur[href]
dan hanya ingin mengaturnya jikahref
properti item ada. Tanpa[attr.href]
ini akan menambah href dengan nilai 'null', yang, ketika diklik, akan menyegarkan halaman saat ini.[attr.href]
memperbaikinya.href
pada elemen yang memilikihref
properti, tidak perlu digunakanattr
. Pasti ada sesuatu yang salah.<a [href]="item.href">
manaitem.href
tidak terdefinisi (bukan nilai tidak terdefinisi, tetapi propertihref
tidak ada diitem
) adalah pengaturanhref
atributnull
. Saya tidak menyelidiki sumbernya, karena jujur saya tidak terlalu peduli pada saat ini (ini adalah detail kecil), tetapiattr.
merupakan arahan yang berbeda sama sekali dan oleh karena itu bertindak berbeda tidak mengherankan bagi saya.dalam sintaks atribut angular-2 adalah
Mengikat peran atribut ke hasil ekspresi myAriaRole.
jadi bisa pakai like
sumber
your expression
adalahfalse
atribut di DOM akan terlihat seperti<div checked="false">
. Saya tidak berpikir ini adalah efek yang dimaksudkan.attr.
. Tetapi jika Anda ingin menambahkan atribut khusus, Anda pasti memerlukanattr.
awalanMenyempurnakan jawaban Günter Zöchbauer:
Tampaknya ini berbeda sekarang. Saya mencoba melakukan ini untuk menerapkan atribut href secara kondisional ke tag anchor. Anda harus menggunakan undefined untuk kasus 'tidak berlaku'. Sebagai contoh, saya akan menunjukkan dengan tautan yang menerapkan atribut href secara kondisional.
Tag anchor tanpa atribut href menjadi teks biasa, yang menunjukkan placeholder untuk suatu tautan, per spesifikasi hyperlink .
Untuk navigasi saya, saya memiliki daftar tautan, tetapi salah satu tautan itu mewakili halaman saat ini. Saya tidak ingin tautan halaman saat ini menjadi tautan, tetapi masih ingin tautan itu muncul dalam daftar (memiliki beberapa gaya khusus, tetapi contoh ini disederhanakan).
Ini lebih bersih daripada menggunakan dua * ngIf pada rentang dan tag jangkar, saya pikir.
sumber
Jika itu adalah elemen input, Anda dapat menulis sesuatu seperti ....
<input type="radio" [checked]="condition">
Nilai kondisi harus benar atau salah.Juga untuk atribut gaya ...
<h4 [style.color]="'red'">Some text</h4>
sumber
Anda bisa menggunakan ini.
<span [attr.checked]="val? true : false"> </span>
sumber
Anda dapat menggunakan pendekatan yang lebih baik untuk seseorang yang menulis HTML untuk scss yang sudah ada.
html
scss
Dengan begitu Anda tidak perlu melakukannya
<boolean> ? true : null
setiap saat.sumber
multiple
atribut padaselect
elemen.Di sini, paragraf dicetak hanya 'isValid' benar / mengandung nilai apa pun
sumber
Saya ingin memiliki tooltip saja untuk bidang tertentu seperti yang ditambahkan di bawah ini dalam kode tetapi Anda ingin memiliki tooltip di multiplent Anda dapat memiliki array valdidate menggunakan:
Beberapa Elemen memiliki tooltip data kustom atribut :
1: [ 'key1ToHaveTooltip', `key2ToHaveTooltip ']. Termasuk (kunci)
2: ['key1ToHaveTooltip', 'key2ToHaveTooltip']. IndexOf (kunci)> -1
untuk memiliki atribut tooltip pada lebih dari 1 elemen.
sumber
Inline-Maps juga berguna.
Mereka sedikit lebih eksplisit & mudah dibaca juga.
Hanya cara lain untuk mencapai hal yang sama, jika Anda tidak menyukai sintaksis ternary atau
ngIf
s (dll).sumber
checked
atribut (tambahkan / hapus dari tag input)<input type="checkbox" name="vehicle" value="Car" checked>
? (jika kami mengubahclass
kecheckbox
dalam kode Anda itu TIDAK bekerja (saya periksa ini))