4

ng-bindプロパティが変更されたときに、この小さな角度モジュールがビューを更新できないのはなぜですか?

<body ng-app="bindExample">

<script>
  angular.module('bindExample', [])
    .controller('ExampleController', ['$scope', function($scope) {
      var vm = this;
      vm.name = 'Whirled';
      window.setInterval(function(){ vm.name = 'Jon';}, 5000);
    }]);
</script>

<div ng-controller="ExampleController as vm">
    Hello <span ng-bind="vm.name"></span>!
</div>
</body>

Hello Jon5 秒後、出力がにとどまることによって変化することを期待していますHello Whirled。どうしてこれなの?他に何かする必要がありますか?

4

2 に答える 2

11

$intervalサービスを利用する

window.setInterval の Angular のラッパーはDOCです

$interval(function(){
     vm.name = 'Jon';
}, 1000);

$intervalasを注入することを忘れないでください。

.controller('ExampleController', ['$scope', $interval, function($scope, $interval) { ....

setInterval角度範囲外で使用する場合は、ここで使用する必要があります$interval$intervalスコープに対して実行され、


または使用$scope.$apply()

window.setInterval(function(){
    vm.name = 'Jon';
    $scope.$apply();
}, 5000);

$apply を使用すると、変更をダイジェスト サイクルに統合できます

この答えは役に立ちます

于 2015-02-10T09:01:06.243 に答える
1

はい、$interval を使用するのが解決策です。通常、$scope のメソッド属性でモデルを変更します。したがって、Angular はビューの更新を担当します。ディレクティブ内で jQuery コールバックを使用する場合は、scope.$apply を使用して、angular が何かが発生したことを認識できるようにする必要があります。

于 2015-02-10T09:09:28.357 に答える