2013-03-01 39 views
157

我想這樣做:ng-hide/ng-show中可能有複雜的表達式嗎?

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

但表情始終計算爲false

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

+1

該語法適用於我,我經常使用它。如果評估結果爲「false」,則可能需要仔細檢查這些值。可能「全局變量」和/或「映射」對象是「未定義的」。 – derrylwc 2015-03-26 22:50:49

+0

在答案下面閱讀我的評論。 – Paul 2015-03-27 12:55:32

+0

只是一個提示 - 如果您使用控制器方法,您實際上可以在調試器中逐步完成評估! – 2016-11-30 16:23:25

回答

195

如果您需要運行任意JavaScript代碼,或者可以定義返回true或false的過濾器,請使用控制器方法。

我剛剛測試過(應該先這樣做),而像ng-show="!a && b"之類的東西按預期工作。

+4

你說得對。問題在於isAdmin標誌的類型是'string'而不是'boolean'。 – Paul 2013-03-01 21:18:59

109

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

對於複雜的表達式,使用控制器和範圍避免複雜性是很好的。

下面一個將工作(這不是很複雜的表達式)

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

在這裏元件將在UI顯示被當任何兩個條件返回真(或操作)。

像這樣,你可以用任何表達式。

11

這將工作,如果你沒有太多的表達式。

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

對於任何比這使用一個控制器的詳細表達式。

+1

我不認爲你的陳述是正確的:「如果你沒有太多的表達式,這將起作用。」雖然我同意它應該在控制器中完成。 – 2016-02-10 20:14:51

6

我通常儘量避免使用ng-show和ng-hide表達式,因爲它們被設計爲布爾值而不是條件。如果我同時需要條件邏輯和布爾邏輯,我寧願使用ng-if作爲第一個檢查來添加條件邏輯,然後使用ng-show和ng-hide添加對布爾邏輯的額外檢查。Howerver,如果你想使用ng-show或ng-hide的條件,下面是一些鏈接,其中包含一些示例:Conditional Display using ng-if, ng-show, ng-hide, ng-include, ng-switch

2

上述答案中的一部分對我來說不起作用,但是確實如此。以防萬一別人有同樣的問題。

ng-show="column != 'vendorid' && column !='billingMonth'"