ng-if 语句以一种方式工作而不是另一种方式,为什么?
ng-if statement works one way but not another, why?
当我这样写我的 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"
我做错了什么?如果可以的话,我不想重复自己。
你做错的不是重复你自己。 :-)
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
。就是这样。
你没有得到 error 的唯一原因是 JavaScript 有类型强制,所以 x != a && b
计算为 (x != a) && b
,最终成为 true && b
或 false && b
。 b
然后根据通常的规则被强制为布尔值(任何 falsy 最终成为 false
,其他一切最终成为 true
)。 (falsy 值是 0
、""
、NaN
、null
、undefined
,当然,false
.)
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
然后将 &&
的结果与最后一个数字进行比较。有效的;几乎肯定不是你想要的。
几乎肯定应该将此逻辑移出 ng-if
,因为它几乎无法阅读。
当我这样写我的 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"
我做错了什么?如果可以的话,我不想重复自己。
你做错的不是重复你自己。 :-)
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
。就是这样。
你没有得到 error 的唯一原因是 JavaScript 有类型强制,所以 x != a && b
计算为 (x != a) && b
,最终成为 true && b
或 false && b
。 b
然后根据通常的规则被强制为布尔值(任何 falsy 最终成为 false
,其他一切最终成为 true
)。 (falsy 值是 0
、""
、NaN
、null
、undefined
,当然,false
.)
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
然后将 &&
的结果与最后一个数字进行比较。有效的;几乎肯定不是你想要的。
几乎肯定应该将此逻辑移出 ng-if
,因为它几乎无法阅读。