Detaillierte Erläuterung der Angular-Strukturdirektivenmodule und -Stile

Detaillierte Erläuterung der Angular-Strukturdirektivenmodule und -Stile

1. Strukturelle Anweisungen

* ist eine Syntaxvereinfachung, <a *ngIf="user.login">logout</a> ist gleichbedeutend mit

<ng-template [ngIf]="Benutzer.login">

<a>Beenden</a>

</ng-Vorlage>

Vermeiden Sie das Schreiben von ng-template.

<ng-template [ngIf]="Artikel.Erinnerung">
      <Mat-Symbol>
        Alarm
      </mat-Symbol>
    </ng-Vorlage>
    
    <!-- <mat-icon *ngIf="item.reminder">
      Alarm
    </mat-icon> -->

Warum können Strukturanweisungen die Struktur verändern?

ngIf-Quellcode

Die Set-Methode wird als @Input markiert. Wenn die Bedingung erfüllt ist und keine Ansicht vorhanden ist, wird das interne Flag hasView auf true gesetzt und eine untergeordnete Ansicht gemäß der Vorlage über viewContainer erstellt.

Wenn die Bedingung nicht erfüllt ist, wird der Inhalt des Ansichtscontainers gelöscht.

viewContainerRef: Container, der Container der Ansicht, in der sich die Anweisung befindet

Modul

Was ist ein Modul? Eine Sammlung von Dateien mit unabhängigen Funktionen, die zum Organisieren von Dateien verwendet wird.

Modul-Metadaten

entryComponents: Werden sofort beim Eintritt in das Modul (z. B. ein Dialogfeld) geladen und nicht erst beim Aufruf.

Exporte: Wenn Sie die internen Inhalte des Moduls öffentlich machen möchten, müssen Sie diese exportieren.

Was ist forRoot()?

Importe: [RouterModule.forRoot(Routen)],

Importe: [RouterModule.forChild(route)];

Tatsächlich sind forRoot und forChild zwei statische Factory-Methoden.

Konstruktor (Wächter: beliebig, Router: Router);
    /**
     * Erstellt ein Modul mit allen Router-Providern und -Direktiven. Es richtet optional auch ein
     * Anwendungslistener zur Durchführung einer ersten Navigation.
     *
     * Optionen (siehe „ExtraOptions“):
     * * „enableTracing“ bewirkt, dass der Router alle seine internen Ereignisse in der Konsole protokolliert.
     * * `useHash` aktiviert die Standortstrategie, die das URL-Fragment anstelle des Verlaufs verwendet
     * API.
     * * „initialNavigation“ deaktiviert die anfängliche Navigation.
     * * „errorHandler“ bietet einen benutzerdefinierten Fehlerhandler.
     * * „preloadingStrategy“ konfiguriert eine Vorladestrategie (siehe „PreloadAllModules“).
     * * `onSameUrlNavigation` konfiguriert, wie der Router die Navigation zur aktuellen URL handhabt. Siehe
     * „ExtraOptions“ für weitere Einzelheiten.
     * * `paramsInheritanceStrategy` definiert, wie der Router Parameter, Daten und aufgelöste Daten zusammenführt
     * von übergeordneten zu untergeordneten Routen.
     */
    statisch für Root (Routen: Routen, Konfiguration?: ExtraOptionen): ModuleWithProviders<RouterModule>;
    /**
     * Erstellt ein Modul mit allen Router-Direktiven und einem Provider, der Routen registriert.
     */
    statisch für Kind (Routen: Routen): ModuleWithProviders<RouterModul>;
}

Die Metadaten ändern sich je nach Situation. Es gibt keine Möglichkeit, Metadaten dynamisch anzugeben. Schreiben Sie keine Metadaten. Erstellen Sie direkt eine statische Engineering-Methode und geben Sie ein Modul zurück.

Schreiben Sie ein forRoot()

Erstellen Sie ein Servicemodul:$ ng gm services

importiere { NgModule } von '@angular/core';
importiere { CommonModule } von '@angular/common';

@NgModule({
  Deklarationen: [],
  Importe: [
    Gemeinsames Modul
  ]
})
exportiere Klasse ServicesModule { }

