コントローラー間でデータを共有するためにサービスを使用しています。ただし、サービスは、新しいリクエストを行った場合でも、キャッシュされたデータを使用して promise を返しています。インスタンスが作成される場所に応じて、defer
ライブ データが返されるが双方向バインディングが壊れるか、双方向バインディングが機能するがキャッシュされたデータが返されます。
キャッシュされたデータで promise が返されるのを防ぎ、双方向バインディングを維持するにはどうすればよいでしょうか?
ケースを説明するためにプランカーを用意しました: http://plnkr.co/edit/SyBvUu?p=previewそして完全を期すために、ここにトラブルメイキングサービスがあります:
app.service('myService', function($http, $q) {
// When instancing deferred here two way binding works but cached data is returned
var deferred = $q.defer();
this.get = function(userId) {
// When instancing deferred here two way binding breaks but live data is returned
//var deferred = $q.defer();
console.log('Fetch data again using id ', userId);
var url = userId + '.json';
$http.get(url, {timeout: 30000, cache: false})
.success(function(data, status, headers, config) {
deferred.resolve(data, status, headers, config);
})
.error(function(data, status, headers, config) {
deferred.reject(data, status, headers, config);
});
return deferred.promise;
};
});
更新: 問題は、データがキャッシュされたことではなく、データを共有する方法を理解していなかったことと、共有データをプリミティブにすることができないことでした。以下の私自身の答えを参照してください。