Qu'est-ce que let- * dans les modèles Angular 2?


156

Je suis tombé sur une étrange syntaxe d'affectation dans un modèle Angular 2.

<template let-col let-car="rowData" pTemplate="body">
    <span [style.color]="car[col.field]">{{car[col.field]}}</span>
</template>

Il apparaît que let-colet let-car="rowData"créer deux nouvelles variables colet carqui peuvent ensuite être liées à l'intérieur du modèle.

Source: https://www.primefaces.org/primeng/#/datatable/templating

Comment s'appelle cette let-*syntaxe magique ?

Comment ça marche?

Quelle est la différence entre let-somethinget let-something="something else"?


4
@NiekT. c'est différent, let- * dans angulaire 2 est la portée de la variable du modèle
Sterling Archer

3
angular.io/docs/ts/latest/guide/... recherchez le mot "let" (avec un espace) et allez vers le 9e. Il y a une bonne explication de ce que fait cette variable de modèle
Sterling Archer

@SterlingArcher Merci pour la correction, je suis assez nouveau dans JS et Angular moi-même.
Nodon Darkeye

Réponses:


154

mettre à jour Angular 5

ngOutletContext a été renommé en ngTemplateOutletContext

Voir aussi https://github.com/angular/angular/blob/master/CHANGELOG.md#500-beta5-2017-08-29

original

Les modèles ( <template>ou <ng-template>depuis 4.x) sont ajoutés en tant que vues intégrées et reçoivent un contexte.

Avec let-colla propriété context $implicitest rendue disponible comme coldans le modèle pour les liaisons. Avec let-foo="bar"le contexte, la propriété barest disponible sous la forme foo.

Par exemple si vous ajoutez un modèle

<ng-template #myTemplate let-col let-foo="bar">
  <div>{{col}}</div>
  <div>{{foo}}</div>
</ng-template>

<!-- render above template with a custom context -->
<ng-template [ngTemplateOutlet]="myTemplate"
             [ngTemplateOutletContext]="{
                                           $implicit: 'some col value',
                                           bar: 'some bar value'
                                        }"
></ng-template>

Voir également cette réponse et ViewContainerRef # createEmbeddedView .

*ngForfonctionne également de cette façon. La syntaxe canonique rend cela plus évident

<ng-template ngFor let-item [ngForOf]="items" let-i="index" let-odd="odd">
  <div>{{item}}</div>
</ng-template>

NgForajoute le modèle comme vue intégrée au DOM pour chacun itemde itemset ajoute quelques valeurs ( item, index, odd) au contexte.

Voir aussi Utilisation de $ implict pour passer plusieurs paramètres


2
Merci d'avoir expliqué ngOutletContext. C'était le chaînon manquant entre ce que je savais déjà et les informations que je ne trouvais pas dans la documentation.
Steven Liekens

1
Je ne pense pas que ce soit appelé ngTemplateOutletContextcomme vous l'avez suggéré dans la version d'angular 5. La documentation ne mentionne pas non plus qu'il soit obsolète. angular.io/api/common/NgTemplateOutlet
Jessy

5 n'est pas encore publié. Je ne sais pas ce que montrent les documents. Le changelog n'a rien de nouveau depuis lors.
Günter Zöchbauer

1
Merci pour cette réponse, il y a un fort manque de documentation sur ce que fait la *syntaxe.
dook

Ne devrait pas être le deuxième ng-template (celui avec ngTemplateOutlet) vraiment ng-template. Peut-être que ng-container serait mieux? Les deux fonctionneront je suppose, mais le ng-container est sémantiquement plus correct. Ou ai-je tort?
Ondrej Peterka

0

La microsyntaxe angulaire vous permet de configurer une directive dans une chaîne compacte et conviviale. L'analyseur de microsyntaxe traduit cette chaîne en attributs sur le <ng-template>. Le mot clé let déclare une variable d'entrée de modèle que vous référencez dans le modèle.

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.