Olá, pessoal!
Mais um artigo da série AngularJS e hoje vamos ver como criar um dialog. Eu lembro que uma vez tentei fazer isso em JavaScript puro e foi muito sofrimento, mas o Angular-ui nos facilita muita coisa…
Como sempre, vou considerar que você já vem acompanhando a série e entende a estrutura básica com o Angular e rotas. O projeto que tem os exemplos da série está no meu GitHub.
Requisitos:
- angular-ui-bootstrap-modal.js
- angular-ui.js
Para o dialog, é desse cara que precisamos. Você pode baixá-los no projeto pegando o arquivo no meu github.
Na página do Angular-ui tem exemplos bacanas usando o modal http://angular-ui.github.io/bootstrap/.
Agora vamos colocar a mão na massa
Development
O primeiro passo é atualizarmos a declaração do module no arquivo app.js, deixando assim:
<span style="font-size: 14px; line-height: 1.5em;">var app = angular.module("myapp", [ "ui",</span> "ui.directives","ui.bootstrap.modal" ]);
Adicionamos o “ui.bootstrap.modal” (o “ui.directives” não é requerido para esse exemplo).
Agora vamos atualizar o index.html, informando para carregar .js – que tem a funcionalidade do dialog:
<span style="font-size: 14px; line-height: 1.5em;"><head></span> <script src=<i>"js/lib/angular-ui-bootstrap-modal.js"</i>></script> <link rel=<i>"stylesheet"</i> href=<i>"css/bootstrap.css"</i>> </head>
No meu caso, esse é o caminho. Adicionei o css do bootstrap para ficar com layout agradável.
Vamos criar o controller que vai cuidar do dialog. No meu arquivo recipeController.js adicionei o seguinte controller:
<span style="font-size: 14px; line-height: 1.5em;">var MyCtrlDialog = function($scope) {</span> $scope.open = function() { $scope.showModal = true; }; $scope.ok = function() { $scope.showModal = false; }; $scope.cancel = function() { $scope.showModal = false; }; };
A leitura é bem simples: quando a função open for chamada, ele deve mostrar o modal; quando a função ok ou cancel for chamada, o modal deve ser fechado.
Como estou usando rotas, vou adicionar uma para o dialog. Não é requerido que seja feito com rotas, desde que ao carregar o HTML os .js sejam carregados, tudo vai funcionar.
No arquivo app.js adicionei a rota:
<span style="font-size: 14px; line-height: 1.5em;">when("/dialog", {</span> templateUrl : "dialog.html",controller:MyCtrlDialog }).
Agora vamos criar o arquivo dialog.html para vermos o resultado:
<span style="font-size: 14px; line-height: 1.5em;"><!-- In this dialog is using </span><span style="text-decoration: underline;">angularui</span><span style="font-size: 14px; line-height: 1.5em;"> --></span> <body> <!-- <span style="text-decoration: underline;">Criando</span> <span style="text-decoration: underline;">um</span> <span style="text-decoration: underline;">botão</span> <span style="text-decoration: underline;">para</span> <span style="text-decoration: underline;">abrir</span> o modal --> <button class=<i>"btn"</i> ng-click=<i>"open()"</i>>Open Dialog</button> <!-- My dialog Content --> <div modal=<i>"showModal"</i> close=<i>"cancel()"</i>> <div class=<i>"modal-header"</i>> <h4>Modal Dialog</h4> </div> <div class=<i>"modal-body"</i>> <p><span style="text-decoration: underline;">Teste</span> dialog. Are you sure?</p> </div> <div class=<i>"modal-footer"</i>> <button class=<i>"btn btn-success"</i> ng-click=<i>"ok()"</i>><span style="text-decoration: underline;">Ok</span></button> <button class=<i>"btn"</i> ng-click=<i>"cancel()"</i>>Cancel</button> </div> </div> </body>
Testando
Simples, não?
Abraços!