[英]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.data
像isTouched && (!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.