ng-if语句有一种方式而不是另一种方式,为什么?

时间:2016-02-02 18:32:40

标签: javascript angularjs conditional

当我写这样的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"

我做错了什么?如果我能帮忙的话,我不想重复自己。

2 个答案:

答案 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 && bx != a || b一样,你必须拼写它出来了:x != a && x != bx != a || x != b。这就是它的原因。

您没有收到错误的唯一原因是JavaScript具有类型强制,因此x != a && b评估为(x != a) && b,最终为true && b 1}}或false && b。然后根据通常的规则将b强制转换为布尔值(任何 falsy 最终都为false,其他所有内容都以true为止)。 ( falsy 值为0""NaNnullundefined,当然还有{{1} }。)