Saya memiliki sejumlah elemen yang saya ingin terlihat dalam kondisi tertentu.
Di AngularJS saya akan menulis
<div ng-show="myVar">stuff</div>
Bagaimana saya bisa melakukan ini dalam Angular 2+?
angular
angular-components
angular-template
Mihai Răducanu
sumber
sumber
Jawaban:
Ikat saja ke
hidden
propertiLihat juga
masalah
hidden
memiliki beberapa masalah karena dapat bertentangan dengan CSS untukdisplay
properti.Lihat bagaimana
some
dalam contoh Plunker tidak disembunyikan karena memiliki gayaset. (Ini mungkin berperilaku berbeda di browser lain - saya diuji dengan Chrome 50)
solusi
Anda dapat memperbaikinya dengan menambahkan
Untuk gaya global di
index.html
.perangkap lain
sama dengan
dan tidak akan menampilkan elemen.
hidden="false"
akan menetapkan string"false"
yang dianggap benar.Hanya nilai
false
atau menghapus atribut yang benar-benar akan membuat elemen terlihat.Menggunakan
{{}}
juga mengubah ekspresi menjadi string dan tidak akan berfungsi seperti yang diharapkan.Hanya mengikat dengan
[]
akan berfungsi seperti yang diharapkan karena inifalse
ditugaskan sebagaifalse
ganti"false"
.*ngIf
vs.[hidden]
*ngIf
secara efektif menghapus kontennya dari DOM sambil[hidden]
memodifikasidisplay
properti dan hanya menginstruksikan browser untuk tidak menampilkan konten tetapi DOM masih mengandungnya.sumber
*ngIf
mungkin cara yang benar dalam banyak kasus, tetapi kadang-kadang Anda benar-benar ingin elemen ada di sana, tersembunyi secara visual. Gaya CSS dengan[hidden]{display:none!important}
bantuan. Sebagai contoh, bagaimana Bootstrap memastikan[hidden]
elemen benar-benar disembunyikan. Lihat GitHubGunakan
[hidden]
atribut:Atau bisa Anda gunakan
*ngIf
Ini adalah dua cara untuk menampilkan / menyembunyikan elemen. Satu-satunya perbedaan adalah:
*ngIf
akan menghapus elemen dari DOM sementara[hidden]
akan memberitahu browser untuk menampilkan / menyembunyikan elemen menggunakandisplay
properti CSS dengan menjaga elemen dalam DOM.sumber
async
pipa, karena berlangganan ke diamati hanya akan ditambahkan setelah kondisi menjadi kenyataan!Saya menemukan diri saya dalam situasi yang sama dengan perbedaan daripada dalam kasus saya elemennya adalah wadah fleksibel. Jika bukan kasus Anda pekerjaan yang mudah di sekitar bisa
dalam kasus saya karena fakta bahwa banyak browser yang kami dukung masih memerlukan awalan vendor untuk menghindari masalah, saya mencari solusi mudah lainnya
dimana CSS itu sederhana
untuk meninggalkan kemudian negara yang ditampilkan ditangani oleh kelas default.
sumber
invalid-feedback
kelas bootstrap 4 .Maaf, saya harus tidak setuju dengan ikatan ke tersembunyi yang dianggap tidak aman saat menggunakan Angular 2. Ini karena gaya tersembunyi dapat ditimpa dengan mudah misalnya menggunakan
Pendekatan yang disarankan adalah menggunakan * ngIf yang lebih aman. Untuk detail lebih lanjut, silakan merujuk ke blog resmi Angular. 5 Kesalahan Rookie yang Harus Dihindari dengan Angular 2
sumber
*ngIf
adalah pilihan yang buruk. Tetapi Anda benar bahwa konsekuensi perlu dipertimbangkan dan menunjukkan perangkap selalu merupakan ide yang baik.ngIf
pasti menjawab pertanyaan ini. Saya ingin menyembunyikan beberapa konten pada halaman yang menyertakan a<router-outlet>
. Jika saya gunakanngIf
, saya mendapatkan kesalahan karena tidak dapat menemukan outlet. Saya perlu outlet untuk disembunyikan sampai data saya dimuat, tidak absen sampai data saya dimuat.Jika kasus Anda adalah bahwa gaya adalah tampilan tidak ada Anda juga dapat menggunakan arahan ngStyle dan memodifikasi tampilan secara langsung, saya melakukan itu untuk bootstrap DropDown UL pada itu diatur untuk menampilkan tidak ada.
Jadi saya membuat acara klik untuk "secara manual" mengganti UL untuk ditampilkan
Kemudian pada komponen saya memiliki showDropDown: atribut bool yang saya toggle setiap kali, dan berdasarkan int, atur displayDDL untuk style sebagai berikut
sumber
Menurut dokumentasi Angular 1 dari ngShow dan ngHide , kedua arahan ini menambahkan gaya css
display: none !important;
, ke elemen sesuai dengan kondisi arahan itu (untuk ngShow menambahkan css pada nilai false, dan untuk ngHide menambahkan css untuk nilai sebenarnya).Kita dapat mencapai perilaku ini menggunakan Angular 2 directive ngClass:
Perhatikan bahwa untuk
show
perilaku di Angular2 kita perlu menambahkan!
(tidak) sebelum ngShowVal, dan untukhide
perilaku di Angular2 kita tidak perlu menambahkan!
(tidak) sebelum ngHideVal.sumber
myExpression dapat disetel ke true atau false
sumber
<div hidden="{{ myExpression }}">
Ini tidak akan berfungsi, karena "myExpression" akan dikonversi ke string untuk dirender dalam html. Baik string "benar" dan "salah" benar, sehingga akan selalu disembunyikanJika Anda menggunakan Bootstrap semudah ini:
sumber
[hidden]
melakukan hal yang sama jadi saya sarankan[hidden]
di bootstrap 4.0 kelas "d-none" = "display: none! important;"
sumber
Untuk orang lain yang tersandung masalah ini, ini adalah bagaimana saya menyelesaikannya.
Saya menggunakan
'visibility'
karena saya ingin melestarikan ruang yang ditempati oleh elemen. Jika Anda tidak ingin melakukannya, Anda bisa menggunakan'display'
dan mengaturnya'none'
;Anda dapat mengikatnya ke elemen html Anda, secara dinamis atau tidak.
atau
sumber
Gunakan tersembunyi seperti Anda mengikat model apa pun dengan kontrol dan tentukan css untuknya:
HTML:
CSS:
sumber
inilah yang bekerja untuk saya:
sumber
sumber
bagi saya,
[hidden]=!var
tidak pernah berhasil.Begitu,
<div *ngIf="expression" style="display:none;">
Dan,
<div *ngIf="expression">
Selalu berikan hasil yang benar.sumber
Ada dua contoh pada dokumen Angular https://angular.io/guide/structural-directives#why-remove-rather-than-hide
Anda dapat menggunakan [style.display] = "'block'" untuk mengganti ngShow dan [style.display] = "'none'" untuk mengganti ngHide.
sumber
Cara terbaik untuk mengatasi masalah ini menggunakan
ngIf
Karena ini juga mencegah elemen yang ditampilkan di front-end,Jika Anda menggunakan
[hidden]="true"
atau menyembunyikan gaya,[style.display]
itu hanya akan menyembunyikan elemen di ujung depan dan seseorang dapat mengubah nilainya dan terlihat dengan mudah, Menurut saya cara terbaik untuk menyembunyikan elemen adalahngIf
dan juga Jika Anda memiliki beberapa elemen (perlu mengimplementasikan yang lain juga), Anda dapat Menggunakan
<ng-template>
opsicontoh kode ng-template
sumber
Jika Anda hanya ingin menggunakan simetris
hidden
shown
arahan / yang AngularJS datang, saya sarankan menulis arahan atribut untuk menyederhanakan template seperti itu (diuji dengan Angular 7):Banyak solusi lain yang benar. Anda harus menggunakan
*ngIf
jika memungkinkan. Menggunakanhidden
atribut can menerapkan gaya tak terduga, tetapi kecuali jika Anda menulis komponen untuk orang lain, Anda mungkin tahu apakah itu. Jadi agarshown
arahan ini berfungsi, Anda juga ingin memastikan bahwa Anda menambahkan:untuk gaya global Anda di suatu tempat.
Dengan ini, Anda dapat menggunakan arahan seperti:
dengan versi simetris (dan berlawanan) seperti:
Untuk menambahkan pada keharusan - Anda juga harus kita awalan seperti begitu
[acmeShown]
vs hanya[shown]
.Alasan utama saya menggunakan
shown
arahan atribut adalah untuk mengubah kode AngularJS ke Angular -AND- ketika konten yang disembunyikan berisi komponen kontainer yang menyebabkan perjalanan pulang-pergi XHR. Alasan saya tidak hanya menggunakan[hidden]="!myVar"
ini adalah karena sering kali ini lebih rumit seperti:[hidden]="!(myVar || yourVar) && anotherVar" - yes I can invert that, but it is more error prone.
[diperlihatkan] `hanya lebih mudah untuk dipikirkan.sumber
Untuk menyembunyikan dan menampilkan div pada tombol klik di sudut 6.
Kode Html
Komponen .ts Code
ini berfungsi untuk saya dan ini adalah cara untuk mengganti ng-hide dan ng-show di angular6.
Nikmati...
Terima kasih
sumber