AngularJS范围不一致

时间:2015-08-08 04:54:47

标签: javascript angularjs

好的,这让我把头发撕掉了。我们正在与一些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。这怎么可能呢?当然这是一个错误?

3 个答案:

答案 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"按预期工作。

我可能已经解决了我的问题,但如果有人知道这可能发生了什么我会很感激 - 我现在对我的其余代码非常偏执。