ここでは単純なタスクですが、間違いについてはわかりません。AngularJSサービスを使用しているコントローラ間でデータを共有し、更新を監視する
マイサービス:
app.factory('Progress', function() {
var data = {
progressPercentageLoaded: 0
};
return {
getProgress: function() {
return data.progressPercentageLoaded;
},
setProgress: function (progress) {
data.progressPercentageLoaded = progress;
}
};
});
私は、ファイルをアップロードされたコントローラが1つ、これは進行値を設定します。
//in my controller
$scope.progressPercentageLoaded = {progress:0};
//a few lines down
function (evt) {
console.log(evt);
$scope.progressPercentageLoaded.progress = evt.loaded;
Progress.setProgress($scope.progressPercentageLoaded.progress);
私の第二のコントローラは単に、変更のためのサービスを見て、ビューを更新するが、私は、アップロードが起こっている確認し、そのevt.loaded
が変化しているにもかかわらず、それがゼロで立ち往生したまま必要があります。前記第二のコントローラである
$scope.progress = 0;
$scope.$watch(function() { return Progress.getProgress(); }, function (newValue, oldValue) {
if (newValue !== oldValue) {
$scope.progress = Math.min(100, parseInt(100 * newValue/$scope.size));
if($scope.progress == 100)
{
$scope.progressModalInstance.close();
window.location.reload();
}
}
});
、$scope.progress
は、第1のコントローラにおけるevt.loaded
の値で更新する必要があり、それはありません。
ご指摘いただきありがとうございます。
EDIT:私もtrue
ように、第3 watch
のパラメータを追加しましたが、それはどちらかの助けにはなりませんでした。
EDIT 2:実際に上記のコードは、私の知る限りに働くは、私はそれが突然、何かが私は答えに起因して、それを編集した後、上記のコードを元に戻すときのような問題を引き起こしていたと考えていますそれが必要なように働いた。これにつきましては申し訳ございません。 $ rootScopeを使用して
コンソールにエラーがありますか?これらのコントローラは互いに継承していますか?私は2つのコントローラーで簡単な例を作成し、ウォッチャーが実行されていることを確認します。しかし、ファイルをアップロードする代わりに、私は 'setProgress'を2秒ごとに呼び出しました:' var p = 0;これはあなたのために機能しますか?setInterval(function(){$ scope. $ apply(function(){Progress.setProgress(++ p);});} –
@FrankModica上記のコードは実際に動作しますが、なぜ以前は動作していなかったのかわかりませんが、私はちょうど上記に戻り、うまく機能します。アップロードイベントが記録されているのを確認しましたが、アップロードの割合は変更されていませんでした。私は確信していませんが、ちょっとしたファイルを試してみましたが、上記のコードを変更せずにビューが適切に更新されました。あなたの時間を無駄にしてしまいました! :( –
問題ありません、うれしいことです:) –