问题描述
好的,这使我的头发掉了。 我们正在与一些ATS集成在一起,因此我发出了一些查询,并在收到响应时在范围内设置了一些变量。 我将变量设置在$ scope。$ apply()内,因此它们应该正确更新-直到最近,它们似乎还是存在的。 调试一两个小时后,我创建了一行来表达问题的怪异之处。 考虑以下代码:
<div ng-show="aR.g" ng-bind="aR.g ? 'g yes' : 'g no'"></div>
请注意,如果显示,则文本应为“ g yes”,如果隐藏,则应为“ g no”。 但是,该元素是隐藏的,在对其进行检查时,我发现了以下内容:
<div ng-show="aR.g" ng-bind="aR.g ? 'g yes' : 'g no'" class="ng-binding ng-hide">g yes</div>
这意味着ng-show将aR.g评估为假,而ng-bind将aR.g评估为真。 这怎么可能呢? 那肯定是个错误吗?
1楼
我认为您在其他地方有一个bug,使这部分代码无法使用。 我为你制作了 。
控制器:
$scope.aR = {
g: true
}
视图:
div(ng-app="app")
div(ng-controller="TestController")
div(ng-if="aR.g" ng-bind="aR.g ? 'g yes' : 'g no'")
2楼
通常可以不做而做。 也可以使用
ng-if="normalReadableName"
不含三元运算符。
首先,请检查控制台是否没有错误。
如果不是这样,没有代码就很难说,但是我想您在上面的指令创建作用域时遇到了问题。
或者您正在重新分配整个对象,因此手表将恢复为先前分配的对象。 这里描述了类似的问题:
如果它是这些问题之一,则提到的“ controller as”语法可能会有所帮助。
3楼
好的,所以我仍然不知道为什么会这样。
但是,如果将ng-if="aR.g"
替换为ng-if="aR.g ? true : false"
,它将按ng-if="aR.g ? true : false"
工作。
令人恐惧的是,我现在不知道我的逻辑的哪些部分将按其应有的作用工作-严格地说,这不是表达式的简单性或其他任何问题,因为发生故障的实际部分是ng-if="X && Y != 'blah' && Z"
Z ng-if="X && Y != 'blah' && Z"
。
由于某些原因, ng-if="X && Y != 'blah' && (Z ? true : false)"
工作。
我可能已经解决了我的问题,但是如果有人知道这是怎么发生的,我将不胜感激-我对其余的代码感到非常偏执。