Angular ui-router如果特定的子url,则为params

时间:2016-04-16 18:19:58

标签: angularjs angular-ui-router

有没有办法在命中特定状态时定义$ stateParams-values。 我有一个父状态,有2个孩子都使用相同的视图:

.state('customer {
    url: '/customer',
    templateUrl: '/customer/overview/customer.overview.html',
    resolve: customerResolve,
    controller: 'customer.overview.controller',
    params: { type: null }
})

.state('customer.a' {
    url: '/a',
    templateUrl: '/customer/overview/customer.overview.html',
    resolve: customerResolve,
    controller: 'customer.overview.controller',
    params: { type: 'a' }
})

.state('customer.b' {
    url: '/b',
    templateUrl: '/customer/overview/customer.overview.html',
    resolve: customerResolve,
    controller: 'customer.overview.controller',
    params: { type: 'b'}
})

他们都有同样的决心:

var customerResolve = {

    resolvedCustomers: ['$state', '$stateParams', function ($state, $stateParams) {

        if ($stateParams.type == "a")
        {
            //resolve data
        }
        else if ($stateParams.status == "b") {

            //resolve data
        }
    }]
}

当我导航到 ... / customer / a 时,我确实达到了我的决心,但我希望$stateParams.typea,但它是null ... / customer / b 也是如此。

值为null,因为父状态是以这种方式定义的。我无法删除parent-params,因为这将在解析中完全删除我的type-parameter。我只是想在我的父状态中定义type-parameter,但是不应用像'null'这样的值,我希望我的子状态填充该类型参数。

我可以使用ui-sref来实现它:<a ui-sref="customer({type: 'a'})">Customer type A</a>

但是我想通过导航到url来设置type-parameter。如果需要更清晰,我可以提供一个plunkr。

2 个答案:

答案 0 :(得分:0)

我最近这样做的方式

simple_form

然后在您的控制器中

myApp.config( function($routeProvider) {
      when('/user/:userID', {
        templateUrl: 'app/partials/user.html',
        controller: 'userPageCtrl'
      })
  });

myApp.controller('userPageCtrl', ['$scope','$routeParams', function($scope, $routeParams) { console.log("user controller"); console.log("route param", $routeParams); }); 将拥有userID,并且$routeParams/user/2等会移动网址

编辑:我认为这是以类似的方式完成的,即使用/user/3语法,以角度ui

答案 1 :(得分:0)

理想情况下,您的父母和所有孩子都必须拥有相同templatescontrollers的配置。但是,如果您真的需要您提到的内容,可以使用状态配置中提供的data属性,如here所述,并使用$state.current.data

进行访问

我创建了plunkr使用它来演示您的用例