角度ui-router stateParams持续存在

时间:2014-08-04 20:47:10

标签: javascript angularjs angular-ui-router

我正在使用ui-router作为我的SPA,但我遇到了各州的问题。我的州设置如下

$stateProvider.state('product', {
    url: '/product/:category/:product',
    templateUrl: 'src/app/product/product.tpl.html',
    controller: 'ProductCtrl'
});

但我遇到的问题是,当我去/ product / cat-one时,我的控制器会处理没有产品设置的事实,那么当我再次转到/ product / cat-one / product-one我的控制器时处理存在产品的事实,一切都运作良好。

我面临的问题是,如果我从/ product / cat-one / product-one转到/ product / cat-two:产品仍然存在且url最终成为/ product / cat-two / product-one

有人能指出我正确的方向吗?

这是我的控制器供参考:

.controller( 'ProductCtrl', function ( $scope, $stateParams, ProductService ) {
  $scope.categoryId  = $stateParams.category;
  $scope.productId   = $stateParams.product;
  $scope.isProduct   = false;

  if ($scope.productId) {
      $scope.isProduct = true;
      $scope.item = ProductService.getProduct($scope.categoryId);
  } else {
      $scope.item = ProductService.getCategory($scope.categoryId);
  }
})

提前致谢

1 个答案:

答案 0 :(得分:1)

看起来您应该按层次处理此路线设置:

$stateProvider
    .state('category', { url: '/product/:category', templateUrl: 'src/app/product/product.tpl.html', controller: 'ProductCtrl' })
    .state('category.product', { url: '/:product', templateUrl: 'src/app/product/product.tpl.html', controller: 'ProductCtrl' });

现在我不确定您的要求,但也可能有另一个父状态('/ product')抽象出类别和产品的重复使用功能。


好的,所以看起来要求是展示单个产品和单个类别。我建议你有机会阅读ui-router文档。要获得所需的功能,您应该为类别和产品使用单独的模板和控制器。

如果要完全用产品页面替换类别页面,那么状态不应该是分层的,但是如果它们借用了重用的功能,那么可以将两种类型的父状态设置为可以实现这种可重用性的类型(但我会更多可能在这里使用服务。)

因此得到的路线定义如下:

$stateProvider
    .state('category', { url: '/product/:category', templateUrl: 'src/app/product/category.tpl.html', controller: 'CategoryCtrl' })
    .state('product', { url: '/product/:category/:product', templateUrl: 'src/app/product/product.tpl.html', controller: 'ProductCtrl' });

请注意,您现在需要每种类型的模板和控制器。