In Angular 2-Dokument * und Vorlage wissen wir, dass * ngIf, * ngSwitch, * ngFor zum Tag ng-template erweitert werden kann. Meine Frage ist:
Ich denke, das ngIf
oder ngFor
ohne *
kann auch von der Angular Engine übersetzt und zum Template-Tag erweitert werden.
Der folgende Code
<hero-detail *ngIf="currentHero" [hero]="currentHero"></hero-detail>
wäre das gleiche wie
<ng-template [ngIf]="currentHero">
<hero-detail [hero]="currentHero"></hero-detail>
</ng-template>
Warum also ein seltsames Symbol mit einem Sternchen ( *
) in Winkel 2 entwerfen ?
javascript
angular
Maxisacoder
quelle
quelle
<template>
Tags nicht gesehen, da die*
Präfixsyntax es uns ermöglichte, diese Tags zu überspringen und uns direkt auf das HTML-Element zu konzentrieren, das wir einschließen, ausschließen oder wiederholen.Antworten:
Die Asterisk-Syntax ist ein syntatischer Zucker für eine wortreichere Template-Syntax, zu der die Direktive unter der Haube erweitert wird. Sie können jede dieser Optionen verwenden.
Zitat aus den Dokumenten :
quelle
ngIf="expression"
ist keine Eingabebindung. Wenn Sie den Wert von DOM erhalten, handelt es sich um eine Zeichenfolge. 2. Das Framework muss überngIf
den Sonderfall Bescheid wissen . Sicher, die Angabe eines booleschen Attributs irgendwo in DDO reicht aus, aber Sie müssen sich mit Code / Dokumenten befassen, um den Unterschied zwischen regulärem Attribut und Zucker der Strukturanweisung zu erkennen. 3. Eckige Klammern, Aserisk, Klammern und deren Fehlen geben deutlich an, was mit dem Vorlagenleser los ist.Angular2 bietet eine spezielle Art von Richtlinien - Strukturrichtlinien
Strukturanweisungen basieren auf dem
<template>
Tag.Die
*
vor dem Attributselektor zeigt an, dass eine strukturelle Richtlinie anstelle einer normalen Attribut Richtlinie oder Eigenschaft angewandt werden soll verbindlich. Angular2 erweitert die Syntax intern zu einem expliziten<template>
Tag.Seit final gibt es auch das
<ng-container>
Element, das ähnlich wie das<template>
Tag verwendet werden kann, aber die allgemeinere Kurzhandsyntax unterstützt. Dies ist beispielsweise erforderlich, wenn zwei strukturelle Richtlinien auf ein einzelnes Element angewendet werden sollen, was nicht unterstützt wird.quelle
Angular behandelt Vorlagenelemente auf besondere Weise. Die
*
Syntax ist eine Verknüpfung, mit der Sie das gesamte<template>
Element ungültig schreiben können . Lassen Sie mich Ihnen zeigen, wie es funktioniert.mit diesem
entzuckert es in
welche Zucker in
Auch die Strukturanweisungen von Angular wie ngFor, ngIf usw. werden vorangestellt, um
*
sich von diesen benutzerdefinierten Anweisungen und Komponenten zu unterscheidenSehen Sie hier mehr
https://vsavkin.com/angular-2-template-syntax-5f2ee9f13c6a#.rcffirs7a
quelle
Aus Angular-Dokumenten :
Strukturanweisungen sind für das HTML-Layout verantwortlich. Sie formen oder formen die Struktur des DOM, normalerweise durch Hinzufügen, Entfernen oder Bearbeiten von Elementen.
Strukturrichtlinien sind leicht zu erkennen. Vor dem Attributnamen der Direktive steht wie in diesem Beispiel ein Sternchen (*).
quelle
Manchmal brauchen Sie
<a *ngIf="cond">
zum Beispiel, wenn es nur ein Tag ist. Manchmal möchten Sie die ngIf möglicherweise um mehrere Tags herum platzieren, ohne ein echtes Tag als Wrapper zu haben, das Sie zum<template [ngIf]="cond">
Tag führt. Wie kann Angular wissen, ob der Eigentümer der ngIf-Direktive im Endergebnis HTML angezeigt werden soll oder nicht? Es geht also nicht nur darum, den Code klarer zu machen. Es ist ein notwendiger Unterschied.quelle