私はangularjsをかなり使い慣れていて、いくつか質問したいと思います。 私はサーバーからフォームオブジェクトを取得する必要があるプロジェクトに取り組んでいます。フォームは、多くのレイヤーを持つ複雑なツリーオブジェクトであり、対応するオブジェクトにバインドするために4つの異なるコンポーネント/タブを作成しました。データを取得するためのサービスを作成しました。私はどちらかの "キャッシュを!" の印刷されたAngularjs 1.5.xはコンポーネント間のサービスとデータを共有します
angular.module('page1Summary', ['formService']).component('page1Summary', {
templateUrl: 'page1-summary/page1-summary.template.html',
controller: ['FormService', function Page1SummaryController(FormService) {
var ctrl = this;
// ******* Init Params Start *********** //
this.$onInit = function() {
// init value when object ready
FormService.getForm()
.then(
/* on success */
function successCallback(data) {
console.log("page1-summary init");
ctrl.form = data;
console.log("page1-summary got the data");
},
/* on error */
function errorCallback(data)
{
console.log("failed to get form");
}
);
}
/* other stuff here */
}
:
angular.module('myService', ['restangular'])
.factory('FormService', ['Restangular', '$q', function(Restangular, $q) {
function FormService() {
var self = this;
self.form = null;
self.getForm = function getForm(id)
{
var deferred = $q.defer();
if (self.form !== null)
{
deferred.resolve(self.form);
console.log("Cache!");
}
else {
Restangular.one('form', id).get()
.then(function successCallback(response)
{
self.form = response;
deferred.resolve(response);
console.log("from server!");
}, function errorCallback(response) {
deferred.reject(response);
console.log("error, cannot resolve object");
});
}
return deferred.promise;
}
return new FormService();
}])
});
は、その後、私は以下の同様の設定ですべての私のコンポーネントを持っていましたgetFormサービスの "from server"のいずれかです。サーバーやメモリからデータを引き出しているかどうかを調べることができます。ただし、リフレッシュするたびに結果が異なります。ときどき、データはサービスのローカル変数に保存され、キャッシュされますが、時には自分のページの一部が "サーバーから"データを取得します。
何が問題になるのですか?私はサービスがサーバーから初めて得られると考えましたが、そうでないようです。
誰かが私を助けてくれて、私が間違ったことを指摘できますか?
ありがとうございます!