Ng-hide / ng-show'da karmaşık ifadeler mümkün müdür?


180

Bunu yapmak istiyorum:

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

ancak ifade her zaman olarak değerlendirilir false.

Üzerinde özel fonksiyon tanımlamak istemiyorum $scope.


1
Bu sözdizimi benim için çalışıyor ve sık sık kullanıyorum. Değerlendiriliyorsa false, bu değerleri tekrar kontrol etmek isteyebilirsiniz. "Globals" ve / veya "mapping" nesnelerinin olması mümkündürundefined
derrylwc

Cevabın altındaki yorumumu okuyun.
Paul

sadece bir ipucu - bunun yerine denetleyici yöntemini kullanırsanız, aslında hata ayıklayıcıdaki değerlendirmeyi adım adım uygulayabilirsiniz!
1616:

Yanıtlar:


212

Rasgele JavaScript kodu çalıştırmanız gerekiyorsa veya doğru veya yanlış döndüren bir filtre tanımlayabiliyorsanız bir denetleyici yöntemi kullanın.

Sadece test ettim (bunu önce yapmalıydım) ve ng-show="!a && b"beklendiği gibi çalıştı.


4
Haklısın. Sorun isAdmin bayrağının 'boolean' yerine 'string' türünde olmasıydı.
Paul

121

ng-show/ ng-hideyalnızca booleandeğerleri kabul eder .

Karmaşık ifadeler için, komplikasyonları önlemek için kontrolör ve kapsam kullanmak iyidir.

Birinin altında çalışacak (Çok karmaşık bir ifade değil)

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

İki koşuldan herhangi biri doğru (VEYA işlemi) döndüğünde burada eleman kullanıcı arayüzünde gösterilir.

Bunun gibi herhangi bir ifadeyi kullanabilirsiniz.


12

Çok fazla ifadeniz yoksa bu işe yarar.

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

Bundan daha fazla ifade için bir denetleyici kullanın.


1
İfadenizin doğru olduğunu düşünmüyorum: This will work if you do not have too many expressions.bunun yerine denetleyicide yapılması gerektiğini kabul ediyorum.
Rahul Desai

7

Genellikle koşullu değil boolean olarak tasarlandıkları için ng-show ve ng-hide ifadelerinden kaçınmaya çalışırım. Hem koşullu hem de boolean mantığa ihtiyacım varsa, ilk kontrol olarak ng-if kullanarak koşullu mantığı koymayı tercih ederim, sonra ng-show ve ng-hide ile boole mantığı için ek bir kontrol ekleyin.

Howerver, ng-show veya ng-hide için bir koşullu kullanmak istiyorsanız, işte bazı örneklerle bir bağlantı: ng-if, ng-show, ng-hide, ng-include, ng-switch kullanan Koşullu Ekran


2

Yukarıdaki cevaplardan bazıları benim için işe yaramadı ama bu işe yaradı. Bir başkası aynı sorunu yaşıyorsa.

ng-show="column != 'vendorid' && column !='billingMonth'"
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.