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.

Paul
sumber
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.

Mark Rajcok
sumber
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.

myaseedk
sumber
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.

lvadim01
sumber
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

James Drinkard
sumber
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'"
Deathstalker
sumber