如何制作真正的&&在angularjs表达式中false等于true?

时间:2016-03-22 09:47:31

标签: javascript angularjs boolean-logic

我试图检查输入是否被触摸并且是空的(没有角度内置函数)。

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

如果isTouched && !gs.data.name评估为true && false,那么表达式的那一侧将变为false

所以我的问题很简单,如果输入被触摸并且它是空的还是长度大于50,我如何使整个表达式评估为真?

6 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

可以尝试使用(),也可以查看gs.data isTouched && (!gs.data || !gs.data.name || !gs.data.name.length || gs.data.name.length > 50)

答案 2 :(得分:0)

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

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

原因?我假设你的gs.data.name是一个字符串。在javascript中评估时,空字符串仍然是一个真正的值。所以你必须评估它的长度。

答案 3 :(得分:0)

Angular表达式与javascript完全相同,我试试这个:

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

假设您正确地将gs.data.name初始化为空字符串。

顺便说一句,你忘记了&gt;在你的标签上。

答案 4 :(得分:0)

看看它是否有效:

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

答案 5 :(得分:0)

我终于找到了为什么它表现得如此奇怪的原因,因为这个问题有很多答案我无法删除它。所以我不妨解释发生了什么。

事实证明isTouched总是undefined,因为我在指令之外使用它(即使它在指令的属性中使用),这使得表达式undefined && false导致isInvalidOn始终为false

相反,我是这样做的,以便我在实际的isTouched模板中稍后使用form-input作为ng-class={invalid: isInvalidOn && isTouched},从而产生所需的行为。