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

Outra solução, revertendo a subscrição

Eu utilizei outra solução que considerei boa também, e queria compartilhar. Simplesmente subscrevi o getter pelo próprio elemento:

function domInjector(seletor: string) {

    return function(target: any, propertyKey: string) {

        const getter = function() {

            const elemento = document.querySelector(seletor) as HTMLElement;

            if(!elemento) {
                throw new Error(`${propertyKey} queria receber elemento de selector ${seletor}, que não foi encontrado`);
            }


            Object.defineProperty(this, propertyKey, 
                {  value: elemento
                });

            return elemento;
        }

        Object.defineProperty(target, propertyKey, {
            get: getter
        });



    }

}

2 respostas
solução!

Bom dia!

Sua resolução ficou excelente! Você fez um ótimo uso do aprendizado.

Parabéns pelo empenho nos estudos e continue praticando.

Para que mais pessoas consigam visualizar a sua solução proposta, é recomendado que você marque este tópico como solucionado. Assim pode ajudar ainda mais pessoas :)

Bons estudos!

Posso estar errado, mas pelo que entendi da sua solução você acessou o atributo da instância e atribuiu o elemento html. Testei aqui também e funcionou. Na hora que vi fiquei confuso porque me lembrei que o instrutor disse que não teríamos acesso a instância do controller, então rescreveríamos pelo protótipo da classe mesmo. Mas, se entendi direito, o fato de você ter acessado a instância dentro do getter (quando o controller já está instanciado) foi o que fez funcionar.