在ng-hide / ng-show中是否可能使用复杂的表达式?


180

我想这样做:

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

但表达式的计算结果始终为false

我不想在上定义特殊功能$scope


1
该语法对我有用,我经常使用它。如果评估为false,则可能需要仔细检查这些值。“ globals”和/或“ mapping”对象可能是undefined
derrylwc

在答案下方阅读我的评论。
保罗

只是一个提示-如果您改用控制器方法,则实际上可以逐步完成调试器中的评估!
Dimitry K

Answers:


212

如果需要运行任意JavaScript代码,请使用控制器方法,或者可以定义返回true或false的过滤器。

我刚刚进行了测试(应该首先进行了测试),并且像ng-show="!a && b"预期的那样工作。


4
你是对的。问题在于isAdmin标志的类型为“字符串”,而不是“布尔值”。
保罗

121

ng-show/ ng-hide仅接受boolean值。

对于复杂的表达式,最好使用控制器和范围来避免复杂化。

下面一个将起作用(这不是很复杂的表达)

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

当两个条件中的任何一个返回true(或操作)时,此处的元素将在UI中显示。

这样,您可以使用任何表达式。


12

如果您没有太多的表达式,这将起作用。

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

对于除此以外的更多表达式,请使用控制器。


1
我认为您的陈述是不正确的:This will work if you do not have too many expressions.尽管我同意应改为在控制器中执行。
拉胡尔·德赛


2

以上这些答案中有些对我不起作用,但对我有用。以防万一别人有同样的问题。

ng-show="column != 'vendorid' && column !='billingMonth'"
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.