Manipulação de barras à direita no roteador angularUI
Já se passaram horas desde que comecei a trabalhar neste problema e não consigo entender minha solução.
Eu tenho um aplicativo que pode resultar em usuários realmente digitando o URL. Nesses casos, não é difícil acreditar que o usuário possa inserir uma barra final. Por exemplo,
www.example.com/users/2 e www.example.com/edit/company/123
deve ser tratado da mesma forma que
www.example.com/users/2/ e www.example.com/edit/company/123/
Isso só precisa ser feito para lidar com o roteamento de URL no lado do cliente. Não estou interessado em lidar com barras finais em chamadas de recurso / API. Eu só estou interessado em lidar com as barras cortadas no navegador.
Então pesquisei e não encontrei muitas respostas na rede. A maioria deles me levou à seção FAQ do roteador angular-ui.
https://github.com/angular-ui/ui-router/wiki/Frequently-Asked-Questions
Aqui eles nos dizem para escrever uma regra, que é o que eu quero fazer, mas parece que não está funcionando, ou talvez eu esteja fazendo errado.
Aqui está o plunkr onde eu adicionei meu código.
http://plnkr.co/edit/fD9q7L?p=preview
Eu adicionei isso à minha configuração, o restante do código é basicamente o básico.
$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;
}
});
Basicamente, quero tornar a barra à direita opcional, ou seja, sua presença ou ausência na barra de endereços não deve afetar o estado carregado.