Javascript 如何实现&&;angularjs表达式中的false等于true?
我试图检查输入是否已被触摸并且为空(angular中没有内置函数)Javascript 如何实现&&;angularjs表达式中的false等于true?,javascript,angularjs,boolean-logic,Javascript,Angularjs,Boolean Logic,我试图检查输入是否已被触摸并且为空(angular中没有内置函数) 如果i被触动&&!gs.data.name的计算结果为true&&false,则表达式的那一侧变为false 所以我的问题很简单,如果输入被触摸,并且是空的或者长度大于50,我如何使整个表达式计算为真 可以尝试使用(),也可以检查gs.data如i打开(!gs.data | | |!gs.data.name | |!gs.data.name.length | | gs.data.name.length>50) <for
如果i被触动&&!gs.data.name
的计算结果为true&&false
,则表达式的那一侧变为false
所以我的问题很简单,如果输入被触摸,并且是空的或者长度大于50,我如何使整个表达式计算为真 可以尝试使用()
,也可以检查gs.data
如i打开(!gs.data | | |!gs.data.name | |!gs.data.name.length | | gs.data.name.length>50)
<form-input is-invalid-on="(isTouched && !gs.data.name) || (gs.data.name.length > 50)"</form-input>
我相信它被用作属性指令
在=“(i点击&gs.data.name.length)| gs.data.name.length>50”上无效
原因?我假设您的gs.data.name
是一个字符串。在javascript中求值时,空字符串仍然是真实值。所以你必须评估它的长度 角度表达式的工作原理与我得到的javascript的工作原理不完全相同,请尝试以下内容:
<form-input is-invalid-on="isTouched && gs.data.name.length==0 || gs.data.name.length > 50"></form-input>
假设您正确地将gs.data.name初始化为空字符串
顺便说一句,你忘了标签上的>。我终于找到了它行为如此奇怪的原因,因为这个问题有很多答案,我无法删除它。所以我还是解释一下发生了什么
原来isTouched
始终是未定义的
,因为我在指令之外使用它(即使它被用于指令的属性),这使得表达式未定义&&false
,导致isInvalidOn
始终是false
相反,我这样做是为了在实际的表单输入中使用isTouched
模板作为ng class={invalid:isInvalidOn&&isTouched}
,从而产生所需的行为。true&&true
在javascript中不是真的吗?你在哪里读到的?为什么仅仅因为true==true
不是true
就应该true&&true
变成false
?还有,为什么在Javascript中true==true
不应该是true
?你的意思是isTouched&!gs.data.name.length
?这是我读到的,我也通过打印它进行了检查,它说两者都是真的,但值是假的。这对我来说毫无意义。@kazupooot无论是否使用长度,它都会给出相同的结果。这被用作属性指令。你不能删除报价你是这样做的吗?(isTouched&!gs.data.name)| |(gs.data.name.length>50)尝试使用gs.data.name=undefinedIt是一个HTML属性,不是一个变量。编辑以使其更清晰。使用括号恐怕会给出相同的结果。使用括号没有任何区别。它只是增加了可读性。并且总是在或之前计算。更新我的答案。你现在可以试试吗?我需要检查输入是否为空,而不是它是否被触摸过并且有值。添加括号仍然没有任何作用。
<form-input is-invalid-on="isTouched && (!gs.data || !gs.data.name || !gs.data.name.length || gs.data.name.length > 50)"></form-input>
<form-input is-invalid-on="isTouched && gs.data.name.length==0 || gs.data.name.length > 50"></form-input>