如何在 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.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

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