Die Metadaten im ServiceModul werden nicht mehr benötigt. Wird von einer statischen Methode für Root zurückgegeben.

importiere { NgModule, ModuleWithProviders } von '@angular/core';
importiere { CommonModule } von '@angular/common';

@NgModule()
exportiere Klasse ServicesModule { 
  statisch fürRoot():ModuleMitProvidern{
    zurückkehren {
      ngModule: DiensteModul,
      Anbieter:[]
    }
  }
}

Beim Importieren in das Kernmodul verwenden

Importe: [ServicesModule.forRoot();]

3. Stildefinition

ngClass, ngStyle und [class.yourclass]

ngClass: Wird verwendet, um unter bestimmten Bedingungen dynamisch Stilklassen anzugeben. Es eignet sich für Situationen, in denen eine große Anzahl von Stiländerungen vorgenommen wird. Vordefinierte Klassen.

<mat-list-item class="container" [@item]="widerPriority" [ngClass]="{
  'Priorität-normal':Element.Priorität===3,
  'Priorität wichtig':item.priority===2,
  „Notfallpriorität“:item.priority===1
}"

ngStyle: Wird verwendet, um Stile unter bestimmten Bedingungen dynamisch anzugeben, geeignet für Situationen mit kleinen Änderungen. Beispielsweise im folgenden Beispiel [ngStyle]="{'order':list.order}". Schlüssel ist eine Zeichenfolge.

[class.yourclass]: [class.yourclass] = „Bedingung“ entspricht direkt einer Bedingung. Diese Voraussetzung ist erfüllt, damit diese Klasse angewendet werden kann. Es entspricht der Schreibweise von ngClass, was einer Variante und Abkürzung von ngClass entspricht.

<div Klasse = "Inhalt" mat-line [Klasse.abgeschlossen] = "Element.abgeschlossen">
    <span [matTooltip]="item.desc">{{item.desc}}</span>
</div>

Verwenden Sie ngStyle, um die Reihenfolge beim Ziehen anzupassen

Das Prinzip besteht darin, die Reihenfolge des Flex-Container-Stils dynamisch als Reihenfolge im Listenmodellobjekt anzugeben.

1. Reihenfolge zur App-Aufgabenliste in TaskHome hinzufügen

Der Listencontainer ist ein flexibler Container und seine Anordnungsreihenfolge wird entsprechend der Reihenfolge sortiert.

<app-task-list *ngFor="Liste der Listen veröffentlichen" 
  Klasse="Listencontainer"
  app-droppable="true"
  [dropTags]="['Aufgabenelement','Aufgabenliste']"
  [dragEnterClass]="'ziehen-eingeben'"
  [app-draggable]="wahr"
  [dragTag]="'Aufgabenliste'"
  [draggedClass]="'ziehen-starten'"
  [dragData]="Liste"
  (gelöscht)="handleMove($event,list)"
  [ngStyle]="{'Reihenfolge': Liste.Reihenfolge}"
  >

2. Die Listendatenstruktur muss geordnet sein. Fügen Sie daher das Attribut order hinzu.

Listen = [
    {
      ID: 1,
      Name: "Aufgaben",
      Bestellung: 1,
      Aufgaben:
        {
          ID: 1,
          desc: "Aufgabe 1: Gehe zu Starbucks, um Kaffee zu kaufen",
          abgeschlossen: wahr,
          Priorität: 3,
          Eigentümer:
            ID: 1,
            Name: "Zhang San",
            Avatar: „avatars:svg-11“
          },
          Fälligkeitsdatum: neues Datum(),
          Erinnerung: neues Datum()
        },
        {
          ID: 2,
          desc: „Aufgabe 1: Erledigen Sie die vom Chef zugewiesene PPT-Aufgabe“,
          abgeschlossen: falsch,
          Priorität: 2,
          Eigentümer:
            ID: 2,
            Name: "Li Si",
            Avatar: „avatare:svg-12“
          },
          Fälligkeitsdatum: neues Datum()
        }
      ]
    },
    {
      ID: 2,
      Name: "In Bearbeitung",
      Bestellung:2,
      Aufgaben:
        {
          ID: 1,
          desc: "Aufgabe 3: Überprüfung des Projektcodes",
          abgeschlossen: falsch,
          Priorität: 1,
          Eigentümer:
            ID: 1,
            Name: "Wang Wu",
            Avatar: „avatare:svg-13“
          },
          Fälligkeitsdatum: neues Datum()
        },
        {
          ID: 2,
          desc: "Aufgabe 1: Einen Projektplan entwickeln",
          abgeschlossen: falsch,
          Priorität: 2,
          Eigentümer:
            ID: 2,
            Name: "Li Si",
            Avatar: „avatare:svg-12“
          },
          Fälligkeitsdatum: neues Datum()
        }
      ]
    }
  ];

