好吧,在我的项目中,我使用resolve
.Angular UI router
基本上,在初始化父状态时,它将从服务器检索数据并将其存储到listItem
. 您还可以使用 a 分离向服务器发出请求的逻辑service
并将其注入到配置中。
假设我单击父状态中的某个位置Id
以使用查询字符串打开新的子状态。然后我们得到这个id
并$stateParams
过滤以找到正确的项目listItem
(使用下划线)
路由.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
在控制器中。
父控制器.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)
})()