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

this.ngControl.control[action]() com erro de compilação

Implementando o código da Diretiva de DisableControlDirective, ao iniciar a implementação do método ngOnchanges, há uma linha que no exemplo da aula não apresenta nenhum erro, mas no meu VSCode exibe a mensagem de erro na linha this.ngControl.control[action]();

  • Type Boolean has no call signatures

Segue o código completo da Diretiva

import { Directive, Input, OnChanges, SimpleChanges } from '@angular/core';
import { NgControl } from '@angular/forms';

@Directive({
    selector: '[appDisableControl]',
})
export class DisableControlDirective implements OnChanges {

    @Input()
    appDisableControl = false;

    constructor(
        private ngControl:    NgControl
    ) {}

    public ngOnChanges(pChanges: SimpleChanges): void {
        if ( pChanges.appDisableControl ) {
            const action = this.appDisableControl ? 'disabled' : 'enabled';

            this.ngControl.control[action]();
        }
    }

}

Ao remover os Parênteses, deixando assim this.ngControl.control[action] o erro de compilação não é mais exibido.

Onde posso estar errando?

3 respostas

A solução que achei foi invocar os Métodos enable() e disabled() do control da seguinte forma:

public ngOnChanges(pChanges: SimpleChanges): void {
        const ENABLED = 'enabled';
        const DISABLED = 'disabled';

        if ( pChanges.appDisableControl ) {
            const action = this.appDisableControl ? DISABLED : ENABLED;

            if ( action === DISABLED ) {
                this.ngControl.control.disable();
            } else if ( action === ENABLED ) {
                this.ngControl.control.enable();
            }
        }
    }
solução!

Olá Pedro, tudo bom?

É só corrigir o if ternário da const action para receber disable caso appDisableControl for true ou enable caso for false.

const action = this.appDisableControl ? 'disable' : 'enable';

Só essa correção já evita que você tenha que acrescentar mais 5 linhas ao seu código.

Espero ter ajudado, Pedro. Bons estudos.

Putz, era erro de digitação. Tinha um D no final de Disable e Enable, ficando Disabled e Enabled. Valeu pela ajuda, Diego!