0
我希望我的表根据值是否为null来有条件地呈现其行。这些行有不同的自定义条目和标签,这就是为什么我不能只使用ng-repeat。这里是代码:评估角度指令中的表达式
<table>
<thead>
</thead>
<tbody>
<tr ng-show = "{{data.entry_1}} !== null">
<td>Custom Label 1</td>
<td>{{data.entry_1}}</td>
</tr>
<tr ng-show = "{{data.entry_2}} !== null">
<td>Custom Label 2</td>
<td>{{data.entry_2}}</td>
</tr>
.
.
.
<tr ng-show = "{{data.entry_n}} !== null">
<td>Custom Label n</td>
<td>{{data.entry_n}}</td>
</tr>
</tbody>
</table>
但是,看起来这种方式是不正确的。它可能是javascript(编译器)在ng-show中的{{}}或'!== null'抱怨或者可能都是。如何评估ng-指令中的角度表达式(在{{}}中?
我知道我也可以在js文件中对此进行评估,但由于我不想添加更多的范围变量(为了使代码更清晰),我选择评估它是否在ng-显示指令。有人能告诉我该怎么做吗?
谢谢。
您正在使用表达式语言以错误的方式,空条件应该是表达,即'{{data.entry_2!== NULL}}'顺便说一句,你仍然可以使用内如果自定义实体具有如您的示例中给出的索引,则有条件地呈现行中的ng-repeat。例如{{data ['entry_'+($ index + 1)]!== null}}可以使你的代码简洁。但是,当然如果属性具有随机名称,这种方法将不起作用。 – cubbuk 2014-10-16 12:34:09
在ng-show中不需要{{}},你可以用一个函数来做到这一点。例如ng-show ='calculate(0)'返回true或false。考虑可重复使用的代码,所以你不需要重复!== null每次,你可以很容易地将null更改为false,例如,如果你的情况发生变化 – 2014-10-16 12:44:07
@cubbuk它很奇怪。当我使用'ng-show =“false”'时,chrome开发工具显示另一个属性'display:none'。如果它只是'
回答
你就近了。花括号只需要回显/打印/渲染变量的值。在一个表达式中,你不应该使用大括号。
来源
2014-10-16 12:46:26 Martin
另一个问题,如果让我们说变量'设备',从来就不是数据的值,因为JavaScript文件没有为数据分配或初始化这样的变量(即设备不存在于数据中),是否足以比较' data.device!== null'获得“真实”或“虚假”? – menorah84 2014-10-16 13:21:41
我已更新我的示例包含此问题。我建议阅读有关Angular Expressions的文档。您不需要评估“data.device!== null”。 “data.device”就足够了。 NG表达比JS更宽容。如果属性未定义,或者父对象未定义,则表达式将被评估为false。 – Martin 2014-10-16 13:46:53
在指令中作用域的上下文中使用$ compile服务。
见https://docs.angularjs.org/api/ng/service/ $编译
编辑:我同意马丁的回答。
来源
2014-10-16 12:33:20 skewl84
我觉得这个问题有点矫枉过正。在动态加载DOM的情况下,也许。 – Vojtiik 2014-10-16 12:44:06
创建指令来评估表达式会适得其反。 ngShow指令就足够了。 – Martin 2014-10-16 12:50:40
相关问题