Dans le document angular 2, * et le modèle , nous savons que les balises * ngIf, * ngSwitch, * ngFor peuvent être développées en balise ng-template. Ma question est:
Je pense que le ngIf
ou ngFor
sans *
peut également être traduit et développé en balise de modèle par le moteur angulaire.
Le code suivant
<hero-detail *ngIf="currentHero" [hero]="currentHero"></hero-detail>
serait le même que
<ng-template [ngIf]="currentHero">
<hero-detail [hero]="currentHero"></hero-detail>
</ng-template>
Alors pourquoi se donner la peine de concevoir un astérisque de symbole étrange ( *
) en angulaire 2?
javascript
angular
angular-directive
maxisacoder
la source
la source
<template>
balises car la*
syntaxe du préfixe nous permettait d'ignorer ces balises et de nous concentrer directement sur l'élément HTML que nous incluons, excluons ou répétons.Réponses:
La syntaxe Asterisk est un sucre syntaxique pour une syntaxe de modèle plus verbeuse à laquelle la directive se développe sous le capot, vous êtes libre d'utiliser l'une de ces options.
Citation de la documentation :
la source
ngIf="expression"
n'est pas une liaison d'entrée. Si vous obtenez la valeur de DOM, ce sera une chaîne. 2. Le cadre devra connaîtrengIf
et d'autres étant le cas particulier. Bien sûr, spécifier un attribut booléen quelque part sur DDO fera l'affaire, mais vous devez consulter le code / la documentation afin de connaître la différence entre l'attribut normal et le sucre de directive structurelle. 3. Les crochets, les risques, les parenthèses et leur absence propagent clairement ce qui se passe dans le lecteur de modèles.Angular2 propose un type spécial de directives - Directives structurelles
Les directives structurelles sont basées sur l'
<template>
étiquette.L'
*
avant le sélecteur d'attribut indique qu'une directive structurelle doit être appliquée au lieu d'une directive d'attribut normale ou d'une liaison de propriété. Angular2 développe en interne la syntaxe en une<template>
balise explicite .Depuis final, il y a aussi l'
<ng-container>
élément qui peut être utilisé de la même manière que la<template>
balise mais qui prend en charge la syntaxe abrégée plus courante. Ceci est par exemple nécessaire lorsque deux directives structurelles doivent être appliquées à un seul élément, qui n'est pas pris en charge.<ng-container *ngIf="boolValue"> <div *ngFor="let x of y"></div> </ng-container>
la source
Angular traite les éléments du modèle d'une manière spéciale. La
*
syntaxe est un raccourci qui vous permet d'annuler l'écriture de l'<template>
élément entier . Laissez-moi vous montrer comment cela fonctionne.en utilisant ceci
*ngFor="let t of todos; let i=index"
le désucre en
template="ngFor: let t of todos; let i=index"
qui désucre en
<template ngFor [ngForOf]="todos" .... ></template>
également les directives structurelles d'angular comme ngFor, ngIf, etc. préfixées par
*
juste pour se différencier de ces directives et composants personnalisésvoir plus ici
https://vsavkin.com/angular-2-template-syntax-5f2ee9f13c6a#.rcffirs7a
la source
À partir de la documentation Angular :
Les directives structurelles sont responsables de la mise en page HTML. Ils façonnent ou remodèlent la structure du DOM, généralement en ajoutant, supprimant ou manipulant des éléments.
Les directives structurelles sont faciles à reconnaître. Un astérisque (*) précède le nom de l'attribut de directive comme dans cet exemple.
<p *ngIf="userInput">{{username}}</p>
la source
Parfois, vous pouvez avoir besoin,
<a *ngIf="cond">
par exemple, lorsqu'il ne s'agit que d'une seule balise. Parfois, vous voudrez peut-être placer le ngIf autour de plusieurs balises sans avoir une vraie balise comme wrapper qui vous amène à la<template [ngIf]="cond">
balise. comment angular peut-il savoir s'il doit rendre le propriétaire de la directive ngIf dans le résultat final html ou non? c'est donc plus que simplement rendre le code plus clair. c'est une différence nécessaire.la source