私は昨日間違った質問をしました (そしてうまくいく良い答えを得ました) が、それは私が必要としていたものではないことに気づきました. JSON データを (できれば 1 回) 取得して保存し、サービス全体でアクセスできる必要があります。私が抱えている課題は、JSON を使用してアプリ/コントローラーに渡すことについて話しているすべての例を見つけることができるということですが、この場合はそれを取得して確認する必要があり、モジュール/サービスが何をするかを指示します。
たとえば、アプリとコントローラーがあり、次のようなモジュールがあります (これは疑似コードであり、実行するためのものではありません)。
angular.module("myModule")
.service("myService1", function($q, myService2, $http) {
this.getModel = function() {
return {
title: "My Title",
desc: "My Desc"
options: function () {
if (condition A)
return "option1";
else
return "option2";
}
};
};
})
.service("myService2", function($q, $http) {
this.getCfgInfo = function () {
var defer = $q.defer();
$http.get("my/json/url").then(function(response) {
defer.resolve(response.data);
});
return defer.promise;
};
})
この例では、JSON を取得し、それを myService1 内でリテラル値 (タイトル、説明) と条件 (if 内の条件 A) の両方に使用したいと考えています。
私はこのようなことができることを知っています (昨日手伝ってくれたJoelに感謝します):
service("myService1", function($q, myService2, $http) {
// get a promise object for the configuration info
var cfgProm = rtDataMapper.getCfgInfo()
this.getModel = function() {
return {
title: cfgProm.then(function(response) {
return response.JSON_NAME;
}),
タイトルがモデルにマップされており、watch() があるので問題なく動作しますが、サービス自体の中で JSON を条件として取得、保存、および使用する方法に困惑しています (つまりif (condition A) where condition A is come from the JSON. これらを .then() でラップしようとしても意味がないように思われるか、少なくともその方法がわかりません。
私はAngularが初めてで、私たちに残されたコードを変更しようとしています。JSON を取得するためだけに myService2 は必要ないと思います。誰かが私を正しい方向に向けるのを手伝ってくれますか? オンラインで数時間を費やしましたが、関連する参照/例が見つからないようです。
ありがとう