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

Rota complexa

Gostei muito da idéia de SPA porém me gerou uma dúvida.

Ficou claro para mim que o meu index.html deve ser meu template e caso esse template tenha um menu poderia criar uma diretiva meu-menu e utiliza-la no index da seguinte forma:

<html>
    <head>...</head>
    <body>
        <div id="topo"> ... </div>
        <div id="container>
            <meu-menu></meu-meu>
            <ng-view></ng-view>
        </div>
        <div id="footer">...</div>
    </body>
</html>

Até aí está tudo certo. O problema é que esse template vai ser totalmente modificado pela página de login. Uma página de login deveria ser apenas:

<html>
    <head>...</head>
    <body>
        <div id="login">...</div>
       <body>
</html>

Qual a melhor abordagem para esse caso? Colocaria o login sem fazer parte do SPA sendo por exemplo o login.html e após a autenticação fazer um redirect mesmo de servidor para um administrativo.html que seria meu SPA?

Ou consigo de alguma forma criar uma espécie de sub rota que ficaria mais ou menos assim:

SPA html
<html>
    <head></head>
    <body>
        <ng-view></ng-view>
    </body>
</html>

Login partial que vai usar o SPA html:
<div id="login">...</div>

Administrativo template que vai usar o SPA html:
<div id="topo"> ... </div>
    <div id="container>
        <meu-menu></meu-meu>
        <ng-view></ng-view> ???????
    </div>
<div id="footer">...</div>

Cliente partial que vai usar o template administrativo
<h3>Cadastro de clientes</h3> ...

e assim ao acessar servidor/#/login ele iria para o partial de login (esse já funciona) e ao acessar servidor/#/administrativo/cliente/new ele carregasse via ajax um partial de novo cliente?

ps: o partial de cliente seria substituído no ng-view do template administrativo.

Resumindo: ter um ng-view dentro de algo que já exista um ng-view.

Se não for possível, qual a melhor abordagem para resolver esse problema?

Obrigado

4 respostas

você pode ter uma verificação no seu menu para saber se é login ele não aparece se não for ele fica ativo

Não Alan, perceba que são layouts totalmente diferentes e não apenas no menu. Com sua sugestão entendo como algo assim:

<body ng-show="usuarioNaoLogado">
    aqui vai todo o template de login...
</body>

<body ng-show="usuarioLogado">
    aqui vai o template administrativo....
    <ng-view></ng-view>
</body>

vejo um problema nessa abordagem. O ng-show apenas não mostra o elemento via css dando um display none. Nesse caso seria ruim pois sempre a página vai ter os dados de login apenas não visivel ao usuário.

Acredito que deve haver uma forma mais elegante de se fazer isso.

att

solução!

eu usaria o ngif . O ngshow não serve para essa sua solução por esse motivo o ngif seria a melhor solução porque ele remove o elemento do DOM. Outra solução seria chamar o menu dentro de todos as parciais porem isso seria uma solução bem ruim.

https://docs.angularjs.org/api/ng/directive/ngIf

Coloca o menu no índex e como Alan disse use um condicional para exibi-lo.

Se você não fizer isso, pode adicionar o menu tem todas as parciais exceto do login. É um caminho válido, porém mais verboso.