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

Rotas em AngularJS

Boa noite Flavio e pessoal do grupo.

Tenho uma dúvida, espero que alguém possa me dar uma dica de como resolver.

É o seguinte: Imagine uma web app que esta dividida em 3 partes, uma delas seria parte visual, estática; a segunda seria o CRUD, parte de manutenção dos dados que só o administrador do site tem acesso; e a terceira seria a parte de pesquisa nesses dados cadastrados. Estas duas ultimas acessam o mesmo bd, ou seja, o backend é único.

As 3 partes desenvolvi em backends separados, fiz assim inicialmente para os testes, mas agora chegou o momento de colocar tudo em um backend só. Estou usando Heroku para hospedagem com NodeJS.

Para entendimento da duvida vou tentar traçar um esboço de como tudo esta modelado no front end.

Pagina estática usando a ideia de SPA com angularJS, 
somente informações da empresa, não acessa o BD 
no back-end:

index.html
<head>
    <css>
    <js>
</head>

<body>
    <menu navigator>
        Nesse menu tem um link para a parte de busca dos dados.
    </menu navigator>
    <ng-view>
    <footer>
</body>

|-----------------------------|
|        static               |
|-----------------------------|
|                             |
|       ng-view               |
|                             |
|-----------------------------|
|     footer static           |
|-----------------------------|


---------------------------------------------

CRUD utilizado para gerenciar os dados oferecidos 
pela empresa, o layout é um DASHBOARD, barra lateral 
esquerda estática com menu de opções e menu superior 
estático.  O conteúdo dinâmico sendo mostrado nessa 
parte central:

index.html
<head>
    <css>
    <js>
</head>

<body>
    <menu navigator>
    <menu sidebar>
    <ng-view>
</body>

|-------|----------------------|
|       |     static           |
|static |----------------------|
|       |                      |
|       |   ng-view            |
|       |                      |
|-------|----------------------|


----------------------------------------------

A terceira parte que seria um sistema de busca 
nesses dados cadastrados, tem um layout diferente:

O menu superior com os dados para os filtros que 
serão mostrados na parte inferior da tela:

index.html
<head>
    <css>
    <js>
</head>

<body>
    <menu filtros>
    <ng-view>
</body>

|-----------------------------|
|        static               |
|-----------------------------|
|                             |
|       ng-view               |
|                             |
|-----------------------------|

A dúvida é: Como montar essas rotas com um back-end único usando angular-js? Consegui montar os 3 de forma separada, mas preciso de tudo funcionando junto.

Desde já agradeço a atenção. Abs!

7 respostas

Oi Marcelo. Se eu entendi a sua dúvida, você faz igual ao que aprendeu no curso: um parcial para cada uma dessas páginas, cada uma com sua rota configurada.

Olá Flavio.

É meio difícil explicar a ideia mesmo, por isso tentei desenhar.

Dentro desses 3 index.html hoje, nas ng-views, já tem varias partials em cada uma, porém, os layouts dessas 3 webapps são muito diferentes, ou seja, eu não posso abrir dentro de uma a outra, fica sem sentido. É como se em um determinado momento, eu precisasse mudar totalmente de layout.

Pelo que eu andei pesquisando, a ideia seria uma ng-view dentro da outra, ou seja, o index passa a não ter nenhum html no body, somente uma div ng-view e dentro dela coloco outras ng-view, ou seja, "sub ng-view".

Ainda não tive tempo de colocar em pratica, mas me parece que substituindo o ngRoute pelo uiRoute vou conseguir essa característica de views dentro de views.

Pensei também no caso de usar CORS e deixar tudo como esta acessando o mesmo bd em back-end separados, porém, como temos que pagar o plano por webapp no heroku fica meio sem sentido pagar 3, o interessante é tudo rodar sobre o mesmo back-end mesmo.


|-----------------------------|
|                             |
|                             |
|                             |
|       ng-view               |
|       index.html            |
|                             |
|                             |
|-----------------------------|

|-----------------------------|
|        static               |
|-----------------------------|
|                             |
|      sub ng-view            |
|                             |
|-----------------------------|
|     footer static           |
|-----------------------------|

|-------|----------------------|
|       |     static           |
|static |----------------------|
|       |                      |
|       |   sub ng-view        |
|       |                      |
|-------|----------------------|

|-----------------------------|
|        static               |
|-----------------------------|
|                             |
|      sub ng-view            |
|                             |
|-----------------------------|

A ideia é essa mesmo Flavio? Deu pra compreender melhor a minha dificuldade?

Acho que agora entendi. Bom, com o router atual do Angular você não consegue fazer essas subrotas que deseja. Eu não uso o uirouter porque na época ele tinha uns bugs chatos.

Contudo, talvez, usar a diretiva ng-if para exibir condicionalmente algum específico possa ajudar. Se não, talvez você tenha que ir na direção do UI-ROUTER mesmo.

Vou dar uma pesquisada no ng-if também, mesmo que não der certo nesse projeto em outros pode ser que de para aplicar. Com ng-if eu fico usando normalmente o ngRoute?

Vou aproveitar e tirar mais uma dúvida, nesse caso de 3 layouts diferentes que conversamos acima, se por exemplo um deles usa um framework visual X, por exemplo bootstrap, e o outro layout usa outro tipo de framework, tenho q carregar todos no HEAD desse index né? Não tenho como carregar por demanda, por exemplo, só se o usuário entrar na parte X que usa o framework X eu carrego aqueles arquivos, senão não.

Desde já agradeço a atenção, abs!

solução!

Quando se cria uma SPA, você carrega tudo o que a aplicação precisa logo de início. Parece-me que você quer realizar lazy loading de recursos e o Angular por padrão não faz isso.

Aliás, como cada parte é muito distinta, talvez voltar com aplicações separadas seja interessante, mas isso você precisa avaliar.

Perfeito Flávio.

Obrigado!

Talvez isso possa te ajudar no lazy loading, mas eu não testei, pelo menos, para dar um norte:

https://oclazyload.readme.io/