6
respostas

Como eu estava mexendo no menu.html que faz o menu lateral da apliacação, surgiu a seguinte duvida como faço para criar uma opção de deslogar?

Criar o botão na lista do menu.html e depois colocar a sua rota no menu.html se for o mesmo do perfil e do listagem acho que sei fazer tranquilamente, mas para deslogar teria que zerar a variável do login ? como fazer isso já que não esta sendo usado sessão ou posso estar enganado e estamos usando a sessão do angularjs e eu não sabia rsrs ?

6 respostas

Eu acho que você poderia colocar no controller do menu a seguinte função

$scope.logoff = function(){
        $rootScope.login = {};
        $state.go('login');
    }

mas ai você deveria modificar o $scope.login do controller de login para @rootScope afim de limpar os campos login e senha da tela.

Para fazer o deslogar o meu menu.controller.js teria que ficar desse jeito :

menu.controller.js

angular.module('starter')
.controller('MenuController', function($rootScope, $scope){

    $scope.usuarioLogado = $rootScope.usuario;

         $scope.logoff = function(){
        $rootScope.login = {};
        $state.go('login');
    }

});

Esta certo ?

Sim, eu testei implementando o menuController dessa forma. Só não esqueça de modificar o $scope.login do loginController para @rootScope

Voce diz alterar o login.controller,js dessa forma :

login.controller.js

angular.module('starter')
.controller('LoginController', function($scope, CarroService, $ionicPopup, $state, $rootScope){

    $rootScope.login = {};

    $scope.realizarLogin = function() {
        //alert($scope.login.email);

        var dadosDoLogin = {
            params : {
                email : $rootScope.login.email,
                senha : $rootScope.login.senha
            }
        }

        CarroService.realizarLogin(dadosDoLogin).then(function(dados){
            $rootScope.usuario = dados.usuario;
            $state.go('app.listagem');
        }, function(erro){
            $ionicPopup.alert({
                title : 'Opa!',
                template : 'Email ou senha incorretos.'
            });
        });
    }
});

Para fazer o logout preciso alterar esses controllers que voce sugeriu ? Vou alterar esses controllers e criar um botao de logout na lista do menu.html . Para testar eu posso colocar um console.log na função logoff de exemplo que voce mostro ?

É isso ai, o LoginController esta correto. O $rootScope é necessário para que o menu controller e o login controller compartilhem a mesma variável. Você pode colocar um console.log na função logoff só pra ter certeza que o código esta sendo executado.

coloquei o console.log no scopo.logoff e apareceu o seguinte erro : ReferenceError: login is not defined at ChildScope.$scope.logoff (menu.controller.js:11) at fn (eval at compile (ionic.bundle.js:27643), :4:209) at ionic.bundle.js:65429 at ChildScope.$eval (ionic.bundle.js:30400) at ChildScope.$apply (ionic.bundle.js:30500) at HTMLElement. (ionic.bundle.js:65428) at defaultHandlerWrapper (ionic.bundle.js:16792) at HTMLElement.eventHandler (ionic.bundle.js:16780) at triggerMouseEvent (ionic.bundle.js:2953) at tapClick (ionic.bundle.js:2942) (anonymous) @ ionic.bundle.js:26799 (anonymous) @ ionic.bundle.js:23512 $apply @ ionic.bundle.js:30505 (anonymous) @ ionic.bundle.js:65428 defaultHandlerWrapper @ ionic.bundle.js:16792 eventHandler @ ionic.bundle.js:16780 triggerMouseEvent @ ionic.bundle.js:2953 tapClick @ ionic.bundle.js:2942 tapMouseUp @ ionic.bundle.js:3018

-> esse erro apareceu no navegador.

O sistema desfez o logoff e volto para a tela de login , eu fiquei na duvida por causa desse erro, esse erro aconteceu pq a variavel veio fazia ?

Segue como fico o meu menu.controller.js

menu.controller.js

angular.module('starter')
.controller('MenuController', function($rootScope, $scope, $state){

    $scope.usuarioLogado = $rootScope.usuario;



       $scope.logoff = function(){
        $rootScope.login = {};
        $state.go('login');
        console.log(login);
    }

});

login.controller.js

angular.module('starter')
.controller('LoginController', function($scope, CarroService, $ionicPopup, $state, $rootScope){

    $rootScope.login = {};

    $scope.realizarLogin = function() {
        //alert($scope.login.email);

        var dadosDoLogin = {
            params : {
                email : $rootScope.login.email,
                senha : $rootScope.login.senha
            }
        }

        CarroService.realizarLogin(dadosDoLogin).then(function(dados){
            $rootScope.usuario = dados.usuario;
            $state.go('app.listagem');
        }, function(erro){
            $ionicPopup.alert({
                title : 'Opa!',
                template : 'Email ou senha incorretos.'
            });
        });
    }
});

menu.html

<ion-side-menus>
    <ion-side-menu-content>
        <ion-nav-bar class="bar bar-positive">
            <ion-nav-back-button>Voltar
            </ion-nav-back-button>
            <ion-nav-buttons side="left">
                <button class="button button-icon button-clear ion-navicon" menu-toggle="center"></button>
            </ion-nav-buttons>
        </ion-nav-bar>

        <ion-nav-view name="menuContent"> </ion-nav-view>

    </ion-side-menu-content>
   <ion-side-menu side="left">
        <ion-header-bar class='bar bar-positive'>
              <h1 class="title">Dados Pessoais</h1>
        </ion-header-bar>
          <ion-content>
             <div class="list card">
                <div class="item item-avatar">
                    <h2>{{usuarioLogado.nome}}</h2>
                    <h3>{{usuarioLogado.email}}</h3>      
                </div>
                <div class="item item-body"></div>
            </div>
            <ion-list>
              <ion-item menu-close href="#/app/perfil">
                  Perfil
              </ion-item>
               <ion-item menu-close href="#/app/listagem">
                  Lista de carros
              </ion-item>
               <ion-item menu-close ng-click="logoff()">
                  Logoff
              </ion-item>
            </ion-list>
          </ion-content>
    </ion-side-menu>
</ion-side-menus>

Parece que funciono queria saber um pouco mais como posso testar ? se existe mais teste que posso fazer para saber se a função de deslogar deu certo.

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software