我想弄清楚使用UI路由器将数据从一个控制器传递到另一个控制器的最佳方式。我有两个视图填充了来自两个不同API的数据。视图1包含一个ng-repeater,其中包含来自API端点的餐厅列表(返回名称,图像和ID)。视图2包含来自另一个API端点的餐厅信息(返回说明,菜单和ID)。用户点击View1列表中的一家餐厅,并通过传递餐厅ID,在View 2中打开该餐厅,并带有说明等。问题是视图2中的API端点不包含餐厅名称和图像。因此,为了显示我必须通过他们在这样的链接名称和形象......使用UI将路由器的数据从一个视图传递到另一个路由器
<a ui-sref="restaurantProfile({id: restaurant.Id, name: restaurant.Name, image: restaurant.Logo[0].StandardResolutionURL})">{{restaurant.Name}}</a>
然后由控制器handeled视图2这样
(function() {
'use strict';
angular.module('components.restaurantProfile', [])
.controller('RestaurantProfileController', function(resolvedRestaurantId, Restaurants, $stateParams) {
var vm = this;
vm.name = $stateParams.name;
vm.image = $stateParams.image;
Restaurants.findByRestaurantId(resolvedRestaurantId)
.then(function(result) {
vm.restaurant = result
})
})
.config(function($stateProvider) {
$stateProvider
.state('restaurantProfile', {
url: '/restaurant/:id',
templateUrl: 'components/restaurant-profile/View2.html',
controller: 'RestaurantProfileController as pc',
params: {
name: '',
image: ''
},
resolve: {
resolvedRestaurantId: function($stateParams) {
return $stateParams.id;
}
}
});
});
})();
这作品,但它感觉不对。特别是如果我需要传递更多参数,则ui-sref链接将变得非常长。是否有更好的方法将名称/图像从View1中选定的餐厅传递到View2?是否有可能将选定的餐馆对象从中继器传递到另一个视图?
另外,如果有帮助,服务称为Restaurants
将其注入到RestaurantProfileController
上面还与视图1控制器共享。我可以通过它吗?
很长一段文章的道歉 - 我想确保我很清楚。谢谢。
感谢您的回答。我宁愿不做另一个API调用,因为我想将服务器请求保持在最低限度。如果使用$ stateParams不是这个的最佳选择,我将创建一个服务来共享该对象。 –
@Josethehose - 多个服务器请求(延迟加载)与一次性加载全部细节(贪婪加载)取决于您的业务需求。假设您已经列出了25家酒店,并且您确定用户会查看这些酒店中至少一半的详细信息,然后获取整个详细信息(贪婪加载)是有道理的。但另一方面,如果用户访问酒店的详细信息的机会较低,那么我会进行延迟加载。只是一个想法! – Developer
酷 - 再次感谢。需要思考的东西 –