Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

113
Vistas
La micro sintaxis `as` no funciona con mi propia directiva

Quiero admitir la siguiente micro sintaxis:

 foo$ | async as xyz

Ejemplo:

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

Ese flujo se define como

 $foo = of('some value')

Aquí está mi directiva:

 @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); } }

MANIFESTACIÓN

Ahora, haga lo que haga, esa variable xyz siempre está indefinida.

Si creo un contexto (que se sugiere en esta publicación)

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

MANIFESTACIÓN

Obtengo el mismo resultado. ¿Alguna sugerencia de lo que hago mal aquí?

over 4 years ago · Santiago Trujillo
2 Respuestas
Responde la pregunta

0

La expresión debe estar disponible en el contexto con el mismo nombre que la propia directiva, que en este caso es appVar :

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

Manifestación

Compárelo con la directiva ngIf :

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

y al TuiLetContext :

 get $implicit(): T { return this.internalDirectiveInstance.tuiLet; } get tuiLet(): T { return this.internalDirectiveInstance.tuiLet; }
over 4 years ago · Santiago Trujillo Denunciar

0

La única forma que conozco es usar "let" y no "as". Algo como

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

Y use

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

Pero siento que no es lo que buscas :(

over 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda