在AngularJS 1.1.5上,我有两个映射路径:
/category/:name/:article
/category/:name
我想只有最新的,并将param: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 /:das保留一个routeMapper,其中第三个param是可选的可以作为/ foo /:bar,然后在locationChange()上使用正则表达式。我已经在这里以明确的方式发布了我的问题,我已经有了-1但是老实说不明白为什么,我认为知道如何以AngularJs的方式做这件事是有用的。
感谢任何帮助!
感谢您寻找:)
答案 0 :(得分:0)
要使两个参数都可选,您可以使用:
var m = path.match(/issue(?:\/([^/]*))?(?:\/([^/]*))?/i);