簡體   English   中英

如何在angularjs表達式中使true && false等於true?

[英]How to make true && false equal to true in angularjs expression?

我正在嘗試檢查輸入是否已被觸摸並且為空(沒有 angular 的內置函數)。

<form-input is-invalid-on="isTouched && !gs.data.name || gs.data.name.length > 50"></form-input>

如果isTouched && !gs.data.name計算結果為true && false則表達式的那一側變為false

所以我的問題很簡單,如果輸入已被觸摸並且它為空或長度大於 50,我如何使整個表達式評估為真?

<form-input is-invalid-on="(isTouched && !gs.data.name) || (gs.data.name.length > 50)"</form-input>

可以嘗試使用()並檢查gs.dataisTouched && (!gs.data || !gs.data.name || !gs.data.name.length || gs.data.name.length > 50)

<form-input is-invalid-on="isTouched && (!gs.data || !gs.data.name || !gs.data.name.length  || gs.data.name.length > 50)"></form-input>

我相信它被用作屬性指令。

is-invalid-on="(isTouched && gs.data.name.length) || gs.data.name.length > 50"

原因? 我假設你的gs.data.name是一個字符串。 在 javascript 中計算時,空字符串仍然是一個真值。 所以你必須評估它的長度。

Angular 表達式的工作方式與我嘗試使用的 javascript 並不完全相同:

<form-input is-invalid-on="isTouched && gs.data.name.length==0 || gs.data.name.length > 50"></form-input>

假設您正確地將 gs.data.name 初始化為空字符串。

順便說一下,您忘記了標簽上的 >。

我終於找到了為什么它表現得如此奇怪的原因,由於這個問題有很多答案,我無法刪除它。 所以我不妨解釋一下發生了什么。

事實證明isTouched始終undefined因為我在指令之外使用它(即使它在指令的屬性中使用),這使得表達式undefined && false ,導致isInvalidOn始終為false

相反,我這樣做是isTouched稍后在實際的form-input模板中使用isTouched作為ng-class={invalid: isInvalidOn && isTouched} ,從而產生所需的行為。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM