1
resposta

[Dúvida] @HostBinding('@fade') precisa mesmo de uma variavel true?

Em um dos vídeos, foi feito o seguinte código:

export class ModalComponent {
  @HostBinding('@fade') fade  = true;
  public config: ModalConfig;
}

Foi explicado que o @HostBinding('@fade') precisava de uma variavel true para funcionar no contexto da implementação, porém de curiosidade, tentei inserir um false no lugar do true e percebi que funciona do mesmo jeito. Continuei explorando e percebi que se ao invés de utilizar uma variavel com o nome de "fade", colocar qualquer coisa como por exemplo "calopsita" (o Flávio usa muito esse exemplo e é engraçado haha) e mesmo assim continua funcionando:

export class ModalComponent {
  @HostBinding('@fade') calopsita  = true;
  public config: ModalConfig;
}

Tentei também remover a variavel e deixar apenas o @HostBinding e continuou funcionando:

export class ModalComponent {
  @HostBinding('@fade') ;
  public config: ModalConfig;
}

Com isso, gostaria de saber se existe alguma forma de tornar condicional o @HostBinding('@fade') para realmente ativar ou desativar a transição.

Esse caso parece muito com o hidden que foi explicado no curso anterior, onde é necessário apenas estar presente na tag, independente se está com valor true ou false.

1 resposta

Oi Arian, tudo bem?

Desculpe a demora em retornar.

É ótimo ver seu interesse em entender melhor o funcionamento do @HostBinding('@fade') e suas possíveis variações. Vou explicar tudo de forma clara e educada, para que você possa compreender completamente o assunto.

Quando utilizamos o decorator @HostBinding('@fade') em um componente no Angular, estamos aplicando uma animação chamada "fade" ao componente em questão. Essa animação é definida no arquivo de estilos do componente usando a biblioteca de animação do Angular.

Agora, em relação à necessidade de ter uma variável booleana para que o @HostBinding('@fade') funcione, é importante entender como a animação é ativada. Quando usamos @HostBinding com um nome de propriedade, como fade, o Angular procura por uma propriedade correspondente no componente que tenha o mesmo nome. Nesse caso, ele procura por uma propriedade chamada fade.

A variável booleana que você mencionou (fade = true) é uma forma comum de ativar a animação. Quando ela é definida como true, a animação é aplicada e, quando definida como false, a animação é removida. No entanto, o Angular também permite outras variações.

Por exemplo, você mencionou que substituiu fade por calopsita e a animação continuou funcionando. Isso ocorre porque o nome da propriedade não é importante para o funcionamento da animação. O que importa é que ela exista e seja definida como true para ativar a animação ou false para desativá-la.

Além disso, você também mencionou que removeu completamente a variável, deixando apenas o @HostBinding('@fade'), e a animação ainda funcionou. Isso acontece porque o Angular entende que, se a propriedade não estiver definida ou for undefined, ela é considerada como true. Portanto, o resultado é o mesmo que se você tivesse definido a propriedade como true.

Quanto à sua pergunta sobre tornar o @HostBinding('@fade') condicional para ativar ou desativar a transição, é possível fazer isso utilizando uma expressão condicional na definição da propriedade. Por exemplo:

export class ModalComponent {
  @HostBinding('@fade') get fade() {
    return condição ? true : false;
  }
  public config: ModalConfig;
}

Nesse exemplo, condição é uma expressão que avalia se a transição deve ser ativada ou desativada. Se a condição for verdadeira, a animação será aplicada (true), caso contrário, ela será removida (false).

Dessa forma, você pode controlar dinamicamente a ativação e desativação da animação com base em condições específicas dentro do seu componente.

Espero que eu tenha conseguido esclarecer sua dúvida sobre o @HostBinding('@fade') e suas variações.

Um abraço e bons estudos.