It's been hours since I started working on this problem and I can't seem to get my head around the solution.
I have an app that may result in users actually typing in the URL. In such cases it is not hard to believe that user might enter a trailing slash. For example,
www.example.com/users/2 and www.example.com/edit/company/123
should be treated the same as
www.example.com/users/2/ and www.example.com/edit/company/123/
This only needs to done for handling URL routing on the client side. I am not interested in handling trailing slashes in resource/API calls. I am only interested in handling trailing slashed in the browser.
So I researched and found not many answers on the net. Most of them led me to the FAQ section of angular-ui router.
https://github.com/angular-ui/ui-router/wiki/Frequently-Asked-Questions
Here they tell us to write a rule, which is what I want to do, but it doesn't seem to be working, or maybe I am doing it wrong.
Here's the plunkr where I have added my code.
http://plnkr.co/edit/fD9q7L?p=preview
I have added this to my config, the rest of the code is pretty much the basic stuff.
$urlRouterProvider.rule(function($injector, $location) {
//if last charcter is a slash, return the same url without the slash
if($location.$$url[length-1] === '/') {
return $location.$$url.substr(0,$location.$$url.length - 2);
} else {
//if the last char is not a trailing slash, do nothing
return $location.$$url;
}
});
Basically, I want to make the trailing slash optional, ie it's presence or absence on the address bar should have no effect on the state loaded.
See Question&Answers more detail:
os 与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…