Solucionado (ver solução)
Solucionado
(ver solução)
6
respostas

$routeProvider - Parâmetros

Olá pessoal,

Estou com um problema no caso de todas as rotas precisarem de parâmetros, e nas rotas mais internas, ele acaba redirecionando para a rota mais curta. Segue o exemplo do curso modificado:

$routeProvider.when('/pagina1', {
            templateUrl: 'pagina1.html',
            controller: 'Controller'
        });

        $routeProvider.when('/pagina1/segunda/:fotoId', {
            templateUrl: 'pagina2.html',
            controller: 'Controller'
        });

        $routeProvider.when('/pagina1/segunda/terceira', {
            templateUrl: 'pagina3.html',
            controller: 'Controller'
        });

Quando eu coloco href="#/pagina1/segunda/2" funciona corretamente, ele redireciona para a página 2. Mas quando eu coloco href="#/pagina1/segunda/terceira" ele redireciona para a página dois mesmo ao invés de ir para a página 3.

Como eu poderia tratar esse tipo de situação?

6 respostas

acredito que ele está identificando esse '/terceira' como se fosse o identificador (fotoId) por isso está redirecionando para a página 2.

Tente na terceira rota alterar aquele segunda por uma outra palavra, deverá funcionar corretamente.

Parece que o routeProvider vai colocando em uma pilha todas as rotas, partindo desse princípio, ao digitar a url ele vai verificando na url qual rota se enquadra. Ao chegar na segunda rota a url: /pagina1/segunda/terceira é aceita, pois é considerado esse "terceira" como o atributo fotoId esperado.

Como solucionar o problema:

Primeiro você cria a rota para a terceira e após isso você cria a rota para a segunda. Mas lembre-se caso queira acessar a rota com o atributo, e esse atributo possuir o nome de terceira, você será redirecionado para a página 3.

Recomendo trocar o "segunda" da rota que encaminha para a pagina3 por outro nome.

        $routeProvider.when('/pagina1/outra/terceira', {
            templateUrl: 'pagina3.html',
            controller: 'Controller'
        });

André,

O problema disso é que eu tiro do usuário a sensação de estar entrando em certo conteúdo, um exemplo prático:

$routeProvider.when('/noticias', {
            templateUrl: 'pagina1.html',
            controller: 'Controller'
        });

        $routeProvider.when('/noticias/esporte/:idAlgo', {
            templateUrl: 'pagina2.html',
            controller: 'Controller'
        });

        $routeProvider.when('/noticias/esporte/futebol', {
            templateUrl: 'pagina3.html',
            controller: 'Controller'
        });

Entendeu?

Abraços.

Coloque:

$routeProvider.when('/noticias', {
            templateUrl: 'pagina1.html',
            controller: 'Controller'
        });

        $routeProvider.when('/noticias/esporte/futebol', {
            templateUrl: 'pagina3.html',
            controller: 'Controller'
        });

        $routeProvider.when('/noticias/esporte/:idAlgo', {
            templateUrl: 'pagina2.html',
            controller: 'Controller'
        });

A única questão que se você quiser acessar a pagina2.html e o id for = futebol, irá ser redirecionado para a pagina3.html

solução!

Mas Eduardo, você não acha que se tivesse uma notícia que quisesse acessar e o assunto fosse sobre futebol, fosse algo como: /noticias/esporte/futebol/:idAlgo, ou caso fosse sobre f1 algo como: /noticias/esporte/f1/:idAlgo ?

É pode ser. Vou tentar fazer dessa forma.