在ui-router链接到具有不同params的相同状态时,不执行任何操作

时间:2016-01-05 12:36:25

标签: javascript angularjs angular-ui-router

我有一个菜单,其中有几个链接都使用相同的ui-router状态。

它们都有不同的参数和不同的URL。

在处于不同状态时,所有这些链接都有效。

单击一个并进入“范围”状态后,现在没有任何链接可用。

HTML:

<a ui-sref="range({type: 'foo'})" class="dropdown-item text">
    Product Foo
</a>
<a ui-sref="range({type: 'bar'})" class="dropdown-item text">
    Product Bar
</a>

州定义:

var _range = [ 'foo', 'bar' ];

  module.config([ '$stateProvider', function($stateProvider) {
    var rangeState = {
      parent: 'layout',
      url: '/{type:' + _range.join('|') + '}-doors',
      data: {
        range: _range
      },
      views: {
        'main@': {
          templateUrl: 'doors/range/range.html',
          controller: 'rangeController'
        }
      },
      resolve: {
        range: [ '$stateParams', 'rangeResource', function($stateParams, rangeResource) {
          return rangeResource.query({ range: $stateParams.type }).then(function(range) {
            range.name = $stateParams.type;
            return range;
          });
        }]
      }
    };

    $stateProvider.state('range', rangeState);
  }]);

任何人都可以帮我解决这个问题吗?

要查看此操作,请转到https://uat.yaledoor.co.uk,然后从“门样式”下拉菜单中选择左侧的链接。它第一次将您带到页面。对同一下拉列表中其他链接的后续点击将无法执行任何操作。

2 个答案:

答案 0 :(得分:0)

如果您使用具有不同参数的相同状态,您的州将处理重新加载选项。

试试这个:

$stateProvider.state('range', rangeState, {reload: true});

答案 1 :(得分:0)

您所在州的网址看起来很可疑。通常,您可以通过以下方式使用特定匹配来定义它们:

URL: "/{type:foo|bar}"

在您的情况下,您似乎试图将“-doors”附加到该类型,以便获得“#/ foo-doors”或“#/ bar-doors”等网址。因此,在将它们传递给匹配字符串的URL之前,您需要将其附加到ranges中的值。