9
respostas

Template Dinâmico

Bom dia, eu tenho um template que possui um header e um footer , eu incherto nele algumas views porém tem view que eu preciso adicionar um botão sair no header , como eu faço isso? aguardo resposta.

9 respostas

Veja que há uma questão de lógica ai. Hora o botão tem que aparecer e hora não tem que aparecer. Então, você precisa de alguma variável para realizar um condicional, mesma lógica que você aprende quando esta começando a programar com JavaScript, nada complicado, bem simples mesmo.

Só que com o Angular, você usa a diretiva v-show para exibir ou não o que você deseja com base nessa variável, de preferência, booleana.

Ai a escolha da variável e como inicializá-la dependerá da sua lógica.

Sucesso e bom estudo!

Sim mas como faço para pegar o current view para fazer a comparação?

Por que você precisa saber qual é a current view? Se você tem um tal de botão sair, é para o usuários logados, certo? Não faço a menor ideia de como você implementou isso no seu sistema, mas você deve ter essa informação em algum lugar. É ela que você usará para v-show.

Ou se não quiser ter dor de cabeça... tenha dois headers..um com o botão e outro sem. Incluindo o que tem botão apenas onde faz sentido.

Eu peguei um código legado, e agora surgiu a necessidade de mostrar um botão de logout , porém este está no template . por isso queria fazer a comparação por pagina , já que eu não posso saber se tem um usuário logado pq isso está dentro de um service . foi usado conforme o curso SPA

Entendi. Uma sugestão é a seguinte. No momento que que você pega o usuário no seu sistema e o coloca dentro de um service, você pode fazer $rootScope.logado = true. Tudo que fica no rootScope é acessível por qualquer view. Quando deslogar, precisa fazer $rootScope.logado = false. Dai, você no seu v-show do seu botaozinho faz v-show="logado". Ele encontrará essa info no rootScope.

É uma solução que evita mexer muito no seu sistema logado.

Sucesso e bom estudo meu aluno.

obrigado,vou tentar fazer desta forma

Outra dúvida, Dei uma olhada no código e vi que na view tem um controller vm e esse vm chama uma function logar ao clicar no botão. a pergunta é se o valor do rootscope=true eu passo na chamada da function logar? ou lá dentro do controller na função?

Onde você desejar, contanto que você disponibilize a informação em $rootScope. Lembrando que ele pode ser injetado em serviços, inclusive controllers. Você precisa injetá-lo para poder pendurar coisas nela. Isso é apenas um caminho. Não faço ideia como seu sistema é construído, então, o bom senso de fazer ou não ou qual lugar vai depender do seu conhecimento do sistema.

Esse é meu login controller (function () { 'use strict';

angular .module('finansi') .controller('AuthenticationController', AuthenticationController);

AuthenticationController.$inject = ['$state', 'AuthenticationService'];

/ @ngInject / function AuthenticationController($state, AuthenticationService) { var vm = this; vm.title = 'Autenticação'; vm.logar = logar; vm.registrar = registrar;

vm.credencial = {};

function logar() { if (isValide()) { AuthenticationService.logar(vm.credencial).then(locarSuccess); }

function locarSuccess(data) { $state.go('pedido'); }

}

function registrar() { if (isValide()) { AuthenticationService.registrar(vm.credencial.login).then(registrarSuccess); } function registrarSuccess(relay) { $state.go('login'); }

}

function isValide() { if (vm.form.$invalid) { angular.forEach(vm.form.$error, function (field) { angular.forEach(field, function (errorField) { errorField.$setTouched(); }) });

return false; } return true; }

}