我是角色的新手,我无法为这个问题找到任何可靠的答案......即使答案可能在我面前,我也看不到它。
我有这段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}}(从静态全局var设置)从某些外部javascript发生变化时会发生什么? HTML部分未刷新,并且仍然显示该特定部分,但它应该是另一个显示的部分。 我怎样才能重新加载这个控制器? (或者做一些其他事情来使这项工作按预期进行?)
希望这是有道理的......
答案 0 :(得分:1)
每当您不直接通过AngularJS更改变量时,您必须让AngularJS知道此变量已更改。这样做的方法是使用范围。$ apply()函数。 我认为this可以帮助您了解幕后发生的事情。
答案 1 :(得分:1)
正如@Jodevan暗示的那样,Angular不会意识到全局变量的变化。但即使根据您的示例了解了该更改,您的视图仍然不会更新,因为绑定变量myvar.chosen
的值不会更改。换句话说,当全局变量发生变化时,您的for循环不会被重新评估。
要获得所需的效果,您必须(1)知道全局变量何时发生变化,以及(2)更新chosen
属性的值,以便模型实际更改并触发摘要。
这是一个小提示,展示了如何使上面的代码起作用:naive solution。希望了解上述2个要求,您可以找到适合您的解决方案。