Solucionado (ver solução)
Solucionado
(ver solução)
5
respostas

Erro após finalizar o pedido:

Eu obtive um erro no console após apertar o botão de finalizar. Sabem me dizer a que se refere esse erro? Obrigado!


Error: [ngModel:nonassign] Expression 'dataSelecionada | date : 'dd/MM/yyyy'' is non-assignable. Element: <input type="text" ng-model="dataSelecionada | date : 'dd/MM/yyyy'" ng-focus="abrirPopupCalendario()" class="ng-pristine ng-untouched ng-valid">
http://errors.angularjs.org/1.5.3/ngModel/nonassign?p0=dataSelecionada%20%7CNaNate%20%3A%20'dd%2FMM%2Fyyyy'&p1=%3Cinput%20type%3D%22text%22%20ng-model%3D%dataSelecionada%20%7C%date%20%3A%20'dd%2FMM%2Fyyyy'%22%20ng-focus%3D%22abrirPopupCalendario()%22%20class%3D%22ng-pristine%20ng-untouched%20ng-valid%22%3E
    at http://192.168.25.7:8100/lib/ionic/js/ionic.bundle.js:13443:12
    at NgModelController.$$setOptions (http://192.168.25.7:8100/lib/ionic/js/ionic.bundle.js:39505:13)
    at ngModelPreLink (http://192.168.25.7:8100/lib/ionic/js/ionic.bundle.js:40329:21)
    at invokeLinkFn (http://192.168.25.7:8100/lib/ionic/js/ionic.bundle.js:22998:9)
    at nodeLinkFn (http://192.168.25.7:8100/lib/ionic/js/ionic.bundle.js:22376:11)
    at compositeLinkFn (http://192.168.25.7:8100/lib/ionic/js/ionic.bundle.js:21708:13)
    at compositeLinkFn (http://192.168.25.7:8100/lib/ionic/js/ionic.bundle.js:21711:13)
    at compositeLinkFn (http://192.168.25.7:8100/lib/ionic/js/ionic.bundle.js:21711:13)
    at compositeLinkFn (http://192.168.25.7:8100/lib/ionic/js/ionic.bundle.js:21711:13)
    at compositeLinkFn (http://192.168.25.7:8100/lib/ionic/js/ionic.bundle.js:21711:13)(anonymous function) @ ionic.bundle.js:26799(anonymous function) @ ionic.bundle.js:23512invokeLinkFn @ ionic.bundle.js:23000nodeLinkFn @ ionic.bundle.js:22376compositeLinkFn @ ionic.bundle.js:21708compositeLinkFn @ ionic.bundle.js:21711compositeLinkFn @ ionic.bundle.js:21711compositeLinkFn @ ionic.bundle.js:21711compositeLinkFn @ ionic.bundle.js:21711nodeLinkFn @ ionic.bundle.js:22392compositeLinkFn @ ionic.bundle.js:21708nodeLinkFn @ ionic.bundle.js:22392compositeLinkFn @ ionic.bundle.js:21708publicLinkFn @ ionic.bundle.js:21588self.appendViewElement @ ionic.bundle.js:59915render @ ionic.bundle.js:57901init @ ionic.bundle.js:57821self.render @ ionic.bundle.js:59767self.register @ ionic.bundle.js:59725updateView @ ionic.bundle.js:65400(anonymous function) @ ionic.bundle.js:65377$broadcast @ ionic.bundle.js:30723$state.transition.resolved.then.$state.transition @ ionic.bundle.js:52162processQueue @ ionic.bundle.js:29132(anonymous function) @ ionic.bundle.js:29148$eval @ ionic.bundle.js:30400$digest @ ionic.bundle.js:30216$apply @ ionic.bundle.js:30508(anonymous function) @ ionic.bundle.js:26548defaultHandlerWrapper @ ionic.bundle.js:16792eventHandler @ ionic.bundle.js:16780triggerMouseEvent @ ionic.bundle.js:2953tapClick @ ionic.bundle.js:2942tapMouseUp @ ionic.bundle.js:3018
5 respostas
solução!

O problema ocorre por causa desta linha do arquivo templates/finalizarpedido.html

  <input type="text" ng-focus="abrirPopupCalendario()" ng-model="dataSelecionada | date : 'dd/MM/yyyy'">

A variavel definida no scope chamada "dataSelecionada" está vazia, por isso ocorre erro ao tentar aplicar o filtro, ela somente é carregada depois de clicar no campo e selecionar uma data pelo datepicker.

Uma forma de contornar o problema seria apagar o filtro e aplicar o formato de data na hora da seleção. Uma solução seria alterar este campo desta forma:

 <input type="text" ng-focus="abrirPopupCalendario()" ng-model="dataSelecionada">

e alterar o controller finalizarPedido desta forma:

$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); 
             }, 
             weeksList: ['D', 'S', 'T', 'Q', 'Q', 'S', 'S']
        };
        ionicDatePicker.openDatePicker(configuracoes);
    }

Obrigado Daniel. Essa forma de contornar o problema parece mais complicada. Se eu deixar como está terá algum problema? Causará alguma instabilidade ou problema no sistema? Valeu

Apesar do erro do console que aparece ao abrir a view do finalizar pedido, eu não percebi nenhum problema de desempenho, mas, o ideal é não ter erros de console.

Uma outra forma de contornar o problema (eu não testei) seria definir um valor padrão para a variável "dataSelecionada", creio que se você definir ela com o valor padrão da data de hoje o filtro possa ser mantido.

Porem, abrir a view com o campo de data preenchido pode não ser interessante. Por isso que eu sugeri esta solução, para manter o campo vazio ao abrir sem aparecer a mensagem de erro no console.

Valeu Daniel

Só mais um adicional, caso escolha deixar com a mensagem de erro, ao tentar faze validações no formulário como o ng-required por exemplo, não irá funcionar

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