Closed vitorTheDev closed 4 years ago
Após estudar mais o problema, cheguei a conclusão que o problema era que o método setValueInFormControl
chamava a função AbstractControl.setValue
. Porém na verdade a classe AbstractControl
não implementa a função setValue
, e sim a classe FormControl
.
Na implementação do FormControl.setValue
, existe um parâmetro emitViewToModelChange
, que, por padrão, é considerado true
, e dita se o evento ngModelChange
será emitido. Por isso, a função setValueInFormControl
dispara o evento ngModelChange
, e no listener onNgModelChange
a função setValueInFormControl
é executada novamente, criando um loop infinito de execução levando ao RangeError: Maximum call stack size exceeded
.
A partir desta análise, voltei o evento onNgModelChange
#7533131, e em seguida adicionei um parâmetro opcional na função setValueInFormControl
#3f93c2a para que seja possível executar a função sem disparar o evento ngModelChange
, o que resolve o problema.
@netd777 ótimo! Funcionou perfeitamente. @amarkes poderia fazer o merge?
has done
Utilizando angular 9.1.2 com ivy habilitado encontrei o erro:
Ao investigar, identifiquei que o evento
onNgModelChange
estava sendo executado em loop infinitamente, causando travamentos. Consegui resolver o erro ao remover o evento. Em meus testes não encontrei nenhum efeito colateral desta remoção, porém seria interessante revisar/testar.