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

Lösung für den Fehler beim Aufruf von Yum im Docker-Container

Beim Ausführen von yum im Dockerfile oder im Cont...

Quickjs kapselt JavaScript-Sandbox-Details

Inhaltsverzeichnis 1. Szenario 2. Vereinfachen Si...

Was bedeuten CN2, GIA, CIA, BGP und IPLC?

Was ist die CN2-Linie? CN2 steht für China Teleco...

So richten Sie geplante Sicherungsaufgaben in Linux CentOS ein

Implementierungsvorbereitung # Der Dateipfad muss...

So ändern Sie das ursprüngliche Passwort von MySQL auf dem MAC

Problembeschreibung: Ich habe einen Mac gekauft u...

So verwenden Sie dynamische Parameter und berechnete Eigenschaften in Vue

1. Dynamische Parameter Ab 2.6.0 können Sie einen...

MySQL-Batch entfernt Leerzeichen in einem bestimmten Feld

Gibt es in MySQL eine Möglichkeit, Leerzeichen st...

Grafisches Tutorial zur Installation und Konfiguration von MySQL 5.7.24

In diesem Artikel finden Sie das Installations- u...

Lassen Sie uns über die Speicher-Engine in MySQL sprechen

Grundlagen In einer relationalen Datenbank entspr...

Vue3 AST Parser-Quellcode-Analyse

Inhaltsverzeichnis 1. Generieren Sie einen abstra...

Mysql GTID Mha-Konfigurationsmethode

Gtid + Mha + Binlog-Serverkonfiguration: 1: Testu...

So installieren Sie Docker und konfigurieren Alibaba Cloud Image Accelerator

Docker-Installation Über die Installation auf ein...

Das kürzeste JS, um festzustellen, ob es sich um IE6 handelt (IE-Schreibmethode)

Häufig verwendeter JavaScript-Code zum Erkennen d...