0

我是角度的新手,我无法为这个问题找到任何可靠的答案......即使答案可能已经摆在我面前,我只是看不到它。

我有这段 html:

<ul class="wrapper" ng-controller="MyController as vks">
    <li ng-repeat="myvar in vks.vk" class="padding-left" data-myvar-id="{{myvar.id}}">
      <img src="images/someimage.svg" ng-show="{{myvar.id}} == {{myvar.chosen}}" class="some-class">
      <a class="hvr-underline-reveal">{{myvar.name}}</a>
    </li>
  </ul>

这是我的控制器:

  app.controller('MyController',  function() {

    var i = 0;
    var tmp = [];
    for (var key in someObject) {
      if (someObject.hasOwnProperty(key)) {
        var obj = someObject[key];
        if (obj.checked) {
          tmp[i] = {name: obj.name, id: obj.id, chosen: someStaticVar};
          i++;
        }
      }
    }
    this.vk = tmp;

  });

我想专注于第一次加载页面时工作的这部分:

<img ng-show="{{myvar.id}} == {{myvar.chosen}}">

当突然 {{myvar.chosen}}(由静态全局变量设置)从某些外部 javascript 更改时会发生什么?HTML 部分未刷新,并且仍显示特定内容,但应该显示另一个。我怎样才能只重新加载这个控制器?(或做其他事情以使这项工作按预期进行?)

希望这是有道理的...

4

2 回答 2

1

正如@Jodevan 暗示的那样,Angular 不会意识到全局变量的变化。但是,即使它意识到了这种变化,根据你的例子,你的视图仍然不会更新,因为绑定变量的值myvar.chosen没有改变。换句话说,当全局变量更改时,您的 for 循环不会被重新评估。

为了获得您想要的效果,您必须 (1) 知道全局变量何时发生更改,以及 (2) 更新chosen属性的值,以便模型实际更改并触发摘要。

这是一个小提琴,展示了如何使上面的代码工作:naive solution。希望了解上述 2 个要求后,您可以提出适合您的解决方案。

于 2015-10-05T20:15:13.650 回答
1

每当您不直接通过 AngularJS 更改变量时,您必须让 AngularJS 知道该变量已更改。这样做的方法是使用 scope.$apply() 函数。我认为可以帮助您了解幕后发生的事情。

于 2015-10-05T19:40:14.537 回答