目前,我正在使用像
这样的网址/order
/order?id=123
/orderitem/123
/orderitem/123/id=456
前两个案例中有一个控制器,后两个案例中有一个控制器。每个控制器显示一个实体列表,并且可选地(当给出id
时)所选实体的详细信息。
我想切换到更合理的架构,比如
/order
/order/123
/order/123/item
/order/123/item/456
不更改控制器。根据此comment by misko,控制器实例不会在“路径”(而不仅仅是“搜索”)更改中保留。
有没有办法避免重新安置控制器?
我没有使用ui-router,它有帮助吗?
答案 0 :(得分:0)
使用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>