私のプロジェクトではresolve
、Angular UI router
.
基本的には親状態の初期化時に、サーバーからデータを取得して に格納しますlistItem
。を使用してサーバーにリクエストを行うロジックを分離し、service
それを構成に挿入することもできます。
親状態のどこかをクリックしId
て、クエリ文字列として新しい子状態を開くとします。次に、これを取得id
し$stateParams
てフィルター処理し、正しい項目を見つけますlistItem
( Underscoreを使用)
route.js
.state('parent', {
url: '/parent',
templateUrl: 'parent-template.html',
controller: 'ParentController',
resolve: {
listItem: ['$http', '$stateParams', function ($http, $stateParams) {
return $http.get({'/GetListItem'}).then(function successCallback(response) {
return response.data;
}, function errorCallback(response) {
return [];
});
}]
}
})
.state('parent.child', {
url: '/{itemId}',
templateUrl: 'child-template.html',
controller: 'ChildController',
resolve: {
item: ['$stateParams', 'listItem', function ($stateParams, bundles) {
return _.findWhere(listItem, { Id: $stateParams.itemId });
}]
}
})
listItem
次に、以下のようにコントローラーにアクセスしてコントローラーにアクセスできますitem
。
parent.controller.js
(function () {
function ParentController($scope, listItem) {
}
ParentController.$inject = ['$scope', 'listItem']
angular.module('app').controller('parentController', ParentController)
})()
child.controller.js
(function () {
function ChildController($scope, item) {
}
ChildController.$inject = ['$scope', 'item']
angular.module('app').controller('childController', ChildController)
})()