Saya mengalami masalah menyembunyikan dan menampilkan elemen tergantung dari variabel boolean di Angular 2.
ini kode untuk div untuk ditampilkan dan disembunyikan:
<div *ngIf="edited==true" class="alert alert-success alert-dismissible fade in" role="alert">
<strong>List Saved!</strong> Your changes has been saved.
</div>
variabel "diedit" dan disimpan di komponen saya:
export class AppComponent implements OnInit{
(...)
public edited = false;
(...)
saveTodos(): void {
//show box msg
this.edited = true;
//wait 3 Seconds and hide
setTimeout(function() {
this.edited = false;
console.log(this.edited);
}, 3000);
}
}
Elemen disembunyikan, ketika fungsi saveTodos dimulai, elemen ditampilkan, tetapi setelah 3 detik, bahkan jika variabel kembali menjadi salah, elemen tidak disembunyikan. Mengapa?
edited
adalah variabel global. Apa yang akan menjadi pendekatan Anda dalam suatu*ngFor-loop
?Ada dua opsi tergantung apa yang ingin Anda capai:
Anda dapat menggunakan arahan tersembunyi untuk menampilkan atau menyembunyikan elemen
Anda dapat menggunakan arahan kontrol ngIf untuk menambah atau menghapus elemen. Ini berbeda dengan arahan tersembunyi karena tidak menampilkan / menyembunyikan elemen, tetapi menambah / menghapus dari DOM. Anda bisa kehilangan data elemen yang belum disimpan. Ini bisa menjadi pilihan yang lebih baik untuk komponen edit yang dibatalkan.
Bagi Anda masalah perubahan setelah 3 detik, itu bisa jadi karena ketidakcocokan dengan setTimeout. Apakah Anda memasukkan perpustakaan angular2-polyfills.js di halaman Anda?
sumber
[hidden]="edited"
tampaknya tidak memiliki efek apa pun ...?[hidden] { display: none !important;}
di css global Anda.Ketika Anda tidak peduli tentang menghapus Html Dom-Element, gunakan * ngIf.
Kalau tidak, gunakan ini:
sumber
Untuk komponen anak untuk menunjukkan saya gunakan
*ngif="selectedState == 1"
Alih-alih itu saya gunakan
[hidden]="selectedState!=1"
Ini bekerja untuk saya .. memuat komponen anak dengan benar dan setelah hide dan un-hide komponen anak tidak terdefinisi setelah menggunakan ini.
sumber
Ini adalah kasus penggunaan yang baik untuk arahan. Sesuatu seperti ini sangat berguna.
sumber
ngIf
itutrue
. Apakah ada cara untuk mengatur variabel induk yang mengontrol inifalse
?ngIf
lebih pada apakah elemen dalam DOM atau tidak. Yang saya inginkan adalah ini:<div [hidden]="messages" [removeAfter]=3000>...
tempat saya menampilkan / menyembunyikan pesan jika ada dan kemudian menghapus pesan setelah 3 detik sehingga pengguna tidak perlu menutup kotak. Saya menambahkan arahan Anda di atas dan mengubahnya untuk melakukanhide()
tetapi itu tidak dipanggil ketika pesan ditampilkan. Bagaimana saya membuatnya dipanggil pada acara tersebut?@Output()
danEventEmitter
?Kita dapat melakukannya dengan menggunakan cuplikan kode di bawah ini ..
Kode Sudut:
Templat HTML:
sumber
Tergantung pada kebutuhan Anda,
*ngIf
atau[ngClass]="{hide_element: item.hidden}"
di mana kelas CSShide_element
adalah{ display: none; }
*ngIf
dapat menyebabkan masalah jika Anda mengubah variabel status*ngIf
dihapus, dalam kasusdisplay: none;
itu diperlukan CSS .sumber
Solusi @inoabrian di atas berhasil untuk saya. Saya mengalami situasi di mana saya akan menyegarkan halaman saya dan elemen tersembunyi saya akan muncul kembali di halaman saya. Inilah yang saya lakukan untuk mengatasinya.
sumber
Cukup tambahkan bind (ini) di fungsi setTimeout Anda, itu akan mulai berfungsi
dan dalam perubahan HTML
Untuk
sumber