使用 resolve to "select" 对象列表中的单个对象
Using resolve to "select" a single object out of a list of object
我正在尝试找出 "resolve" 给定基于 Angular UI 的路由路径的对象列表的单个对象模型的最佳方法。
例如,我有一个在 /users
实例化的父视图状态,其中包含一个用户列表。当我 select 一个用户时,我希望子视图解析 selected 用户。子视图的路由就像 /users/:userId
我希望子视图基本上是 "wait" 以便父视图获取所有用户,然后继续实例化子控制器并与 ID 相等的用户一起查看到 userId
中的 $stateParams
。我知道这一定是一个典型的用例,但找不到任何其他示例。
这实际上很容易做到,只需使用您父状态中先前解析的用户对象,然后使用它来解析您子状态中的新承诺:
状态:
$stateProvider.state('users', {
'url': '/users',
'controller': 'usersController',
'templateUrl': 'users.html',
'resolve': {
'users': [
'$http',
function ($http) {
return $http.get('users.json');
}
]
}
});
$stateProvider.state('user', {
'parent': 'users',
'url': '/:id',
'controller': 'userController',
'templateUrl': 'user.html',
'resolve': {
'user': [
'$q',
'$stateParams',
'users',
function ($q, $stateParams, users) {
var deferred = $q.defer();
users.data.forEach(function (user) {
if ($stateParams.id == user.id) {
deferred.resolve(user);
}
});
return deferred.promise;
}
]
}
});
控制器:
angular.module('app').controller('usersController', [
'$scope',
'users',
function ($scope, users) {
$scope.users = users.data;
}
]);
angular.module('app').controller('userController', [
'$scope',
'user',
function ($scope, user) {
$scope.user = user;
}
]);
这是一个关于 Plunker 的工作示例:http://plnkr.co/edit/sKkLdnWkjdilsQ3IvU6i?p=preview
我正在尝试找出 "resolve" 给定基于 Angular UI 的路由路径的对象列表的单个对象模型的最佳方法。
例如,我有一个在 /users
实例化的父视图状态,其中包含一个用户列表。当我 select 一个用户时,我希望子视图解析 selected 用户。子视图的路由就像 /users/:userId
我希望子视图基本上是 "wait" 以便父视图获取所有用户,然后继续实例化子控制器并与 ID 相等的用户一起查看到 userId
中的 $stateParams
。我知道这一定是一个典型的用例,但找不到任何其他示例。
这实际上很容易做到,只需使用您父状态中先前解析的用户对象,然后使用它来解析您子状态中的新承诺:
状态:
$stateProvider.state('users', {
'url': '/users',
'controller': 'usersController',
'templateUrl': 'users.html',
'resolve': {
'users': [
'$http',
function ($http) {
return $http.get('users.json');
}
]
}
});
$stateProvider.state('user', {
'parent': 'users',
'url': '/:id',
'controller': 'userController',
'templateUrl': 'user.html',
'resolve': {
'user': [
'$q',
'$stateParams',
'users',
function ($q, $stateParams, users) {
var deferred = $q.defer();
users.data.forEach(function (user) {
if ($stateParams.id == user.id) {
deferred.resolve(user);
}
});
return deferred.promise;
}
]
}
});
控制器:
angular.module('app').controller('usersController', [
'$scope',
'users',
function ($scope, users) {
$scope.users = users.data;
}
]);
angular.module('app').controller('userController', [
'$scope',
'user',
function ($scope, user) {
$scope.user = user;
}
]);
这是一个关于 Plunker 的工作示例:http://plnkr.co/edit/sKkLdnWkjdilsQ3IvU6i?p=preview