Angularjs:如何创建可选的路由映射参数
Angularjs: How to create a optional route map param?
在AngularJS 1.1.5上,我有两个映射的路由:
/category/:name/:article
/category/:name
我只想拥有最新的,并将参数:article路由到操作。此操作实际上是扩展列表中的元素,因此我不需要重新加载控制器等,或者让我们想象在其他情况下可以例如运行动画。例如,假设我有一个幻灯片,我想显示幻灯片编号 5 - 这种事情!无需重新加载所有内容!
路线(我使用的是滑块示例,因为它不那么令人困惑):
.config(function(...))
$routePRovider
.when('/slider/:category', {
templateUrl: 'slider.html',
controller: 'sliderCtrl'
})
.when('/slider/:category/:number', {
templateUrl: 'slider.html',
controller: 'sliderCtrl'
});
然后在 .run() 或 .controller() 上,
scope.$on("$locationChangeStart", function(event, next, current){
var path = $location.path();
if((path.match("'/slider'/(.+)'/(.+)"))){ ... }; /* I'd like the 2 param to be optional, I'm still trying to find the right or correct regex for this atm. I knnow that I'll have to keep just one routemap controller, the one without the :number param */
})
经过一些研究,我找到了一个可能的解决方案:
模式
"/foo/bar/das".match("'/foo'/([^'/]+)('/[^'/]+)?")
返回三个参数,如果最后一个省略,则只返回两个,但我得到额外的"/",如 ["foo"、"bar"、"/das"] 和 ["foo"、"bar",未定义]。不过,我不得不处理额外的"/"很好!
这个工作得很好:
"/foo/bar".match("'/foo'/([^'/]+)(?:'/([^'/]+))?")
重要说明
经过一些测试并找到了模式,目前看起来 AngularJS 1.15 $routeProvider并不真正支持它?我已经发布了这个,认为通过只保留一个/foo/:bar/:d as 的 routeMapper,其中第三个参数是可选的,可以作为/foo/:bar 工作,然后在 locationChange() 上使用正则表达式。
要使这两个参数都可选,您可以使用:
var m = path.match(/issue(?:'/([^/]*))?(?:'/([^/]*))?/i);
相关文章:
- 有没有办法用routerLink/router.navigation附加查询/路由参数
- 如何在JavaScript中获取路由参数
- 带斜杠-中断路由的节点JS路由参数
- (多个)路由参数的集合
- express/如何将路由参数传递到其他文件
- 无法获取用户 ID 路由参数以在反应路由器中继上工作
- Url.Action 将以前的 URL 与 VS IDE 中 JavaScript 中的当前路由参数相结合
- 仅更改一个路由参数
- 在表单提交时使用 URL 发送路由参数
- 路由参数为空
- 无法读取路由参数中未定义的属性“名称”
- 如何从组件外部访问路由参数
- 自定义骨干路由参数
- 角度 JS 路由参数 斜杠的随机数
- 使用角度 ui 路由器获取服务中的路由参数
- AngularJS ui-router 中的 URL 路由参数
- 如何检查 URL 是否仅包含一个路由参数
- 角度JS路由参数在路由时约束
- 带有 AngularJS 和路由参数的后退按钮循环
- 当路由参数更改时,工厂中的角度火更改引用