好的,这让我把头发撕掉了。我们正在与一些ATS集成,所以我发出一些查询,并在收到响应时我在范围内设置了一些变量。我在$ scope。$ apply()中设置了变量,所以它们应该正确更新 - 看起来它们似乎是WERE,直到最近。经过一两个小时的调试后,我创建了一条线来表达问题的怪异性。请考虑以下代码:
<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评估为false,但ng-bind将aR.g评估为true。这怎么可能呢?当然这是一个错误?
答案 0 :(得分:1)
我认为你在其他地方有一个bug,让这部分代码粉碎。我为您创建了pen。
控制器:
$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'")
答案 1 :(得分:1)
有可能无需申请即可。也可以使用
没有三元运算符的 ng-if="normalReadableName"
。
如果没有任何错误,请先查看控制台。
如果没有,没有代码很难说,但我认为当上面的指令创建范围时你面临问题。 https://github.com/angular/angular.js/wiki/Understanding-Scopes
或者您正在重新分配整个对象,因此观察会引用之前指定的对象。此处描述的类似问题:Update bootstrap angularjs table with real time data on the fly using ng-repeat
语法“控制器为”如果是这些问题之一,可能会有所帮助。
答案 2 :(得分:0)
好的,所以我仍然不知道为什么会这样。但是,如果您将ng-if="aR.g"
替换为ng-if="aR.g ? true : false"
,则可以正常工作。这是令人恐惧的,因为我现在不知道我的逻辑的哪些部分会起作用 - 这不仅仅是表达式或任何事情的简单问题,因为失败的实际部分就像是{{1 }}。出于某种原因,ng-if="X && Y != 'blah' && Z"
按预期工作。
我可能已经解决了我的问题,但如果有人知道这可能发生了什么我会很感激 - 我现在对我的其余代码非常偏执。