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

$scope.meuform undefined

Boa tarde,

Ao submeter um form que tenho na minha aplicação no retorno do POST $http quando tento usar $scope.meuform.$setPristine() ocorre o erro abaixo.

Cannot read property '$setPristine' of undefined

O $scope está injetado no meu controller e a minha view está dentro do meu ng-app e tbem o Controller foi vinculado na view via rota.

Não sei pq isso está acontecendo.

Form na view

    <form novalidate
          name="customerForm"
          ng-submit="controller.generateXMLCliente()">

Controller

    angular
        .module('home')
        .controller('HomeViewController', Controller);

    Controller.$inject = [
        'toaster',
        '$scope',
        '$http',
        '$state',
        '$stateParams',
        '$location',
        '$anchorScroll'
    ];

    function Controller(toaster,$scope,$http,$state,$stateParams,$location,$anchorScroll) {
        var self = this;

Conseguem me ajudar?

7 respostas

Oi Roger.

O name do seu form é customerForm. Então, em seu controller tem que fazer $scope.customerForm.... Você esta fazendo $scope.meuForm, não existe.

A mensagem do Angular avisou que $scope.meuForm não existe, ou seja, é undefined:

Cannot read property '$setPristine' of undefined

Oi @flavio eu coloquei o meuform apenas para ilustrar... no meu controller não aparece nenhum dos forms quando dou um console.log($scope). E eu estou usando como vc falou $scope.customerForm.$setPristine();

Puxa, ai complicou. Porque até onde eu sei, o formulário não estaria disponível em seu controller caso você não tivesse adicionado o atributo name no form em sua view. Você esta usando alguma lib extra, algum plugin ou algo parecido?

Qual versão do Angular você esta usando????????

Se você não esta usando $scopepode ser esse problema apontado aqui:

https://stackoverflow.com/questions/21574472/angularjs-cant-access-form-object-in-controller-scope

Nenhuma lib extra. Angular 1.6.4. Já estou pra ficar doido aqui... uma coisa estranha é que se eu coloco {{$scope}} em algum ponto da view era para aparecer os dados do $scope correto? Eu vi isso em um dos treinamentos, mas não aparece nada. :(

@Flavio, tentei com o que sugerem no link que vc enviou e nada. Continua o mesmo problema.

solução!

Consegui resolver mas de uma forma que eu achei bem "xunxo".

No ng-submit eu passei o form como parametro e assim consegui utilizar o $setPristine();

    <form novalidate
          name="customerForm"
          ng-submit="controller.generateXMLCliente(customerForm)"
          promise-btn>
          self.generateXMLCliente = function(form){
            form.$setPristine(); 
        }