Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

115
Visualizações
Micro syntax `as` not working with my own directive

I want to support the following micro syntax:

foo$ | async as xyz

Example:

<p *appVar="foo$ | async as xyz">
   Value is {{ xyz }}!
</p>

That stream is defined as

$foo = of('some value')

Here is my directive:

@Directive({
   selector: '[appVar]'
})
export class VarDirective<T> {
   @Input() appVar: T;

   constructor(
      private templateRef: TemplateRef<T>,
      private viewContainer: ViewContainerRef
   ) {}

   ngOnInit(): void {
      this.viewContainer.createEmbeddedView(this.templateRef);
   }
}

DEMO

Now, whatever I do, that xyz variable is always undefined.

If I create a context (which is suggested in this post)

 const context = { $implicit: this.appVar };
 this.viewContainer.createEmbeddedView(this.templateRef, context);

DEMO

I get the same result. Any suggestions what I do wrong here?

over 4 years ago · Santiago Trujillo
2 Respostas
Responde à pergunta

0

The expression has to be available in the context under the same name as the directive itself, which is appVar in this case:

this.viewContainer.createEmbeddedView(this.templateRef, {
  $implicit: this.appVar,
  appVar: this.appVar
});

Demo

Compare it to the built-in ngIf directive:

@Input()
set ngIf(condition: any) {
  this._context.$implicit = this._context.ngIf = condition;
  this._updateView();
}

and to the TuiLetContext:

get $implicit(): T {
  return this.internalDirectiveInstance.tuiLet;
}

get tuiLet(): T {
  return this.internalDirectiveInstance.tuiLet;
}
over 4 years ago · Santiago Trujillo Relatório

0

The only way I know is using "let" not "as". Some like

@Input() appVar

ngOnInit(): void {
    this.viewContainer.createEmbeddedView(this.templateRef,
                {$implicit:this.appVar});
}

And use

<p *appVar="foo$ | async;let data">
  Value is {{ data}}!
</p>

But I feel that it's not what are you looking for :(

over 4 years ago · Santiago Trujillo Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda