8
respostas

teste para o ios no mozila nao funciona e quando o agendamento da erro esta aparecendo uma seta acontece isso no ios e no android

teste no mozila para o ios nao funciona da erro, mas no chrome funciona perfeitamente. Quando faço o agendamento e da erro Nao esta aparecendo o botao do menu lateral para ver os agendamentos esta aparecendo a seta, como posso arrumar esta funcionando isso quando agendamento nao da erro?

Testei o aplicativo no iphone usando o ionic view, mas nao esta dando certo. Nao esta aparecendo os agendamentos, nenhum agendamento e os agendamentos que deram errado quando clica para escolher o mesmo carro esta mostrando tudo que ja foi selecionado anteriormente antes de dar o erro no agendamento. Segue como esta o meu projeto :

controllers : agendamentos.controller.js

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

    $scope.agendamentos = [];

    DatabaseValues.setup();
    DatabaseValues.bancoDeDados.transaction(function(transacao){
        transacao.executeSql('SELECT * FROM agendamentos', [], function(transacao, resultados){

              for(var i = 0; i < resultados.rows.length; i++){
              $scope.agendamentos.push(resultados.rows[i]);

            }
        })
      })


    $scope.reenviar = function(agendamento){

        var agendamentoFinalizado = {
            params : {
                nome: agendamento.nome,
                endereco : agendamento.endereco,
                email : agendamento.email,
                carro : agendamento.modelo,
                preco : agendamento.preco
            }
        }

        CarroService.salvarPedido(agendamentoFinalizado).then(function(dados){

            DatabaseValues.setup();
              DatabaseValues.bancoDeDados.transaction(function(transacao){
                transacao.executeSql("UPDATE agendamentos SET confirmado = 'true' WHERE id = ? ", [agendamento.id])
              })

              $ionicPopup.alert({
                title : 'Parabens',
                template : 'Seu agendamento foi confirmado com sucesso'
              }).then(function(){
                  $state.go($state.current, {}, {reload : true})
              })

        }, function(erro){

            $ionicPopup.alert({
                title : 'Ops!',
                template : 'O servidor continua com erro. Tente mais tarde'
              })
        })
    }
  })

carroEscolhido.controller.js

angular.module('starter')
.controller('CaroEscolhidoController', function($stateParams, $scope){

    $scope.carroEscolhido = angular.fromJson($stateParams.carro);

    $scope.listaDeAcessorios = [{"nome" : "Freio ABS", "preco" : 800}, 
                                {"nome" : "Ar Condicionado", "preco" : 1000},
                                {"nome" : "MP3 Player", "preco" : 500}];

    $scope.mudou = function(acessorio, isMarcado){

        if (isMarcado) {
            $scope.carroEscolhido.preco = 
               $scope.carroEscolhido.preco + acessorio.preco;
        } else {
            $scope.carroEscolhido.preco = 
               $scope.carroEscolhido.preco - acessorio.preco;
        }
    };

});

finalizarPedido.controller.js

