2 つのコントローラーと 1 つの工場があります。ファクトリとコントローラーをメインコントローラーに挿入しています。以下のコードスニペットは次のとおりです。
工場:
app.factory('TallyFactory', function(){
return {
correct: 0,
incorrect: 0
};
});
TallyFactory を受け入れる TallyController:
app.controller('TallyController', function($scope, TallyFactory){
$scope.$watch('scores', function(newValue, oldValue){
console.info('changed!');
console.log('Old: ' + JSON.stringify(oldValue));
console.log('New: ' + JSON.stringify(newValue));
});
$scope.scores = TallyFactory;
});
TallyFactory を受け入れ、TallyFactory オブジェクトの値を変更する MainController:
app.controller('MainController', function ($scope,TallyFactory) {
$scope.addTally = function(){
TallyFactory.correct++;
}
});
私の TallyController (2 番目のスニペット) に注目してください。$scope にウォッチャーを追加し、「スコア」がいつ変化するかをリッスンしています。
MainController から "addTally" 関数を ng-click で実行すると、Factory オブジェクト (TallyFactory) の値が変更されます。変更があり、特に TallyController ($scope.scores) にウォッチャーを作成したので、ダイジェスト サイクルがトリガーされ、コンソールが TallyFactory の新しい値で更新されるべきではありませんか?
また、私の TallyController は MainController にネストされておらず、互いに分離されています (それが問題かどうかは 100% わかりません)。
TallyFactory が値を変更したため、ダイジェスト ループがトリガーされない理由がわかりません。