3. Ändern Sie die Reihenfolge, wenn Sie die Liste ziehen, um die Reihenfolge zu ändern

Vertauschen Sie die Reihenfolge der beiden Quelllisten und der Zielliste

handleMove(Quellendaten,Zielliste){
    Schalter (srcData.tag) {
      Fall ‚Aufgabenelement‘:
        console.log('Element wird behandelt');
        brechen;
      Fall „Aufgabenliste“:
        console.log('Liste behandeln');
        const srcList = srcData.data;
        const tempOrder = srcList.order;
        srcList.order = zielList.order;
        Zielliste.Reihenfolge = temporäre Reihenfolge;
      Standard:
        brechen;
    }
  }

Oben finden Sie eine ausführliche Erläuterung der Angular-Strukturdirektivmodule und -Stile. Weitere Informationen zu Angular-Strukturdirektivmodulen und -Stilen finden Sie in den anderen verwandten Artikeln auf 123WORDPRESS.COM!

Das könnte Sie auch interessieren:
  • Detaillierte Erläuterung der Angular2-Module und gemeinsam genutzten Module
  • Angular-Build-Prozess für Multimodulprojekte
  • Spezifische Verwendung des Angular2 NgModel-Moduls
  • Beispiel für die Implementierung des Vorladens verzögerter Module durch Angular
  • Detaillierte Erklärung zum Lazy Loading von Angular-Modulen mittels Routing
  • Eine kurze Erläuterung der Lazy-Loading-Methode von Angular2-Modulen
  • Detaillierte Erläuterung der Implementierung gemeinsam genutzter Module in Angular-Projekten

<<:  Detaillierte Erklärung zur Verwendung von Docker zum Erstellen von extern zugänglichem MySQL

>>:  Detailliertes Tutorial-Diagramm zur Installation der dekomprimierten Version von MySQL5.7.21

Artikel empfehlen

VMWare15 installiert Mac OS-System (grafisches Tutorial)

Installationsumgebung Windows 10 VMware Workstati...

So implementieren Sie eine steuerbare gepunktete Linie mit CSS

Vorwort Die Verwendung von CSS zum Generieren gep...

Wann ist die Verwendung von dl, dt und dd sinnvoll?

dl: Definitionsliste Definitionsliste dt: Definiti...

So ändern Sie den Bildlaufleistenstil in Vue

Inhaltsverzeichnis Zunächst müssen Sie wissen, da...

MySQL-Optimierung: InnoDB-Optimierung

Lernpläne werden leicht unterbrochen und es ist s...

Front-End-JavaScript versteht Funktions-Currying gründlich

Inhaltsverzeichnis 1. Was ist Curry 2. Verwendung...

Vue echarts realisiert horizontales Balkendiagramm

In diesem Artikel wird der spezifische Code von V...

Warum wird UTF-8 in MySQL nicht empfohlen?

Ich bin kürzlich auf einen Fehler gestoßen, als i...

Html+css, um reinen Text und Schaltflächen mit Symbolen zu erreichen

Dieser Artikel fasst die Implementierungsmethoden...

Zusammenfassung der Linux-Befehlsmethoden zum Anzeigen verwendeter Befehle

Im System werden viele Befehle verwendet. Wie kön...

Probleme mit Sperren in MySQL

Schlossklassifizierung: Aus der Granularität der ...

Implementierung von Portalen und Fehlergrenzbehandlung in React

Inhaltsverzeichnis Portale Fehlergrenzenbehandlun...

So installieren Sie MySQL 5.7 aus dem Quellcode in einer CentOS 7-Umgebung

Dieser Artikel beschreibt, wie MySQL 5.7 aus dem ...