angular.module('starter')
.controller('FinalizarPedidoController', function($stateParams, $scope, $ionicPopup, $state, 
    CarroService, $ionicHistory, ionicDatePicker, DatabaseValues){

    $scope.carroFinalizado = angular.fromJson($stateParams.carro);

    $scope.pedido = {};

    $scope.dataSelecionada;

    $scope.abrirPopupCalendario = function(){
        var configuracoes = {

            callback: function(data){
                var dataSelecionada = new Date(data);
                var dataFormatada = ("0" + dataSelecionada.getDate()).substr(-2) + "/"  + ("0" + (dataSelecionada.getMonth() + 1)).substr(-2) + "/" + dataSelecionada.getFullYear();
                $scope.dataSelecionada = dataFormatada;
                //$scope.dataSelecionada = new Date(data); 
             }, 
            /*
            callback : function(data) {
                $scope.dataSelecionada = new Date(data);
            },*/

            weeksList : ['D', 'S', 'T', 'Q', 'Q', 'S', 'S'],
            monthsList: ["Jan", "Fev", "Mar", "Abr", "Mai", "Jun", "Jul", "Ago", "Set", "Out", "Nov", "Dez"]

        }

        ionicDatePicker.openDatePicker(configuracoes);
    }

    $scope.finalizarPedido = function(){

        var pedidoFinalizado = {
            params : {
                carro : $scope.carroFinalizado.nome,
                preco : $scope.carroFinalizado.preco,
                nome : $scope.pedido.nome,
                endereco : $scope.pedido.endereco,
                email : $scope.pedido.email
            }
        }

        CarroService.salvarPedido(pedidoFinalizado).then(function(dados){

                $scope.salvarDadosNoBancoDeDados('true');

                $ionicHistory.nextViewOptions({
                    disableBack : true
                })

                $ionicPopup.alert({
                    title: 'Parabens',
                    template: 'Voce acaba de comprar um carro.'
                }).then(function(){
                    $state.go('app.listagem');
                });
        },     function(erro){

                $scope.salvarDadosNoBancoDeDados('false');

                $ionicPopup.alert({
                      title: 'Ops',
                      template: 'Servidor com problemas. tente mais tarde.'
                  }).then(function(){
                      $state.go('app.listagem');
                  });

                  $ionicPopup.alert({
                      title: 'Deu erro',
                      template: 'Campos obrigatórios'
                  });

      });

        $scope.salvarDadosNoBancoDeDados = function(confirmado){

                DatabaseValues.setup();
                DatabaseValues.bancoDeDados.transaction(function(transacao){
                    transacao.executeSql('INSERT INTO agendamentos(nome, endereco, email, dataAgendamento, modelo, preco, confirmado) VALUES (?,?,?,?,?,?,?)', [$scope.pedido.nome, $scope.pedido.endereco, $scope.pedido.email, $scope.dataSelecionada, $scope.carroFinalizado.nome, $scope.carroFinalizado.preco, confirmado])
                })

        }


    }

});


/* 
$ionicPopup.alert({
                      title: 'Deu erro',
                      template: 'Campos obrigatórios'
                  });
*/

listagem.controller.js

angular.module('starter')
.controller('ListagemController', function($scope, CarroService){

    CarroService.obterCarros().then(function(dados){

        $scope.listaDeCarros = dados;

    });

    $scope.dataAtual = "01/01/2016";
});

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.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);
    }

});

perfil.controller.js

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

    $scope.estaEditando = false;
    $scope.textBotao = 'Editar';

    $scope.usuarioLogado = $rootScope.usuario;

    $scope.tirarFoto = function(){

        var opcoes = {
            correctOrientation:true,
            quality: 70
        }

        $cordovaCamera.getPicture(opcoes).then(function(foto){
            $scope.caminhoFoto = foto;
        }, function(erro){

        })
    }

    $scope.acaoBotao = function(){
        if ($scope.estaEditando) {
            $scope.estaEditando = false;
            $scope.textBotao = 'Editar';
        } else {
            $scope.estaEditando = true;
            $scope.textBotao = 'Salvar';
        }

    }

})
8 respostas

app.js

angular.module('starter', ['ionic', 'idf.br-filters', 'ngCordova', 'ionic-datepicker'])

.run(function($ionicPlatform, DatabaseValues) {
  $ionicPlatform.ready(function() {
    if(window.cordova && window.cordova.plugins.Keyboard) {
      // Hide the accessory bar by default (remove this to show the accessory bar above the keyboard
      // for form inputs)
      cordova.plugins.Keyboard.hideKeyboardAccessoryBar(true);

      // Don't remove this line unless you know what you are doing. It stops the viewport
      // from snapping when text inputs are focused. Ionic handles this internally for
      // a much nicer keyboard experience.
      cordova.plugins.Keyboard.disableScroll(true);
    }
    if(window.StatusBar) {
      StatusBar.styleDefault();
    }

    DatabaseValues.setup();
    DatabaseValues.bancoDeDados.transaction(function(transacao){
      transacao.executeSql('CREATE TABLE IF NOT EXISTS agendamentos (id INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT,nome VARCHAR(300), endereco VARCHAR(300), email VARCHAR(300), dataAgendamento VARCHAR(40), modelo VARCHAR(100), preco VARCHAR(50), confirmado BOOLEAN);', [])
    });
  });
})

database.value.js

angular.module('starter')
.value('DatabaseValues', {
    bancoDeDados : null,
    setup : function(){
        this.bancoDeDados = window.openDatabase('aluraCar', '1.0', 'Banco de dados da apliacacao', 3000);
    }
})

