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

Como acionar o submit do formulário via Componente Angular

Estou trabalhando em um projeto onde preciso acionar o submit dos formulários pelo componente, por exemplo, quando a pessoa clica em "Próximo" para passar para a próxima etapa, verifico se todos os formulários são válidos com "if(form1Exemplo.valid && formExemplo2.valid) return true", porem também preciso acionar o evento de submissão dos formulários, para que o mesmo ative a validação e marcar os campos, mas não consigo encontrar uma solução funcional na net. Já tentei usar esta solução do Stack Overflow: "https://stackoverflow.com/questions/47408404/how-to-trigger-angular-2-form-submit-from-component" sem sucesso.

Alguém já passou por algo do tipo e poderia compartilhar como solucionou?

Obrigado!

4 respostas

Alguém?

Fala aí Bruno, tudo bem? O que você pode fazer é buscar o form com um querySelector ou se precisar fazer server side render pode usar o PlatformBrowser.

A ideia é basicamente realizar o .submit(), algo parecido com:

const form: HTMLFormElement = document.querySelector('#my-form')
if (form) {
    form.submit();
}

Esse exemplo caso não precise de renderização no servidor.

Espero ter ajudado.

Matheus isso funciona, porém tenho outro problema, vou tentar explicar um pouco melhor o que está acontecendo ok?

Tenho um formulário reativo, que quando coloco um botão do tipo submit dentro do formulário e clico sobre ele, a validação dos campos é ativada impedindo que o formulário seja enviado.

Quero reproduzir esse mesmo comportamento, porém da forma que vc fez, quando eu dou o submit no form a página recarrega, quero apenas ativar um evento que ativa a validação do formulário através do componente entende?

Como tenho que validar vários formulários ao mesmo tempo não funcionaria ativar o evento submit do formulário pelo template.

solução!

Fala aí Bruno, o que você pode fazer então, é mudar o button:

<button (click)="validar()" type="button">Validar</button>

Assim ele irá chamar o método validar da nossa classe, nesse método podemos fazer um if para cada form verificando se está válido ou não através do .invalid:

validar() {
    console.log(this.form1.invalid);
    console.log(this.form2.invalid);
    console.log(this.form3.invalid);
}

Caso esteja inválido, ou seja, algum validador não foi atendido o retorno será true, porém, se tudo estiver certo, o retorno será false.

Espero ter ajudado.