角度のあるパターンにはエレガントなソリューションが必要だと確信していますが、それを見ることはできません。
問題:
- すべてのデータは、アプリケーションの開始時に一括してロードされます。
/#/users/13
ユーザーがURL を入力して特定のビュー ( など) を要求する- 問題: データがまだロードされていない
サーバー
私のバックエンド サーバーは、JSON として一度にすべてのテーブルから利用可能なすべてのデータを返します (それほど多くはありません)。
{users: [...], groups: [...], stuff: [...], ...}
サービス
メソッドを使用してAngularサービスにラップしましたupdate()
。これは、成功すると、応答の要素を に配置します。これは$rootScope
、アプリケーション全体が取り組んでいるものだからです。
.success(function (data) {
$rootScope.users = data.users;
$rootScope.groups = data.groups;
...
}
アプリが起動すると、mainController で update メソッドが呼び出されます。
コントローラー/ビュー
のような特定のユーザー向けのビューを作成すると/users/:id
、アプリケーション内をナビゲートする際にすべてが正常に機能します。ここまでは順調ですね。
のようなビューへのディープ リンクを使用してアプリケーションを起動すると#/users/13
、データがまだ読み込まれていないため、コントローラーは通常どおりデータをリンクできず、エラーが発生します。
$scope.user = $scope.users[$routeParams.id];
アイデア
これを解決するために私がしなければならなかったすべてのアイデアは、何らかの形で問題があります。
- コントローラーで定義されていないものに反応
$scope.users
することでエラーを回避できますが、データがそこにある場合、どのようにビューをリロードしますか? resolve
そのサービス結果の promise に依存するルートのセクションを設定すると、データが既に読み込まれている場合でも、ルートが使用されるたびにリロードされます (データはアプリの開始時にのみ読み込まれる必要があります)。- データ部分ごとにサービスを設定し、各結果に対して promise を使用すると、サーバーからデータを何度もフェッチすることになります。
- 「データがロードされました」という明示的なフラグを設定し、その状態に基づいて物事を変更することは、私には完全に間違っているようです
- フェッチされたデータの大きな塊は 1 つしかないため、promise を操作すると、一般的に頭痛の種になりますが、その単一の要素を参照したいと考えています。
ですから、そのようなセットアップの「Angular way」が欠けているだけだと思います(おそらく盲目です)。