当前,我正在使用url like
/order
/order?id=123
/orderitem/123
/orderitem/123/id=456
如果前两个情况有一个控制器,而在最后两个情况下有另一个控制器。每个控制器显示一个实体列表,并(当给出了id
时)的详细信息。
我想切换到更逻辑的模式,例如
/order
/order/123
/order/123/item
/order/123/item/456
无需更改控制器。根据Misko的这一评论,控制器实例没有在"路径"(而不是仅仅是"搜索")上保存。
有没有办法避免重新构造控制器?
我没有使用UI-Router,它会有所帮助吗?
使用UI-Router,您可以定义哪个控制器用于哪个状态:
var myApp = angular.module('app', ['ui.router']);
myApp.config(['$stateProvider', function ($stateProvider) {
$stateProvider.state('order', {
url: '/order/:orderId',
controller: 'OrderCtrl',
templateUrl: 'orders.html'
}).state('order.item', {
url: '/item/:itemId',
templateUrl: 'items.html',
controller: 'ItemsCtrl'
});
}]);
然后,在模板文件中,您可以链接到每个状态(如果需要,则使用输入ID):
<a ui-sref="order">/order</a>
<a ui-sref="order({id:1})">/order/1</a>
<a ui-sref="order({id:1}).item">/order/1/item</a>
<a ui-sref="order({id:1}).item({id:1})">/order/1/item/1</a>