在Angular中重新加载控制器

时间:2015-10-05 19:14:31

标签: angularjs angular-controller

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

我有这段HT​​ML:

<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}}(从静态全局var设置)从某些外部javascript发生变化时会发生什么? HTML部分未刷新,并且仍然显示该特定部分,但它应该是另一个显示的部分。 我怎样才能重新加载这个控制器? (或者做一些其他事情来使这项工作按预期进行?)

希望这是有道理的......

2 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:1)

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

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

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