Mungkinkah ekspresi rumit di ng-hide / ng-show


180

Saya ingin melakukannya:

ng-hide="!globals.isAdmin && mapping.is_default"

tetapi ekspresi selalu mengevaluasi untuk false.

Saya tidak ingin mendefinisikan fungsi khusus $scope.


1
Sintaks itu bekerja untuk saya, dan saya sering menggunakannya. Jika sedang mengevaluasi false, Anda mungkin ingin memeriksa ulang nilai-nilai itu. Mungkin saja objek "global" dan / atau "pemetaan"undefined
derrylwc

Baca komentar saya di bawah jawabannya.
Paul

hanya sebuah petunjuk - jika Anda menggunakan metode pengontrol sebagai gantinya, Anda sebenarnya dapat melangkah melalui evaluasi dalam debugger!
Dimitry K

Jawaban:


212

Gunakan metode pengontrol jika Anda perlu menjalankan kode JavaScript sewenang-wenang, atau Anda dapat menentukan filter yang mengembalikan benar atau salah.

Saya baru saja menguji (seharusnya melakukan itu dulu), dan sesuatu seperti ng-show="!a && b"bekerja seperti yang diharapkan.


4
Kamu benar. Masalahnya adalah bahwa flag isAdmin adalah dari tipe 'string' daripada 'boolean'.
Paul

121

ng-showSaya ng-hidehanya menerima booleannilai.

Untuk ekspresi kompleks, sebaiknya gunakan pengontrol dan cakupan untuk menghindari komplikasi.

Di bawah ini akan bekerja (Ini bukan ekspresi yang sangat kompleks)

ng-show="User=='admin' || User=='teacher'"

Elemen di sini akan ditampilkan di UI ketika salah satu dari kedua kondisi mengembalikan true (operasi ATAU).

Seperti ini, Anda dapat menggunakan ekspresi apa pun.


12

Ini akan berhasil jika Anda tidak memiliki terlalu banyak ekspresi.

Contoh: ng-show="form.type === 'Limited Company' || form.type === 'Limited Partnership'"

Untuk ekspresi yang lebih banyak dari ini gunakan controller.


1
Saya tidak berpikir pernyataan Anda benar: This will work if you do not have too many expressions.walaupun saya setuju bahwa itu harus dilakukan di controller.
Rahul Desai

7

Saya biasanya mencoba untuk menghindari ekspresi dengan ng-show dan ng-hide karena mereka dirancang sebagai boolean, bukan conditional. Jika saya membutuhkan logika kondisional dan boolean, saya lebih suka memasukkan logika kondisional menggunakan ng-if sebagai pemeriksaan pertama, kemudian menambahkan cek tambahan untuk logika boolean dengan ng-show dan ng-hide

Namun, jika Anda ingin menggunakan kondisional untuk ng-show atau ng-hide, berikut ini tautan dengan beberapa contoh: Tampilan Bersyarat menggunakan ng-if, ng-show, ng-hide, ng-sembunyikan, ng-include, ng-switch


2

Beberapa jawaban di atas tidak bekerja untuk saya tetapi ini berhasil. Kalau-kalau ada orang lain yang memiliki masalah yang sama.

ng-show="column != 'vendorid' && column !='billingMonth'"
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.