Angular ng-show 处理未定义的变量
Angular ng-show handling undefined variables
我有两个根据配置的变量显示的指令。
这在视觉上可行,但在验收测试期间我发现了一个问题。我试图断言如果 <settingElement>
没有被点击(配置 var selected
),这两个指令都不会显示。 <directiveA>
的测试通过了,但 <directiveB>
的测试失败了,这让我有点困惑。
代码示例如下:
<settingElement ng-click="selected = trueOrFalse()"></settingElement>
<directiveA ng-show="selected"></directiveA>
<directiveB ng-show="!selected"></directiveB>
成功!至少在某种程度上,代码在视觉上是有效的,所以我没有测试 isDisplayed
,而是简单地断言高度和宽度都是 0...不理想但有效。
可能更好的方法是在两个元素的父元素中定义 selected
,例如:
<div ng-init="selected = false;">
<settingElement ng-click="selected = true"></settingElement>
<directiveA ng-show="selected"></directiveA>
<directiveB ng-show="!selected"></directiveB>
</div>
另一个"shorter workaround"会是
<settingElement ng-click="selected = true"></settingElement>
<directiveA ng-show="!!selected"></directiveA>
<directiveB ng-show="!selected"></directiveB>
可能是因为表达式触发了未定义的值
试试 ng-if ="selected" or ng-show="selected==true"
我有两个根据配置的变量显示的指令。
这在视觉上可行,但在验收测试期间我发现了一个问题。我试图断言如果 <settingElement>
没有被点击(配置 var selected
),这两个指令都不会显示。 <directiveA>
的测试通过了,但 <directiveB>
的测试失败了,这让我有点困惑。
代码示例如下:
<settingElement ng-click="selected = trueOrFalse()"></settingElement>
<directiveA ng-show="selected"></directiveA>
<directiveB ng-show="!selected"></directiveB>
成功!至少在某种程度上,代码在视觉上是有效的,所以我没有测试 isDisplayed
,而是简单地断言高度和宽度都是 0...不理想但有效。
可能更好的方法是在两个元素的父元素中定义 selected
,例如:
<div ng-init="selected = false;">
<settingElement ng-click="selected = true"></settingElement>
<directiveA ng-show="selected"></directiveA>
<directiveB ng-show="!selected"></directiveB>
</div>
另一个"shorter workaround"会是
<settingElement ng-click="selected = true"></settingElement>
<directiveA ng-show="!!selected"></directiveA>
<directiveB ng-show="!selected"></directiveB>
可能是因为表达式触发了未定义的值
试试 ng-if ="selected" or ng-show="selected==true"