javascript - 如何强制 URL 参数出现在 ui-router 的 URL 中?

标签 javascript angularjs router angular-ui-router

我有一个简单的 users.list 状态,配置如下:

$stateProvider.state('users.list', {
  url: '/users/list?type',
  reloadOnSearch: false,
  templateUrl: 'templates/users/list.html',
  params: {
    type: { value: 'all' },
  },
});

我试图强制类型参数始终出现在 URL 中。当我单击由 ui-sref 指令生成的链接时,效果很好。当我直接在浏览器中访问 /users/list 时,就会出现问题。尽管该参数已正确配置到 $state.params 中,但它并未出现在 URL 中。

通常这不是一个大问题,但是当您需要使用季节性参数时,它就变成了一个大问题。例如,假设默认情况下,我只想列出从上周到现在注册的新用户。我可以将参数 from 设置为默认值 today - 7 days,每天都会不同。

因此,当用户与某人共享不带参数的 url 时,可能会造成很多麻烦,例如:“嘿,帮我删除顶部的第三个,这是作弊。”。如果收到消息的人决定改天打开该网址,列表将会有所不同,您可以看到我担心的是什么。

我找不到任何可以帮助我的东西,所以我在这里提问。有人这样做过吗?可行吗?

最佳答案

a working plunker

我们只需使用设置南瓜:

.state('users.list', {
  url: '/users/list?type',
  reloadOnSearch: false,
  templateUrl: 'templates/users/list.html',
  params: {
    type: {
      value: 'all',
      squash: false,
    },
  },
});

检查一下here

有关更多详细信息,请参阅以下内容:

扩展(updated working plunker)

如果我们希望初始页面也使用默认值,我们可以使用此 .otherwise() 设置:

//$urlRouterProvider.otherwise('/users/list');
$urlRouterProvider.otherwise(function($injector, $location) {
    var state = $injector.get('$state');
    state.go('users.list');
    return $location.path();
});

检查that in action here并在此处阅读更多详细信息:

关于javascript - 如何强制 URL 参数出现在 ui-router 的 URL 中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31275830/

相关文章:

javascript - Firefox 中未定义 Jquery

javascript - 如何运行 webpack 转换后的函数?

javascript - Meteor、React、身份验证和授权问题

javascript - 在 Angularjs 中,我如何加载相同的 javascript 文件,但为不同的环境(测试、测试版、产品)传递不同的 key

javascript - 从 AngularJS 中局部元素的 ng-click 调用指令

javascript - Angular JS Javascript 动画淡入不适用于新添加的项目

javascript - 在 Backbone.js 中获取 URL 片段而不是哈希

javascript - iframe 将顶部框架导航重定向到 iframe

flutter - 运行滑动启动后模棱两可的导入

css - React 路由器中的 activeClassName 同时突出显示两个 NavLink