在路径更改时保留控制器

时间:2016-11-29 15:56:51

标签: angularjs navigation

目前,我正在使用像

这样的网址
/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,它有帮助吗?

1 个答案:

答案 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>