如何将已解析的数据分配到控制器代码中的状态数据?
以下代码失败
.state('restaurant', {
abstract: true,
url: '/:restaurantId/:restaurantName',
resolve: {
restaurant: ['RestaurantFactory', '$stateParams', '$state', function (RestaurantFactory, $stateParams, $state) {
return RestaurantFactory.query({ restaurantId: $stateParams.restaurantId });
}]
},
data: {
restaurant: resolve.restaurant // fails
},
views: {
'content@': {
templateUrl: 'app/modules/restaurant/restaurant.html',
controllerAs: 'RestCtrl',
controller: ['restaurant', 'RestaurantFactory', 'AppLib', 'Page', '$scope', '$state', function (restaurant, RestaurantFactory, AppLib, Page, $scope, $state) {
var vm = this;
// public properties
vm.AppLib = AppLib;
vm.Page = Page;
vm.restaurant = restaurant;
$state.restaurant = restaurant;
$scope.$on('Restaurant_Changed', function (event, data) { if (data.id === vm.restaurant.id) { vm.restaurant = data; $state.restaurant = data; } });
}]
}
}
})
我需要这个功能的原因是其中一个子状态覆盖了内容@view(带来了自己的整个内容),因此如果我直接访问子状态页面,父节点的控制器永远不会被触发。有没有办法实现这一点,因为我想使用父状态URL和分享数据到子/孙子国家的能力
有什么想法吗?
解决方案
非常感谢杨力给我这个建议。这是我解决它的方式
resolve: {
restaurant: ['RestaurantFactory', '$stateParams', '$state', '$q', function (RestaurantFactory, $stateParams, $state, $q) {
var deferred = $q.defer();
RestaurantFactory.query({ restaurantId: $stateParams.restaurantId })
.then(function (data) {
$state.restaurant = data;
deferred.resolve($state.restaurant);
})
.then(function (data) {
deferred.reject(data);
})
return deferred.promise;
}],
},