当我写这样的ng-if语句时......
ng-if="$state.params.Step != vm.$localStorage.builder[$state.params.ID].Data.Steps.length - 2 && vm.$localStorage.builder[$state.params.ID].Data.Steps.length - 1"
ng-if="$state.params.Step != vm.$localStorage.builder[$state.params.ID].Data.Steps.length - 2 && $state.params.Step != vm.$localStorage.builder[$state.params.ID].Data.Steps.length - 1"
我做错了什么?如果我能帮忙的话,我不想重复自己。
答案 0 :(得分:1)
UIImageView
这基本上是在说:
ng-if="$state.params.Step != vm.$localStorage.builder[$state.params.ID].Data.Steps.length - 2 && vm.$localStorage.builder[$state.params.ID].Data.Steps.length - 1"
然后将结果与最后一个数字($state.params.Step != vm.$localStorage.builder[$state.params.ID].Data.Steps.length - 2) &&
vm.$localStorage.builder[$state.params.ID].Data.Steps.length - 1
进行比较。有效;几乎肯定不是你想要的。
这种逻辑几乎肯定会被移出&&
几乎无法阅读的地方。
答案 1 :(得分:0)
你做错了不是重复自己。 : - )
Angular评估像JavaScript这样的表达式(我认为它实际上使用JavaScript来完成它,但我还没有在covesr下检查过)。 JavaScript,就像几乎所有使用B语言(C,C ++,C#,Java,JavaScript,...)语法的语言都没有x != a && b
或x != a || b
一样,你必须拼写它出来了:x != a && x != b
或x != a || x != b
。这就是它的原因。
您没有收到错误的唯一原因是JavaScript具有类型强制,因此x != a && b
评估为(x != a) && b
,最终为true && b
1}}或false && b
。然后根据通常的规则将b
强制转换为布尔值(任何 falsy 最终都为false
,其他所有内容都以true
为止)。 ( falsy 值为0
,""
,NaN
,null
,undefined
,当然还有{{1} }。)