2014-10-16 76 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