0

私はAngularの初心者であり、この質問に対する確固たる答えを見つけることができませんでした...答えが目の前にあったとしても、それを見ることができませんでした。

私はこの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 に答える