2014-10-16 42 views
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-显示指令。有人能告诉我该怎么做吗?

谢谢。

+1

您正在使用表达式语言以错误的方式,空条件应该是表达,即'{{data.entry_2!== NULL}}'顺便说一句,你仍然可以使用内如果自定义实体具有如您的示例中给出的索引,则有条件地呈现行中的ng-repeat。例如{{data ['entry_'+($ index + 1)]!== null}}可以使你的代码简洁。但是,当然如果属性具有随机名称,这种方法将不起作用。 – cubbuk 2014-10-16 12:34:09

+2

在ng-show中不需要{{}},你可以用一个函数来做到这一点。例如ng-show ='calculate(0)'返回true或false。考虑可重复使用的代码,所以你不需要重复!== null每次,你可以很容易地将null更改为false,例如,如果你的情况发生变化 – 2014-10-16 12:44:07

+0

@cubbuk它很奇怪。当我使用'ng-show =“false”'时,chrome开发工具显示另一个属性'display:none'。如果它只是''仍然计算结果为真,并且display:none'不见了,事实上entry_i没有在js文件中分配任何值变量实际上不应该存在)。 – menorah84 2014-10-16 13:02:48

回答

1

你就近了。花括号只需要回显/打印/渲染变量的值。在一个表达式中,你不应该使用大括号。

<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script> 
 
<table ng-app ng-init="data = {entry_1: 'notnull', entry_2: null, entry_n: 'againNotNull'}"> 
 
    <thead> 
 
    </thead> 
 
    <tbody> 
 
     <tr ng-show="data.entry_1"> 
 
      <td>Custom Label 1</td> 
 
      <td>{{data.entry_1}}</td> 
 
     </tr> 
 
     <tr ng-show="data.entry_2"> 
 
      <td>Custom Label 2</td> 
 
      <td>{{data.entry_2}}</td> 
 
     </tr> 
 
     . 
 
     . 
 
     . 
 
     <tr ng-show="data.entry_n"> 
 
      <td>Custom Label n</td> 
 
      <td>{{data.entry_n}}</td> 
 
     </tr> 
 
     <tr ng-show="data.device"> 
 
      <td>Custom Device</td> 
 
      <td>{{data.device}}</td> 
 
     </tr> 
 
    </tbody> 
 
</table>

+0

另一个问题,如果让我们说变量'设备',从来就不是数据的值,因为JavaScript文件没有为数据分配或初始化这样的变量(即设备不存在于数据中),是否足以比较' data.device!== null'获得“真实”或“虚假”? – menorah84 2014-10-16 13:21:41

+0

我已更新我的示例包含此问题。我建议阅读有关Angular Expressions的文档。您不需要评估“data.device!== null”。 “data.device”就足够了。 NG表达比JS更宽容。如果属性未定义,或者父对象未定义,则表达式将被评估为false。 – Martin 2014-10-16 13:46:53

-2

在指令中作用域的上下文中使用$ compile服务。

https://docs.angularjs.org/api/ng/service/ $编译

编辑:我同意马丁的回答。

+0

我觉得这个问题有点矫枉过正。在动态加载DOM的情况下,也许。 – Vojtiik 2014-10-16 12:44:06

+0

创建指令来评估表达式会适得其反。 ngShow指令就足够了。 – Martin 2014-10-16 12:50:40