Eu tenho esse aplicativo AngularJS. Tudo funciona muito bem.
Agora, preciso mostrar pop-ups diferentes quando condições específicas se tornarem verdadeiras, e fiquei imaginando qual seria a melhor maneira de proceder.
Atualmente, estou avaliando duas opções, mas estou absolutamente aberto a outras opções.
Opção 1
Eu poderia criar o novo elemento HTML para o pop-up e anexar ao DOM diretamente do controlador.
Isso quebrará o padrão de design do MVC. Não estou feliz com esta solução.
opção 2
Eu sempre poderia inserir o código para todos os pop-ups no arquivo HTML estático. Em seguida, usando ngShow
, eu posso ocultar / mostrar apenas o pop-up correto.
Esta opção não é realmente escalável.
Portanto, tenho certeza de que deve haver uma maneira melhor de conseguir o que quero.
Respostas:
Com base na minha experiência com os modais AngularJS até agora, acredito que a abordagem mais elegante seja um serviço dedicado ao qual possamos fornecer um modelo parcial (HTML) a ser exibido em um modal.
Quando pensamos nisso, os modais são uma espécie de rotas AngularJS, mas apenas exibidas no pop-up modal.
O projeto de inicialização do AngularUI ( http://angular-ui.github.com/bootstrap/ ) possui um excelente
$modal
serviço (costumava ser chamado de $ dialog antes da versão 0.6.0) que é uma implementação de um serviço para exibir o conteúdo de parcial como um pop-up modal.fonte
É engraçado porque estou aprendendo o Angular e assistindo alguns vídeos do canal deles no Youtube. O palestrante menciona seu problema exato neste vídeo https://www.youtube.com/watch?v=ZhfUv0spHCY#t=1681 em torno da marca de 28:30 minutos.
Tudo se resume a colocar esse trecho de código específico em um serviço e não em um controlador.
Meu palpite seria injetar novos elementos pop-up no DOM e manipulá-los separadamente, em vez de mostrar e ocultar o mesmo elemento. Dessa forma, você pode ter vários pop-ups.
O vídeo inteiro é muito interessante de assistir também :-)
fonte
Edição para adicionar um exemplo de alto nível (não funcional)
fonte
scope.watch(showPopup, function(newVal, oldVal){
?Consulte http://adamalbrecht.com/2013/12/12/creating-a-simple-modal-dialog-directive-in-angular-js/ para obter uma maneira simples de fazer diálogo modal com o Angular e sem a necessidade de inicialização
Edit: Desde então, uso ng-dialog em http://likeastore.github.io/ngDialog, que é flexível e não possui dependências.
fonte
O Angular-ui vem com a diretiva de diálogo. Use-o e defina templateurl para qualquer página que você queira incluir. Essa é a maneira mais elegante e eu a usei no meu projeto também. Você pode passar vários outros parâmetros para o diálogo conforme a necessidade.
fonte