1

応答を見るのに問題があります。

設定として SettingsCtrl があり、これが私の見解です。

<input  type="text" class="form-control" ng-model="settings.test.one"  />
<input  type="text" class="form-control" ng-model="settings.test.second"  />

そして、これは私のコントローラーです:

app.controller('SettingsCtrl', function ($scope, settingsFactory, Test) {
  
  var vm = this;
  
  
  settingsFactory.test().then(function(response){
  
     vm.test = response;
  })
  
  /////  OR
  
  vm.test = Test; // this is from ui-router resolve
  
  
    $scope.$watch(angular.bind('vm', function () {
    return vm.test;
    }), function (newV, oldV) {
    console.log(newV, oldV); 
    });
  
    $scope.$watch(function watch(scope){
     return vm.test;
    }), function handle(newV, oldV) {
    console.log(newV, oldV);
    });
  
    $scope.$watch('vm', function (newVal, oldVal) {
        console.log('newVal, oldVal', newVal, oldVal);
    });
  
  });

私は検索してさまざまな解決策を見つけましたが、どれも機能しません。

**** コントローラーがロードされ、コンソール ログが表示されるのは初めての監視ですが、変更を加えようとするとウォッチャーは何もしません。

私が間違っていることは何ですか?

4

5 に答える 5

8

私が間違っていなければ、コントローラが最初にロードされたときに $watch がヒットしますが、オブジェクト内の何かを変更したときはヒットしません。それが本当なら、これを試してください:

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

デフォルトでは、$watch 関数は参照を監視するため、監視対象のオブジェクトのプロパティのみを変更すると起動されません。最後に追加することtrueで、深い観察が始まり、オブジェクトのプロパティを変更するたびにヒットします。

于 2016-06-15T09:24:11.393 に答える
1

時計の次のコードを試してください。

 $scope.$watch(function(){
    return ctrl.test;
},function(newVal,oldVal){
    console.log(newVal,oldVal);
},true)

ここに作業フィドルがあります

オブジェクトを注意深く監視する必要があります。

このリンク$watch an objectは、これを理解するのに役立ちます。

于 2016-06-15T09:20:47.160 に答える