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

So erstellen Sie Gitlab auf CentOS6

Vorwort Das ursprüngliche Projekt wurde im öffent...

Reflexion und Proxy in Front-End-JavaScript

Inhaltsverzeichnis 1. Was ist Reflexion? 2. Refle...

SQL-Implementierung von LeetCode (182. Doppelte Postfächer)

[LeetCode] 182.Doppelte E-Mails Schreiben Sie ein...

CSS zum Implementieren von QQ-Browserfunktionen

Code Wissenspunkte 1. Kombinieren Sie fullpage.js...

getdata Tabelle Tabellendaten Join MySQL-Methode

öffentliche Funktion json_product_list($where, $o...

Lösung für das Problem der Werteübergabe zwischen HTML-Seiten

Als ich den Aufsatz zum ersten Mal verwendete, füh...

MySQL-Index für Anfänger

Vorwort Da die wichtigste Datenstruktur im MySQL-...

Grafisches Tutorial zur Installation von MySQL 5.5.27

1. Installation von MySQL 1. Öffnen Sie die herun...

Linux entfernt node.js vollständig und installiert es über den Befehl yum neu

erster Schritt Einmaliges Löschen mit der integri...

Beispiele und bewährte Vorgehensweisen für die Seitennummerierung

<br />Struktur und Hierarchie reduzieren die...