routes.js

angular.module('starter')
.config(function($stateProvider, $urlRouterProvider){

    $urlRouterProvider.otherwise('/login');

    $stateProvider

    .state('app', {
        url : '/app',
        templateUrl : 'templates/menu.html',
        abstract : true,
        controller : 'MenuController' 
    })

    .state('app.perfil', {
        url : '/perfil',
        views : {
            'menuContent' : {
                templateUrl : 'templates/perfil.html',
                controller : 'PerfilController'
            }
        }    
    })

    .state('app.listagem', {
        url : '/listagem',
        views : {
            'menuContent' : {
                templateUrl : 'templates/listagem.html',
                controller : 'ListagemController'
            }
        }    
    })
    .state('app.agendamentos', {
        url : '/agendamentos',
        views : {
            'menuContent' : {
                templateUrl : 'templates/agendamentos.html',
                controller : 'AgendamentosController'
            }
        }    
    })

    .state('app.carroescolhido', {
        url : '/carroescolhido/:carro',
        views : {
            'menuContent' : {
                templateUrl : 'templates/carroescolhido.html',
                controller : 'CaroEscolhidoController'
            }
        }
    })
    .state('app.finalizarpedido', {
        url : '/finalizarpedido/:carro',
        views : {
            'menuContent' : {
                templateUrl : 'templates/finalizarpedido.html',
                controller : 'FinalizarPedidoController'
            }
        }

    })

    .state('login', {
        url : '/login',
        templateUrl : 'templates/login.html',
        controller : 'LoginController'
    });
})

listagem.html

<ion-view>
    <ion-nav-title>Alura Car</ion-nav-title>
    <ion-content>
        <ion-list>
            <ion-item ng-repeat="carro in listaDeCarros" href="#/app/carroescolhido/{{carro}}">
            {{carro.nome}} - R{{carro.preco | currency}}
            </ion-item>  
         </ion-list>
      </ion-content>
</ion-view>

Postei todos os controllers pois eu estava tentando revisar eles antes de começar a aula 8, como nao achei onde esta erro da seta talvez alguem possa me ajudar. Sobre quando nao grava no iphone os agendamentos nao sei o pq esta acontecendo isso logo resolvi colocar tudo que tenho do banco de dados. Se alguem puder me ajudar nao sei mais onde olhar, pode ser algum ponto e virgula que esteja faltando no erro de ir para a tela de listagem, alguém pode me dar um help ? gostaria de tentar arrumar antes de começar a ultima aula sobre ionic.

Sobre funcionar no Chrome e não no Firefox, eu não vejo problema. Os dois browser funcionam diferentes e o Ionic não tem nada especifico para funcionar em cada Browser, então eu não me importaria com esse erro. Continue com Chrome e importe com os erros no dispositivo e não no firefox.

Veja nas nossas aulas a questão do menu lateral e como foi implementado, assim vc pode ver oq está acontecendo com o seu.

Quando vc está escolhendo um carro e depois volta e está preenchido, é pq o data-model já está populado. Se vc limpar ele, ele não vai estar marcado com os valores que vc escolheu antes.

obs: Separe as duvidas em perguntas diferentes, assim é mais fácil para alguem te ajudar e saber de qual parte do sistema vc está com problemas.

blz vou criar dois novos posts.

Dividi esse post em mais duas perguntas, vou deixar esse para falar sobre o banco de dados não esta gravando no ios, por isso eu relacionei isso com o Firefox. Sobre não funcionar no Firefox é que eu tenho uma mania de testar nos dois navegadores e você tem plena razão o importante é funcionar nos dispositivos mobile. Como você sugere que eu teste para tentar solucionar esse problema? estou perguntando isso pois não tenho muita experiência com ionic.

Sugiro sempre testar direto no dispositivo.

Sobre o agendamento que não esta salvando no iphone o que você acha que pode ser ?

Versão errada do seu código.

Vc arrumou algo, porém não compilou e rodou o código certo no IOS.

Essa parte do banco de dados de não mostrar o agendamento que foi feito eu não mexi em nada só apenas segui a aula e tinha testado no navegador(chrome). Depois de testar no celular duas vezes, no android esta funcionando corretamente, mas no iphone não.