0

ここに私のapp.jsがあります

var MyApp = angular.module('MyApp', []);

MyApp.controller('MyController', ['$scope', function($scope){

  $scope.watchMe = 'hey';

  $scope.init = function() {
    setTimeout(function() {
      $scope.watchMe = 'changed!';
    }, 3000)

  };

  $scope.$watch('watchMe', function() {
     console.log($scope.watchMe)
  });

}]);

3秒後、次のように表示されると思いました:

'changed!'

私のコンソールで。

代わりに、次のように表示されます。

'hey'

次のように、index.html で init() 関数を呼び出します。

<div ng-controller="MyController"  ng-init="init()">

この出力が表示されるのはなぜですか?

4

1 に答える 1

1
var MyApp = angular.module('MyApp', []);

MyApp.controller('MyController', ['$scope', '$timeout', function($scope, $timeout){

  $scope.watchMe = 'hey';

  $scope.init = function() {
  $timeout(function() {
      $scope.watchMe = 'changed!';
  }, 500);

  };

  $scope.$watch('watchMe', function(newVal, oldVal) {
     console.log(newVal);
  });

}]);

setTimeout メソッドを使用しています。Angular はそのイベントを監視していません。angular の $timeout サービスを使用すると、期待される結果を確認できます。

詳細については、angular ダイジェスト ループとダーティ チェックについてお読みください。

于 2016-02-15T06:12:55.930 に答える