当前位置: 代码迷 >> JavaScript >> AngularJS范围不一致
  详细解决方案

AngularJS范围不一致

热度:88   发布时间:2023-06-07 15:53:04.0

好的,这使我的头发掉了。 我们正在与一些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评估为真。 这怎么可能呢? 那肯定是个错误吗?

我认为您在其他地方有一个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'")

通常可以不做而做。 也可以使用

ng-if="normalReadableName"不含三元运算符。

首先,请检查控制台是否没有错误。

如果不是这样,没有代码就很难说,但是我想您在上面的指令创建作用域时遇到了问题。

或者您正在重新分配整个对象,因此手表将恢复为先前分配的对象。 这里描述了类似的问题:

如果它是这些问题之一,则提到的“ controller as”语法可能会有所帮助。

好的,所以我仍然不知道为什么会这样。 但是,如果将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)"工作。

我可能已经解决了我的问题,但是如果有人知道这是怎么发生的,我将不胜感激-我对其余的代码感到非常偏执。