$http
JSON ファイルの 1 つを取得し、すべてのコントローラーでデータを使用するための単一の要求を作成しようとしています。
複数のコントローラー間でデータを共有する方法をegghead.ioで見ました。また、このStackOverflowの質問「angular.jsでコントローラー間で変数を共有する」も読みました。
$http
ただし、そこの回答ではモジュールを使用していません。を使用している場合$http
、コントローラーには処理するデータがなく、応答を受信するまでには既に手遅れです。
次に、StackOverflow でメソッド$q.defer
とこの質問を見つけました:「AngularJS はコントローラー間で非同期サービス データを共有します」
そこに投稿されたソリューションは正常に機能しますが、2 つの問題があります。
$http
各コントローラーは、別のコントローラーで既に使用されている同じデータを取得する要求をトリガーします。と、- 受信したデータを操作しようとすると、
then
機能があります。
以下に私のコードを示します。
controllers.js
'use strict';
/* Controllers */
function appInstallerListCtrl($scope, Data) {
$scope.apps = Data;
}
function appInstallerDetailCtrl($scope, $routeParams, Data) {
$scope.appId = $routeParams.appId;
$scope.apps = Data;
console.log($scope.apps); // <-- then function
console.log(Data); // <-- then function with $vv data returned but I can't access it
for (var i in $scope.apps) // <--- no way, baby!
console.log(i);
}
app.js
var app = angular.module('appInstaller', []);
app.factory('Data', function($http, $q) {
var defer = $q.defer();
$http.get('apps.json').then(function(result) {
defer.resolve(result.data.versions.version);
});
return defer.promise;
});
app.config(['$routeProvider', function($routeProvider) {
$routeProvider.
when('/app', {templateUrl: 'partials/app-list.html', controller: appInstallerListCtrl}).
when('/app/:appId', {templateUrl: 'partials/app-detail.html', controller: appInstallerDetailCtrl}).
otherwise({redirectTo: '/app'});
}]);
私が望んでいるのは、アプリを起動すると、$http
リクエストが実行され、レスポンスがすべてのコントローラーでアプリ全体で使用されることです。
ありがとう