Workshop zur Entwicklung mobiler Apps mit Ionic und Angular | Michael Callaghan | Skillshare

Playback-Geschwindigkeit


1.0x


  • 0.5x
  • 0.75x
  • 1x (normal)
  • 1.25x
  • 1.5x
  • 1.75x
  • 2x

Workshop zur Entwicklung mobiler Apps mit Ionic und Angular

teacher avatar Michael Callaghan, Lead Ionic Developer

Schau dir diesen Kurs und Tausende anderer Kurse an

Erhalte unbegrenzten Zugang zu allen Kursen
Lerne von Branchenführern, Ikonen und erfahrenen Experten
Wähle aus einer Vielzahl von Themen, wie Illustration, Design, Fotografie, Animation und mehr

Schau dir diesen Kurs und Tausende anderer Kurse an

Erhalte unbegrenzten Zugang zu allen Kursen
Lerne von Branchenführern, Ikonen und erfahrenen Experten
Wähle aus einer Vielzahl von Themen, wie Illustration, Design, Fotografie, Animation und mehr

Einheiten dieses Kurses

    • 1.

      CoursePromo

      1:48

    • 2.

      Einführung in Ionic: Erstelle deine erste App

      121:20

    • 3.

      Verbesserte Benutzererfahrung: Fortgeschrittene ionische Komponenten

      85:41

    • 4.

      Formulargenerierung und Validierung in Ionic

      114:58

    • 5.

      Vom Prototyp bis zum Launch: Entwickle iOS- und Android-Apps mit Ionic

      84:38

  • --
  • Anfänger-Niveau
  • Fortgeschrittenes Niveau
  • Fortgeschrittenes Niveau
  • Jedes Niveau

Von der Community generiert

Das Niveau wird anhand der mehrheitlichen Meinung der Teilnehmer:innen bestimmt, die diesen Kurs bewertet haben. Bis das Feedback von mindestens 5 Teilnehmer:innen eingegangen ist, wird die Empfehlung der Kursleiter:innen angezeigt.

55

Teilnehmer:innen

1

Projekte

Über diesen Kurs

Verwandle deine Vision für eine mobile App in die Realität mit diesem transformativen Kurs, der für aufstrebende und erfahrene Entwickler konzipiert wurde. Ganz gleich, ob du voller innovativer App-Ideen bist, aber nicht über das technische Team verfügst, um sie auf den Android- und iOS-Plattformen zum Leben zu erwecken, über Kenntnisse in der Webentwicklung verfügst und davon träumst, deine App in den App Stores zu sehen, oder ob du eifrig in die mobile Webentwicklung eintauchen möchtest, aber nicht sicher bist, wo du anfangen sollst, dieser Kurs ist auf dich zugeschnitten.

Stell dir vor einer gewaltigen Herausforderung: Ein kritischer Geschäftsbetrieb ist aufgrund der Einstellung des Hardware-Supports gefährdet. Angesichts der Notwendigkeit einer schnellen und effektiven Lösung fällt die Wahl zwischen der Entwicklung separater Apps für Android und iOS oder der Suche nach einem einheitlichen Entwicklungsansatz schwer. Dieser Kurs basiert auf realen Herausforderungen und bietet eine leistungsstarke Lösung, bei der man nicht zwischen Kosten, Effizienz und Plattformabdeckung wählen muss.

Willkommen zu einem Workshop, in dem Unmöglichkeiten in Erfolge verwandelt werden. Unter Nutzung der hochmodernen Funktionen von Ionic, Angular und Capacitor wirst du die Geheimnisse der Entwicklung voll funktionsfähiger mobiler Anwendungen für iOS und Android mit einer einzigen Codebasis entdecken. Dieser Ansatz beschleunigt nicht nur die Entwicklungszeit, sondern senkt auch die Kosten erheblich.

Was du gewinnen wirst:

  • Session 1: Starte deine Reise mit einer Einführung in die Entwicklung des Ionic Frameworks. Am Ende dieser Session hast du deine erste App mit funktionalen Seiten erstellt.

  • Session 2: Verbessere die Hauptseite deiner App mit ausgeklügelten und benutzerfreundlichen Ionic-Komponenten, die die Benutzererfahrung verbessern.

  • Session 3: Meistere die Formulargenerierung und -validierung, eine wichtige Fähigkeit, um deine Nutzer zu begeistern und zu verstehen.

  • Session 4: Erwecke dein Projekt zum Leben, indem du eine iOS- oder Android-App generierst, die in Xcode oder Android Studio gestartet werden kann.

Triff deinen Instruktor:

Mike Callaghan, ein erfahrener Softwareentwickler mit fast drei Jahrzehnten Erfahrung und ein gefeierter Ionic Developer Expert, wird dich durch diese Reise führen. Mike verfügt über umfangreiche Erfahrung in Ionic und Angular von Anfang an und bietet unvergleichliche Einblicke in die Entwicklung mobiler Apps.

Kursvoraussetzungen:

  • Ein Computer mit Web-Editor-Funktionen (Visual Studio Code empfohlen).

  • Einen Mac und ein Apple Developer Konto für die Entwicklung von iOS-Apps.

  • Jeder Computer, der in der Lage ist, Android Studio für die Android-App-Entwicklung zu verwenden.

  • Grundlegende Kenntnisse in der Webentwicklung oder Angular sind von Vorteil, aber nicht zwingend.

Dieser Kurs vermittelt die Essenz eines Live-Workshops, der im Juli 2022 durchgeführt wurde und eine ungefilterte und immersive Lernerfahrung bietet, komplett mit Echtzeit-Interaktionen, Fragen und sogar gelegentlichen Pannen und bietet einen rohen, authentischen Einblick in die Welt der mobilen App-Entwicklung.

Begib dich auf diese Reise, um deine Fähigkeiten in der Entwicklung mobiler Apps zu verbessern, deine App-Idee zu verwirklichen und selbstbewusst in die Welt der plattformübergreifenden App-Entwicklung einzutreten. Melde dich jetzt an und sei Teil einer Lernerfahrung, die Lücken schließt, Barrieren überwindet und dich auf den Weg zum Erfolg im dynamischen Bereich der mobilen App-Entwicklung bringt.

Triff deine:n Kursleiter:in

Teacher Profile Image

Michael Callaghan

Lead Ionic Developer

Kursleiter:in

Hello, I'm Mike Callaghan. I am an LDS husband, father, and Software Engineer for Disney Parks, Experience, and Products Technology. I also create video courses about web development, mostly revolving around the Ionic Framework. 

I've been building software professionally since 1995, and using the Ionic Framework from before it was at version 1. Over the past few years, I have authored four popular Ionic courses for Pluralsight.

Now I am embarking on a new journey, building two new Ionic courses, one using Angular and one using React.

I invite you to join me on this journey... experiencing all the marvelous and wondrous aspects about building web and mobile applications.

Vollständiges Profil ansehen

Level: Intermediate

Kursbewertung

Erwartungen erfüllt?
    Voll und ganz!
  • 0%
  • Ja
  • 0%
  • Teils teils
  • 0%
  • Eher nicht
  • 0%

Warum lohnt sich eine Mitgliedschaft bei Skillshare?

Nimm an prämierten Skillshare Original-Kursen teil

Jeder Kurs setzt sich aus kurzen Einheiten und praktischen Übungsprojekten zusammen

Mit deiner Mitgliedschaft unterstützt du die Kursleiter:innen auf Skillshare

Lerne von überall aus

Ob auf dem Weg zur Arbeit, zur Uni oder im Flieger - streame oder lade Kurse herunter mit der Skillshare-App und lerne, wo auch immer du möchtest.

Transkripte

1. CoursePromo: Möchten Sie mobile Apps erstellen? Möchtest du Androiden oder iPhones ins Visier nehmen? Wenn Sie Ihre eigene mobile App erstellen möchten, aber nicht die Zeit nehmen möchten, mehrere Technologien zu erlernen Dann ist dieser Kurs genau das Richtige für Sie. Bei aktuellen Technologien wie Ionic müssen Sie Standard-Webtechnologien wie HTML, Javascript und Typoskript nicht ignorieren Javascript und Typoskript Ich werde dir nicht nur zeigen, wie einfach es ist, deine eigene App zu erstellen, sondern auch, wie viel Spaß es machen kann Darüber hinaus werden Sie in der Lage sein, eine einzige Anwendung zu schreiben , die sowohl auf Android-Geräten als auch auf iPhones funktioniert Schauen Sie sich diese Apps an. Alle von ihnen wurden mit Ionic entwickelt. Und das sind nur einige , die ich selbst gebaut habe. Es gibt Tausende mehr. Tatsächlich sind fast 20% jeder Anwendung eine ionische App. Wie toll ist das? den wichtigsten Themen, die im Kurs behandelt werden, gehören das Erstellen der Benutzeroberfläche mit dem Ionic-Framework, das Hervorheben der Arbeit, die ionic für Sie erledigt, und das Erstellen einer Demo-App, die perfekt aussieht, wenn sie auf iPhones, Androiden oder sogar gehören das Erstellen der Benutzeroberfläche mit dem Ionic-Framework, das Hervorheben der Arbeit, die ionic für Sie erledigt, und das Erstellen einer Demo-App, die perfekt aussieht Desktop-Browsern läuft Androiden oder Ich zeige Ihnen, wie Sie mit ionischen Komponenten wie Menüs, Karten, Aktionsblättern, Benachrichtigungen und Toast-Benachrichtigungen ein nativ aussehendes Erlebnis schaffen mit ionischen Komponenten wie Menüs, Karten, Aktionsblättern, Benachrichtigungen und Toast-Benachrichtigungen ein nativ aussehendes Erlebnis ionischen Komponenten wie Menüs, Karten, Aktionsblättern, Benachrichtigungen und Toast-Benachrichtigungen ein nativ aussehendes Wir verwenden ein Layout mit geteiltem Fenster, das auf einem großen Desktop oder Tablet genauso gut funktioniert wie auf einem kleinen Telefon Am Ende dieses Kurses werden Sie sehen, wie einfach es sein kann, mit ionic eine real funktionierende mobile Anwendung zu erstellen mit ionic eine real funktionierende mobile Anwendung Bevor Sie mit diesem Kurs beginnen, wird er Ihnen helfen, sich mit den Grundlagen der Webentwicklung mit HTML vertraut den Grundlagen der Webentwicklung mit HTML Ich erwarte nicht, dass Sie ein Experte sind, und ich werde die komplizierteren Themen im Laufe der Zeit behandeln. Wenn Sie wissen, wie man eine HTML-Schaltfläche erstellt oder einen Click-Handler hinzufügt, sollte es Ihnen gut gehen. Bereiten Sie also Ihre App-Ideen vor und begleiten Sie mich auf dieser rasanten Reise, um zu erfahren, wie Sie mit dem Ionic-Framework ein Experte für die Entwicklung mobiler Apps werden können mit dem Ionic-Framework ein Experte für die Entwicklung mobiler Apps 2. Session1: Ordnung. Also willkommen alle zu dem, wie ich hoffe, ersten von vielen ionischen Angular Mobile Development Workshops Wie ich bereits erwähnt habe, bin ich Mike Callahan und freue mich darauf, das durchzugehen und mit allen etwas aufzubauen Im Chat habe ich dir diese URLs gegeben. Der erste ist der Hub-Link zu dem Projekt, das wir im Laufe des Workshops aufbauen werden. Es funktioniert also alles vollständig, sodass Sie es als Referenz verwenden können. Die zweite URL ist eine Übersicht mit einigen praktischen Dateien, sodass Sie nicht alles abtippen müssen , wenn Sie nicht möchten Die nächsten beiden sind meine Kontaktinformationen. Du solltest diesen Michael schon bei Walking River haben, und mein Twitter-Handle ist bei Walking River. Okay. Ich nehme an, Sie haben allgemeine Programmierung, HTML und ein bisschen Javascript. Ich werde Visual Studio-Code verwenden. Das musst du nicht , aber dort werden meine Screenshots sein. Ich bin auch ein großer Fan von Angular Essentials von John Papa. Es ist eine Sammlung von Erweiterungen , die die Entwicklung von Angular erleichtern Es gibt auch ein paar Erweiterungen für ionische Snippets. Ich fand sie nicht ganz so nützlich, wie ich es mir erhofft hätte Aber ich halte diesen für absolut unverzichtbar. Okay. Müssen Sie Angular kennen? Es ist nicht unbedingt so, dass wir nicht viel Zeit mit Angular verbringen werden. Die Konzepte, wenn du etwas brauchst, wenn es keinen Sinn ergibt oder hey, Mike, was ist das? Stopp mich und wir werden es durchgehen. In der Regel werden wir die folgenden Angularismen verwenden. Also werden wir G Four und G-Direktiven verwenden. Wir werden die eckige Trennung von Bedenken verwenden. Ich weiß, dass in letzter Zeit viel davon geredet , alles in einer einzigen Datei zusammenzufassen Und es gibt die neue experimentelle Unterstützung von Angular 14 für modulfreie Komponenten Ich bleibe hier bei der alten Schule. Es ist eckig. Also werde ich eine JS-Datei, eine andere CSS-Datei, eine andere HTML-Datei haben. Wenn Sie dazu neigen, können Sie sie auch selbst miteinander kombinieren. Dies sind die verbindlichen Ausdrücke , die wir wahrscheinlich verwenden werden, und ich glaube nicht, dass wir noch komplizierter werden. Der erste ist ein Textausdruck. Wenn Sie also in Ihrer Komponente eine Variable namens EXPR haben und Sie möchten, dass ihr Wert in Ihrem HTML-Code steht, umgeben Sie sie einfach mit zwei geschweiften Klammern Wenn es kein Text ist oder Sie einfach den zweiten Stil bevorzugen. Sie können den Variablennamen ohne die Carla-Klammern in Anführungszeichen setzen , aber Sie setzen den Namen der Sache, die Sie an das Attribut des HTML-Elements binden , in eckige Dies ist nur wichtig wenn die Variable, an die Sie binden, kein String ist . Wenn Sie beispielsweise an das deaktivierte Attribut binden würden und Sie disabled auf False setzen möchten und Sie den ersten Ausdruck mit den geschweiften Klammern verwenden möchten, würden Sie tatsächlich an die Zeichenfolge false binden, was und Sie disabled auf False setzen möchten und Sie den ersten Ausdruck mit den geschweiften Klammern verwenden möchten, zur Laufzeit möglicherweise als falsch ausgewertet wird oder auch nicht , weil Die Zeichenfolge „Falsch“ steht für eine Wahrheitsbewertung oder kann es sein. Endlich das Klick-Event da. Ich möchte also jederzeit eine Funktion auf unserer Komponente an ein HTML-Ereignis binden . Sie setzen den Namen des Ereignisses in Klammern und die Funktion, die Sie aufrufen möchten , in die Ich glaube, das ist ungefähr so eckig, wie wir brauchen. Okay, also wir werden das alles durchgehen. Das ist mein Intro Angular. Okay. Jeder hat die ionische CLI installiert, oder? Das bedeutet, dass Sie auch die Node-CLI bereits installiert haben die Node-CLI bereits installiert Es ist wahrscheinlich nicht entscheidend , außer dass ich glaube, dass die Ionic-CLI Git benötigt oder zumindest davon ausgeht, dass Sie es haben Nehmen wir an, Sie haben bereits kein G auf dem jeder installiert ist Ja. Wenn nicht, installieren Sie G unter NPM auf der CLI Diejenigen von Ihnen, die früh oder früher erschienen sind, haben gesehen ich es vor kurzem gemacht habe, weil ich eine ältere Version verwendet habe Ordnung. Also werden wir eine sehr einfache Benutzeroberfläche erstellen und so weiter. Es wird aus einer Homepage, einer Teilnehmerliste, einer Seite mit Studenteninformationen und einem Seitenmenü bestehen Teilnehmerliste, einer Seite Studenteninformationen und einem Seitenmenü So wird es im Wesentlichen aussehen. Entschuldigen Sie mich. Das ist also die Startseite. Hier wird die Anwendung gestartet. Wenn die Dienstplanseite fertig ist, wird sie so aussehen. Es wird eine Liste der Schüler in unserer Klasse sein. Die Hahn-Seite besteht aus einer On-Liste, die eine ionische Komponente ist, und sie hat keine Symbole, keine Buttons und alle möglichen coolen ionischen Funktionen, die wir im Laufe der Zeit implementieren werden der Informationsseite für Studierende kannst du einzelne Schüler auswählen Das werden ionische Formen sein, etwas mehr Ionenspeicher Wie Sie sehen können, werden wir es irgendwann schaffen, Integration über einen Kondensator für den Zugriff auf die Gerätekamera Ordnung. Lassen Sie uns also direkt mit der Erstellung der Anwendung beginnen. Wo auch immer wir das brauchen , das ist eine Abkürzung. Ich habe den List-Link in den Chat eingefügt. Es wird auch hier auf jeder Folie sein, wo wir es brauchen werden oder wo es sich als nützlich erweisen könnte. Das erste, was wir tun möchten, um eine On-App zu erstellen , ist, den Befehl beim Start einzugeben. Lass uns weitermachen. Lass uns das einfach machen. Ich werde den Assistenten zur App-Erstellung nicht verwenden. Es ist cool, aber es ist nicht wirklich notwendig. Wenn Sie damit herumspielen möchten, können Sie dies gerne tun. Ich werde Angular verwenden. Mein Name wird sein. Ich rufe die Anwesenheitszeit an. Ich werde irgendwann ein Nebenmenü haben. Aber die Vorlage für das Seitenmenü bietet Ihnen eine Menge Standardwerke , die mir egal Ich bevorzuge es also, mit einer leeren ionischen App zu beginnen. Es sieht so aus, als ob wir standardmäßig einen Kondensator bekommen. Das ist in Ordnung. Und es wird all das Zeug für mich installieren. Schieb das da aus dem Weg. Das musst du nicht sehen. Folgen uns alle, okay? Ja. Ja. Danke. Nun, da hast du's. Nun, um das zu sehen, müssen Sie einfach Ionic Serve eingeben Ich muss zuerst in dieser Anwendung sein , ich muss in dem Ordner sein CD da rein? Dann kann ich ionisch servieren Und wie Sie hier sehen können, delegiert Ionic Serve wirklich nur einen Großteil seiner Funktionalität an die Also habe ich ionic serve eingegeben und der ionic serve hat diesen Befehl mich generiert G run, und es startet automatisch meinen Standardbrowser, in meinem Fall Safari ist und mir genau das gibt, wonach ich Eine leere Anwendung mit viel Inhalt. Okay. Also, folgen alle mit und sind Sie an diesem Punkt angelangt? Ja. Ja. In Ordnung. Fast da. Fast da. Ordnung. Ich gehe zur nächsten Folie über. Was ich ganz schnell besprechen wollte, sind die Entwicklertools oder die Browser-Entwicklertools. Wenn Sie Windows verwenden, müssen Sie einfach F 12 eingeben. Wenn Sie auf einem Mac sind, ist es Command Option Und offensichtlich sieht es nicht so aus. Ja. Ja, ich bin da. In Ordnung. Mit geöffneten Entwicklertools? Das solltest du können. Ich kann mich nie erinnern, wie man das in Safari macht. Da haben wir's. Rufen Sie den Responsive Design-Modus auf. Jetzt kann ich verschiedene Apple-Geräte emulieren. Wenn du nicht in Safari bist, nein, auch wenn du in Savi bist, wenn du auf einem beliebigen Gerät bist Ich empfehle die Verwendung von Chrome oder Edge für die Nutzung der Entwicklertools. Das wirklich coole Ding und du wirst es hier nicht sehen. Du wirst es gleich sehen. Aber lassen Sie mich das in Edge ansprechen. Lassen Sie mich das eigentlich hier ansprechen. Ich habe es schon hier, also kann ich dir zeigen , was ich dir zeigen möchte. In Edge, wenn ich es sage, will ich ein Gerät wie ein iPhone 12 Pro. Es gibt mir, wonach ich suche. Es gibt mir die richtige Auflösung. Ich kann mir also ein iPhone aussuchen. Ich kann ein Android wählen. merke, dass sich nicht viel ändert, aber hier wird es richtig cool. Lass mich reingehen. Lass mich die Seite aktualisieren. Sobald die Entwicklertools geöffnet sind und Sie Ihr Gerät eingerichtet haben und die Seite aktualisiert haben, erkennt Ionic das und sagt: Oh, Sie laufen auf einem Android-Gerät Ich werde das Aussehen ändern. Also werden deine Icons androidifiziert sein. Deine Buttons werden Android sein, deine Dropdowns werden Also sollte alles wie Android aussehen. Beachten Sie also, wie diese aussehen. Und wenn ich dann auf die Starttaste klicke, ist das ein Android-Modell. Lassen Sie mich also zurück zu einem iPhone wechseln. Es wird sich noch nicht ändern, bis ich die Seite aktualisiere. Sieh den Unterschied. So wird ein Apfel aussehen. Ich kann zum Setup zurückkehren, die Taste ist etwas abgerundeter. Das Dropdown sieht anders aus. Die Symbole sind etwas anders, Seitenmenüs sind etwas anders. Alles ist nur ein bisschen anders. Sie werden auf einem Apple-Gerät sehen, Ihre Titel mittig ausgerichtet sind, wo irgendwelche Androiden übrig geblieben sind Ionic werden Sie also all diese Funktionen, diese visuelle Veränderung sofort einsatzbereit Und das ist einer der Hauptgründe, warum ich es benutze. Okay. Also das werden wir bauen. Also habe ich hier. Wie gesagt, F 12, um Ihre Entwicklungstools und Windows- oder Befehlsoptionen auf einem Mac zu öffnen . Ich habe dir gerade das andere Design gezeigt. Das ist die Schaltfläche, um den responsiven Designmodus auf Safari aufzurufen. Okay. Komm schon neun hoch. Okay. Und ich habe dir schon davon erzählt. Wenn Sie von einer zur anderen wechseln, müssen Sie die Seiten neu laden, um zu sehen, wie sich die Benutzeroberfläche ändert Okay. Lassen Sie uns jetzt unsere erste ionische Seite erstellen Oder in diesem Fall werden wir eine Schnittstelle erstellen. Ich werde gehen, ich werde kündigen. Okay. Also werde ich den Befehl on generate verwenden. Ich kann auch mit der G-Schnittstelle arbeiten. Also werde ich die ionische CLI bitten, eine Typoskript-Schnittstellendatei zu generieren ich die Definition eines Studenten speichern kann Und so schnell ging es. Ich werde auch Sd für mein Projekt öffnen, richtig? Okay. Gibt es eine Möglichkeit deine Vorderseite etwas größer zu machen , wenn du das hast? Das kann ich absolut. Wie ist das? Das ist großartig. Danke. Ich werde hier dasselbe tun. Übrigens Command Plus. Richtig. Die Oberfläche befindet sich in meinem Quellordner App Student. ist nicht viel drin. musst du für dich aus dem Weg räumen. Okay. Okay. Also das ist einer der Orte, an denen sich das Wesentliche als nützlich erweisen wird Und das ist Student TS genau hier. Ich werde mir die Rohdatei holen. Nochmals, du musst das nicht sehen, aber ich bin faul und möchte das alles nicht noch einmal eingeben. Das ist also die Definition eines Studenten. Weiß jemand, warum ich meinen Schüler zu einer Schnittstelle mache und nicht zu einer Klasse? Gibt es irgendwelche Typoskript-Assistenten , die du einbeziehen möchtest? Weiß jemand, zu was eine Typskript-Schnittstelle kompiliert wird, wenn sie zu Javascript kompiliert wird Nein. Okay. Lass mich sehen , ob ich es dir zeigen kann. Hast du schon mal Script geschrieben oder ich habe einen Spielplatz für Pipe-Skripte. Und auf der einen Seite ist das Typoskript, auf der anderen Seite ist das Wenn Sie die Avian-Schnittstelle aufrufen, wird genau das erstellt. Absolut nichts. Schnittstellen existieren nicht. Sie dienen also ausschließlich der Bequemlichkeit für Entwickler. Wenn ich andererseits eine Klasse erstellt habe, ist es keine gültige Klasse. Warum ist das keine gültige Klasse? Okay. Oh, ich verstehe. Ich brauche solche Sachen. Also nicht viel mehr Code, aber es ist mehr Code-Code. Und ehrlich gesagt brauche ich keinen Kurs. Ich nicht, mein Studentenobjekt muss keine Methoden enthalten Wenn es also nur ein Datenübertragungsobjekt ist, werde ich mich immer für eine Schnittstelle entscheiden. Okay. Okay. Lassen Sie uns also einen kurzen Blick auf diese Oberfläche werfen. Jeder Student hat eine ID, einen Vor- und Nachnamen. Weiß jemand, was das Fragezeichen für die restlichen Felder bedeutet? Wahl. Sie sind optional. Also das Geburtsdatum, Elternname, Elternteil, E-Mail, Telefon usw. Diese sind alle optional. Ich werde das nicht hier lassen. Das bedeutet, dass ich das erstellen kann, aber es wird nicht gültig sein. Damit ich einen Brunnen erstellen kann, erledigt Hub-Copilot die Arbeit für Ich kann also einen Objektliteralinitialisierer verwenden. Hoppla. Stimmt. Ordnung. Jetzt wird Pile etwas übereifrig. Okay. Wenn der Student eine Klasse wäre, könnte ich das nicht machen. Ich könnte einen solchen Objektinitialisierer nicht verwenden. Okay. Es wäre nicht gültig. Ich müsste New Student verwenden und dann entweder die Werte an den Konstruktor übergeben entweder die Werte an den Konstruktor oder die Felder einzeln bearbeiten Aber da ich eine Schnittstelle habe, Type Script und Java-Skript ein brandneues Objekt dieses Typs initialisieren, indem ich einfach ein Objektliteral verwende Da es sich um eine Schnittstelle handelt, erhalte ich außerdem Fehler, wenn ich nicht alle erforderlichen Felder angebe Und schließlich, wer kann mir sagen, was Status bedeutet? Warum habe ich dort nicht den Status auf Zeile zehn gesetzt? Dies ist eher eine Skriptfrage eines anderen Typs, keine eckige Onic-Frage. Obwohl eckig einer der Gründe ist, warum ich es getan habe. Ich bin mir nicht sicher, ob es sich nur um einen benutzerdefinierten Typ handelt. Es beschränkt den Wert darauf, entweder vorhanden oder nicht vorhanden zu sein? Korrekt. In diesem Fall als optional definiert. Korrekt. Die meisten Leute besonders wenn Sie aus der.net-Welt kommen, sind Sie es wahrscheinlich gewohnt, dies mit einem Namen zu tun Sie hätten also eine Aufzählung, bei der präsent gleich Null und abwesend gleich Und dann würde der Compiler sicherstellen, dass es Das Problem dabei in Angular ist, dass Ihre Vorlagen diese Enumes nicht sehen können Es sei denn, Sie erstellen dann eine lokale Variable, die die Zahl enthält, und es wird seltsam Aber wenn ich es auf diese Weise mache, sage ich Typoskript im Grunde , dass der Wert von Status eine Zeichenfolge ist, aber es kann nur eine Zeichenfolge mit einem von zwei Werten sein, wie Sie gesagt haben, und ich werde Intellisence bekommen Es sagt mir also automatisch, was meine Werte sind. Ziemlich rutschig, hm. Okay. Michael, du könntest dieser Liste eine Ganzzahl hinzufügen, oder? Du meinst. So wie das. Ja. Mir gefällt, was Co Pilot vorgeschlagen hat. Hat jemand Copilot benutzt? Ich wollte es ausschalten. Ich fand es nützlich. Ich fand, dass Co Pilot ziemlich gut darin ist, zu wissen, was ich damit machen möchte. Und es ist wirklich gut darin , Unit-Tests für mich zu erstellen. Okay. Haben Sie Fragen zur Benutzeroberfläche? In Ordnung. Ich hatte eine Frage. Mein Praktikant beschwert sich. Ich denke, das liegt an der TS-Konfliktdatei für Ionic? Das ist nicht Es verwendet TS und nicht ES in. Hast du es bemerkt? Hab ich nicht. Macht es das? Sind wir immer noch im Verzug? Immer noch Standardeinstellung ist S n. Min ist zwei, also. Ich weiß nicht, warum er Ja. Ich sehe kein TSN in der Schlange Nein. Okay. Irgendetwas beschwert sich darüber, aber ich nicht Microsoft Dad beschwert sich darüber. Können Sie uns also das Plug-In für einen Copiloten zeigen , das Sie Scheint zwei von ihnen zu sein. Das ist eine gute Frage. Okay. Ich bezahle derzeit nicht dafür. Also habe ich diesen. 3131. Ich weiß nicht, was das ist. Oh, jede Nacht. Ja. Ja, ich habe weitergemacht und ich benutze es nicht. Ich verwende den offiziellen von G Hub. Und wie gesagt, ich bezahle noch nicht dafür. Ich glaube, ich habe es noch ein paar Wochen kostenlos. Oder vielleicht fange ich an, ein Open-Source-Repo zu verwalten. In Ordnung. Als Nächstes müssen wir tun. Ich versuche, das langweilige Zeug zu erledigen und all das früh aus dem Weg zu räumen, ist, dass wir einen Studentenservice einrichten müssen. Das ist das Ding, das die gesamte Dateninteraktion für den Umgang mit Studenten regeln wird , und das war die wirklich große Datei , die ich für Sie im Wesentlichen habe. Das will ich hier machen. Bring meine A-Befehlszeile hierher zurück. Und da haben wir's. Geh es aus dem Weg. Okay. Also hier verwende ich nicht die CLI. Und der Grund, warum ich die On-CL nicht verwende , ist, Ihnen zu zeigen, dass sie tatsächlich dasselbe sind. Die ionische CLI delegiert also einfach an die eckige CL. Der Grund, warum ich ihm PX voranstelle, ist, dass ich die global installierte Angular CLI nicht verwenden möchte Ich möchte die verwenden, die in mein ionisches Projekt eingebaut ist. Kennt sich jeder mit PX aus, was das macht? Ja. Ich meine, es macht eine Menge Dinge. Aber das Wichtigste ist, dass es die Version von NG verwenden wird , die sich in meinem Node-Module-Ordner befindet , im Gegensatz zu meiner globalen. Okay. Also werde ich einen Dienst namens Studenten einrichten. Eine Sache, die ich sehr gerne mache. Ich verwende den Befehl Dry Run gerne , nur um zu sehen, was er tun wird , bevor er es tut. Es wird zwei Dateien für mich generieren. Es generiert eine Testdatei und meine Service-Typoskriptdatei und legt sie direkt in den App-Ordner. Das ist okay. In einem größeren Projekt würde ich das nicht tun wollen. Ich möchte viele Dinge ein bisschen besser organisieren. Also würde ich ihm sagen, es soll woanders verschuldet werden, ich könnte es zum Beispiel bei Studenten des Militärdienstes anlegen. Jetzt können Sie sehen, dass es in einem Ordner namens Services abgelegt wird . Nun, machen Sie weiter und lassen Sie es dabei. Ich nehme die Flagge des Probelaufs ab und lasse sie bauen. Das Studentenwerk wird uns Studenten geben , die wir ausstellen können. Ohne eine Liste von Studierenden können wir nicht viel tun. Nochmals, wir können zu meiner Liste zurückkehren, die hier war. Gehen Sie runter zum Studentenservice. Schnapp dir die Version. Wählen Sie eine Kopie aus. Suchen Sie meinen Studentenservice und fügen Sie ihn einfach ein. Und das gefällt ihm nicht. Warum gefällt es ihm nicht? Okay. Das ist fair. Sieht hier jemand die unmittelbaren Probleme? Dieser ist offensichtlich. Das liegt daran, dass ich die Dienste in einem Ordner abgelegt habe. Lassen Sie mich Ihnen zeigen, wenn Sie das im BS-Code nicht gewohnt sind, werde ich diese Zeile einfach entfernen. Und dann werde ich sehen, dass der Fehler hier ist. Klicken Sie darauf und klicken Sie auf die blaue Glühbirne und es wird sie für mich finden und die Importanweisung für mich neu erstellen Okay. Dieser ist etwas schwieriger zu überwinden. Was also passiert, ist dieser Dienst Kondensatorspeicher von Ionic verwendet Aber ich weiß es nicht. Okay. Wir benutzen es. Ich benutze es. Also müssen wir einen Kondensatorspeicher installieren. Also öffne ich die im Terminal eingebauten S-Codes, das heißt Control-Back-Tick. Und dann kann ich einfach einen Kondensatorspeicher installieren. Okay. Und dann sollte das Problem verschwinden. So wie das. Fragen, Kommentare, Bedenken. Haben noch alle mitbekommen? Ja. Das habe ich eingeholt. Da sind noch eine Menge anderer Sachen im Gange. Wenn du das Gefühl hast, dass du langsam zu weit hinterherhinkst, lass es mich wissen. Okay. Okay. Also solltest du jetzt einen Studentenservice haben. Also, was ich tun möchte. Das Studentenwerk hat eine Initialisierungsmethode eingebaut Nochmals, nur um es einfach zu machen, zur Benutzeroberfläche zu gelangen. Also, was ich in der App-Komponente T tun muss. Ich drücke Command P oder Windows Control P, um dieses Schnellmenü zu öffnen, und gebe App-Komponente ein. Ich lasse meine Hände gerne auf der Tastatur. Gib mir hier eine Sekunde. Ich habe also den Konstruktor Und das ist eigentlich ein Tippfehler, weil dies die Initialisierungs-App nicht aufruft Brauchen wir die App-Komponente darauf zu implementieren Und jetzt lasse ich Pilot eine andere Arbeit für mich erledigen. Keine schlechte Vermutung. Aber wir müssen das Studentenwerk übergeben. Okay. Und beachten Sie, dass es weitergegangen ist und all diese Informationen für uns gefunden hat. Es hat herausgefunden, wo der Studentenservice importiert werden kann. Also jetzt. Nochmals, nicht schlecht, aber es ist nicht das, wonach ich suche. Wir müssen einen Sync vermarkten , weil wir warten wollen. Ja. Sollte es in der Klasse oder draußen sein? Es sollte drinnen sein. Danke. Okay. Also, wie ist es nicht? Entschuldigung. Los geht's. Ich habe es nicht importiert. Ich weiß nicht, wie es Ihnen geht , aber eine meiner Schwächen, wenn Sie so wollen, bei Angular. Ich vergesse, Dinge zu importieren. Deshalb finde ich es sehr gut, dass VS-Code das für mich erledigt. Und welche ES-Einstellung ich auch habe , es Quelldatei gibt keine Quelldatei, die am Ende keine Leerzeile hat, also wird sie sich darüber oft beschweren. Irgendwelche Fragen hier? Wir wollen sehen, was das macht , oder verstehen wir, was das macht? Wenn die App-Komponente startet, wird sie unseren Studentenservice anrufen und ihm sagen, dass er initialisieren soll Die Initialisierung des Studentenwerks macht ein paar Dinge Es geht in den Ionenspeicher, um zu versuchen, alle Schüler aus dem Speicher zu holen Aber wenn Sie es zum ersten Mal durchgehen, wird es keine geben Also wird die Länge des Studenten-Arrays Null sein. An diesem Punkt rufe ich Daten auf und sehe mir Daten an, nimmt einfach diese Gruppe von Scheinstudenten und speichert sie für mich. Es gibt uns also etwas zum Ausstellen. Macht das Sinn? Das sind übrigens alles echte Menschen, die sich bereit erklärt haben , dass ich ihre Namen benutzen darf Ordnung. Wir sind gut. Wir machen weiter. Okay. Ich habe die Importe erwähnt. Der VS-Code wird mich ehrlich halten. Aber wenn nicht, können Sie sich gerne einmischen und mich ehrlich halten Die meisten Codebeispiele, die ich auf meinen Folien zeige , enthalten keine Importe Es war einfacher, Platz zu sparen. Okay. Jetzt werden wir die Dienstplanseite generieren. Okay. Hier weichen die Dinge ein wenig vom standardmäßigen eckigen CLI-Gerüst Wenn Sie ein ionisches Projekt mit Ionic Starter erstellen und die ionische CLI installieren, bietet Ihnen Ionic ein eckiges Gerüst, das Angular eckiges Angular hat nicht das Konzept einer Seite. Ich weiß nicht, ob Sie jemals darüber nachgedacht haben, aber wenn Sie eine Seite und Angular erstellen möchten , erstellen Sie eine Komponente. Aber Ionic hat das Konzept einer ionischen Seite. Also geben sie dir dieses Gerüst. Ich kann also einen dieser beiden Befehle eingeben dieser beiden Befehle weil sie funktionell identisch sind Also kann ich eine ionisch generierte Seite erstellen und sie Roster nennen. Alles, was es tut, ist G Generate Page aufzurufen. Hahn Aber weil Ionic das Gerüst für die Seite geschaffen hat, existiert das Gerüst tatsächlich, sodass wir mit Ionic eine Seite generieren können, die wir mit Ionic Also nochmal, ich werde es testen. Und Sie sehen es buchstäblich einfach ziemlich gut, nicht genau, sondern den Befehl NG Generate. Der größte Unterschied zwischen dem Erstellen einer eckigen Komponente für uns als Seite und dem eigentlichen Aufbau einer ionischen Seite besteht darin, dass ionische Seiten mit einem eigenen Modul erstellt werden standardmäßig mit einem eigenen Modul erstellt werden und Eine ionische Seite wird also erst zur Laufzeit geladen, Das hilft ionischen Apps, schnell hochzufahren und zu starten Macht das alles Sinn? Ja. In Ordnung. Ich mache meinen Probelauf rückgängig und lasse ihn einfach los. Okay. Ich muss es machen. Nein, ich muss die Änderung nicht vornehmen. InCars hat diese Änderung bereits für mich vorgenommen. Wenn wir uns also das App-Routing-Modul ansehen, die ionische CLI oder das Angular-CI diese Formierung hinzugefügt und das ist der Lazy-Load des Roster-Moduls zum Laden Das heißt, wenn wir zu unserer Anwendung gehen und Ende unserer URL als Pfad verwenden, wird das Modul für die Dienstplanseite instanziiert, was dann dazu führt, dass die Dienstplan-Routing-Seite was dann dazu führt die Dienstplanseite lädt Also bekommen wir das alles umsonst. Sie können es mit der Angular CLI machen, aber ich kann mich nie erinnern, dass Sie keine Komponente, sondern ein Modul erstellen. Ich glaube, so funktioniert es. Aber mir wäre es viel lieber selbst wenn ich kein ionisches Projekt verwenden würde, könnte ich trotzdem versucht sein, die ionische CLI zum Erstellen meiner Seiten zu verwenden , weil Sie das faule Laden von Haus aus bekommen würden das faule Laden von Haus aus bekommen Also habe ich das gerade gezeigt. Lassen Sie uns nun unsere letzte Seite generieren, die unsere Informationsseite für Schüler ist. Verwenden Sie den der beiden Befehle, mit dem Sie vertraut sind Auch hier wird fast das gleiche Gerüst gebaut fast das gleiche Gerüst Ich werde es sein lassen. Zurück in meiner App kannst du sehen, dass ich meine Dienstplanseite und meine Studenteninformationsseite Jetzt muss ich eine Änderung vornehmen. Wenn Sie jemals eine Master-Detailansicht erstellt haben, wissen Sie, dass Sie, wenn Sie zur Detailansicht gelangen, normalerweise die ID des Objekts angeben müssen , das Sie sehen möchten. Das ist also nicht anders. Es hat für mich immer noch eine Änderung am Apparalti-Modul vorgenommen, aber ich muss das nicht anfassen Aber in der Route zur Studenteninformationsseite muss ich diese Doppelpunkt-ID zum Pfad hinzufügen Öffnen Sie also das Routing mit den Studenteninformationen, suchen Sie den Pfad und fügen Sie die Doppelpunkt-ID hinzu. Das bedeutet, dass wir in unserer Anwendung eine Route haben werden , die so aussieht. Okay. Also werden wir einfach eine Ausweissteuer am Ende der Route erheben. Und das wird als ID-Routenparameter übergeben. Ich habe eine Frage. Gibt es einen Unterschied zwischen dieser Methode und der Eingabe des Routenparameters auf dem zuletzt geladenen Routing Du meinst, es in ein Routing-Modul zu stecken. Du meinst, es hier einbauen? Ja. Gibt es einen Unterschied wenn man die Studenteninformation cool ausgibt? könntest du tun, aber dann könntest du nicht in das Routing mit den Studenteninformationen gehen und hier irgendwelche Änderungen vornehmen. Vielleicht ist das okay. Vielleicht ist das okay. Vielleicht hast du einen Pfad namens Edit. Macht das Sinn? Okay. Ja. Ich verstehe. Also, wenn du es hier rausstellst, würdest du sagen, okay, die Studenteninformation mit einem Schrägstrich auf den Studentenausweis Und jetzt, in Ihrem Studenteninformationsmodul, haben Sie vielleicht eine Änderung vorgenommen Aber dann hast du vielleicht auch ein Löschen. Und das sind und was Sie am Ende haben, sind verschiedene Komponenten. Vielleicht haben Sie eine Seite mit Studenteninformationen und eine Seite zum Löschen von Schülern. Aber diese beiden Seiten würden dasselbe Modul verwenden. Daran hatte ich nicht gedacht. Das ist eigentlich ziemlich schlau. Also ja, das könntest du tun. Aber was du jetzt nicht tun kannst , wie würdest du einen neuen Schüler hinzufügen? Weil du keinen Ausweis hättest. Also ich möchte sie behalten Ich möchte sie auf diesem Niveau sauber halten. Okay. Und dann füge alles hier rein denn jetzt könntest du Dinge tun wie Wenn du wolltest, jetzt könntest du es tun. Du könntest den Schrägstrich E für die Studenteninformationen haben. Okay. Ja. Und dann kann ich dieselbe Komponente wiederverwenden. Richtig. Und ich glaube, so mache ich es später. Danke. Ist das bis jetzt für alle klar? Wenn nicht, denke ich, dass dieser sinnvoller sein wird , wenn wir anfangen, die Seiten auszuarbeiten. Ich schaue dauernd auf Andrew herab und er sagt, okay. Normalerweise, zu diesem Zeitpunkt, meine ich, sitze ich schon seit anderthalb Stunden hier. Wenn ich diesen Workshop persönlich mache. Zu diesem Zeitpunkt sind so gut wie alle bereit , eine Pause einzulegen. Willst du fünf nehmen oder willst du weitermachen? Wir wollen bis zehn Uhr gehen, noch eine Stunde. Pause machen oder weitermachen. Mir geht es so oder so gut. Ja. Mir geht es gut, wenn wir weitermachen, das ist okay. Okay. Lass uns weitermachen. Ordnung. Seitenmenü. Also werden wir uns jetzt mit einigen Benutzeroberflächen befassen. Das Seitenmenü verwendet in diesem Fall die Option On Split Pan. Und die geteilte Pfanne ist ein bisschen kompliziert. Sie haben es wahrscheinlich alle gesehen. Wenn der Bildschirm schmal ist, er zu einem Hamburger-Menü zusammengeklappt Aber wenn es breit ist, wie wir hier sehen, ist es immer sichtbar. Es ist also ein sehr responsives UI-Element. Das Wichtigste, was Sie wissen müssen, wenn Sie es mit einem Split-Pin zu tun haben. R, die Inhalts-ID. Das Inhalts-ID-Attribut des geteilten Fensters steht also des geteilten Fensters steht die ID des Elements auf Ihrer Seite, das Ihren Hauptinhalt enthalten wird. Das wird gleich klar sein. Dies ist normalerweise Ihr eigener Router-Ausgang. Router-Ausgang ist also eine der wichtigsten Komponenten auf Ihrer gesamten Seite. Das deaktivierte Attribut macht das, was Sie denken. Wenn es deaktiviert ist, der Split-Pin, wird das Menü nicht angezeigt. Ich kann Ihnen nicht sagen, wie frustrierend es ist, ein deaktiviertes Menü zu haben, bei dem Sie aus seltsamen Gründen nicht herausfinden können, warum es nicht angezeigt Und wann teilt das geteilte Fenster unter welchen Umständen es sichtbar sein soll Es kann ein Bolan sein. Sie könnten es also programmgesteuert auf wahr oder falsch setzen, oder es könnte sich um eine vollständige CSS-Medienabfrage Es könnte sich also um eine Medienabfrage handeln, die maximale Bildschirmbreite von 500 angibt, beispielsweise eine Mindestbreite von Ich neige dazu, die Standardeinstellungen für solche Dinge zu verwenden. Ich neige also nicht dazu, mit ihnen herumzualbern. Wir haben auch die Menü-ID. Wenn Sie also einen Split Pan verwenden, wird an Split Pan normalerweise ein Menü angehängt. Es benötigt also auch die HTML-ID des Menüs , an das es angehängt ist. Wir müssen ihm auch sagen, welche Seite des Bildschirms wir haben wollen. Frühere Versionen von Ionic verwendeten links und rechts, aber Ionic unterstützt jetzt Kulturen und Layouts von rechts nach links Es ist also Anfang und Ende. In den meisten westlichen Kulturen wäre der Anfang links und das Ende rechts. Und dann musst du ihm endlich sagen, es aussehen soll. Dies ist der Menütyp. Und ich habe hier eine Animation. Ich hoffe, es kommt rüber. Ich musste diese Animation erstellen, um mir selbst zu beweisen , dass diese drei Menütypen unterschiedlich sind. Schau sie dir für ein paar Sekunden an. Sag mir, ob du herausfinden kannst, was der Unterschied zwischen Push und Reveal ist. Overlay ist ziemlich einfach. Aber was ist der Unterschied zwischen Push und Reveal? Irgendjemand? Die Hintergründe bewegen sich auf Push. Bei der Enthüllung geht es nicht weiter. Welcher Hintergrund? Das Menü, das hintere Menü Aufschrift Home in Roster? Korrekt. Ja. Ich habe lange gebraucht , um das herauszufinden. Tatsächlich habe ich diese Animation auf Twitter veröffentlicht und ich hatte immer noch eine Menge Leute, die fragten, was ist der Unterschied zwischen Push und Reveal? Du hast also recht. Das Menü bewegt sich nicht in der Enthüllung. Okay. Warum haben sie bei diesem Ionischen gegen sie gekämpft Ich bin mir nicht wirklich sicher. Das wäre mir nie in den Sinn gekommen. Scheint, als ob es eher ein Zug ist und ich denke, die Materialspezifikationen sind das was es mit der Z-Achse zu tun hat. Es gibt also Schichten über den Dingen. Wird beim Materialdesign typischerweise Enthüllung verwendet? Das ist eine der Spezifikationen. Die Materialbibliothek soll auf ähnliche Weise wie diese Spezifikationen aufgebaut sein . Aber ja, das Materialdesign sagt, dass es eine Z-Achse geben sollte. Hab dich. Und schieb sie zusammen und sie drängen nur einen von ihnen aus dem Weg, richtig? Ja. Ich schätze, das wäre ihre Argumentation Sehr cool. Ich habe Overlay immer nur persönlich benutzt Okay. Also geteilter Bereich, wir werden ein Menü haben, und das Menü sollte zwei Seiten haben, die Startseite und die Kaderseite Und die Art und Weise, wie wir das implementieren, besteht aus einer Reihe von Anwendungsseiten in der App-Komponente Wenn ich mich nicht irre. Der ist auch hier drin. Ja. Die App-Komponenten sind bereits fertig, also können wir einfach das Wesentliche herausgreifen Öffnen Sie die App-Komponente. Und ich glaube, einfach einfügen. Nein, das hat mir nicht gefallen. Oh, ich verstehe. Weil ich das Studentenwerk verlegt habe. Also nochmal, ich möchte es löschen. Komm zurück und lass VS Code es für mich finden. Da haben wir's. Und dann will es meine leere Leitung. Jetzt habe ich also eine Reihe von Seiten, Home und Roster. Also, was wir hier machen, wir werden eine Bezeichnung für den Menütitel haben , Home und Roster. Was ist die URL Also, wo wird das Ding hingehen? Welche Route? Wolltest du die Heimatroute oder die Dienstplanroute benutzen? Und welches Symbol soll dann verwendet werden? Soweit klar. Als Nächstes werden wir über dieses Array iterieren und das Menü erstellen Sollte sich unsere App also im Browser überhaupt geändert haben , dann ist es immer noch der Distributionsplan Wenn Sie Ionic Serve laufen lassen, werden Sie keine Änderungen sehen , da wir noch keine Änderungen an der Homepage vorgenommen Okay. Okay. Also haben wir eine Reihe anderer Dateien erstellt und Änderungen an der App vorgenommen, und sie sollte ständig neu erstellt und gerendert werden Da wir jedoch noch keine Änderungen an der Homepage vorgenommen haben, werden Sie sie nicht sehen Okay. Und der Grund, warum ich es in dieser Reihenfolge mache, ist im Wesentlichen, dass die endgültige Enthüllung etwas beeindruckender sein wird. Wir haben alles richtig gemacht. Ich bin nur neugierig. In Ordnung. Also als Nächstes werden wir Folgendes tun, um Well zu machen, um unseren Split-Pin zu starten. Das geht in den HTML-Code der App-Komponente. Im Moment sollte das Einzige, was im HTML-Code der App-Komponente enthalten ist, die On-App und die On-Router-Outlet sein. Also das absolute Minimum , um etwas in einer ionischen App anzuzeigen Okay. Und hier habe ich dir nicht die Möglichkeit gegeben, sie zu kopieren und einzufügen. Also werde ich das aus dem Weg räumen. Und es sieht so aus, als ob ich auf meinem anderen Monitor hängen geblieben bin. Okay. Ich mache eine kleine Pause während ihr das alle in eure eigene App eintippt. Sie können hier unten sehen, dass ich den Router-Ausgang habe. Der gesamte geteilte Bereich umschließt also den Ausgang am Router und der gesamte Code befindet sich im App-Tag Macht das Sinn? Ja. Ich werde es auch eingeben. Okay. Nun, willst du zusehen, wie ich es tippe, oder willst du , dass ich es außerhalb des Bildschirms tippe, damit du es kopieren kannst Du kannst es außerhalb des Bildschirms machen, das macht es einfacher. Okay. Interessanterweise hat der Copilot einen ziemlich guten Job gemacht. Innerhalb des Split-Pans haben wir also das On-Menü, und das wird in der linken Menükomponente sein linken Wir beginnen also mit der Kopfzeile , der kleinen grauen Fläche oben, und die Kopfzeile besteht aus einer Werkzeugleiste, und die besteht aus dem Titel mit dem Wort Menü darin. Das ist ein Muster, das sich in ionischer Form immer wieder wiederholt Eine Kopf- oder Fußzeile enthält eine Werkzeugleiste, die eine Sammlung von Titelschaltflächen enthält, die Schaltflächen enthält Es ist sehr hierarchisch, aber sehr konsistent. Also hier drin werden wir nur eine Werkzeugleiste mit dem Wort Menü in der Kopfzeile haben drin werden wir nur eine Werkzeugleiste mit dem Wort Menü in der Kopfzeile Unter der Kopfzeile haben wir keinen Inhalt. Fast alles, was Sie in Ionic rendern möchten , muss einen Ionen-Inhalt Und ich glaube, auf der nächsten Folie werden wir den Menüinhalt dort einfügen Sie müssen also kein Menü eingeben. Wir werden hierher gehen. Was ist Content ID in diesem Beispiel. Ist das eine gezielte oder eine andere reguläre Sache. Entschuldigung. Okay. Also sprichst du mit dieser Inhalts-ID oben? Ja. Das sagt uns, dass der geteilte Bereich und das Menü Dinge steuern, die sich in einem anderen HTML-Element befinden , dessen ID der Hauptinhalt ist Sie werden das also hier unten sehen, Ihren eigenen Router-Ausgang Wir müssen den Hauptinhalt der ID hinzufügen. Okay. Macht das Sinn? Ja. Wie wird das durch ein View-Kind erreicht oder wie macht das normalerweise jemand, wenn du dein eigenes machst? Wir müssen jetzt nicht darauf eingehen. Ernsthaft. Ich bin mir nicht sicher, ob ich der Frage gefolgt bin. Wenn Sie Ihre eigene Komponente erstellen wollten , 3. Session2: Okay. Okay. Jeder. Willkommen zu Sitzung zwei. An diesem Punkt sollten wir alle eine Klassenliste haben , die ungefähr so aussieht, und heute Abend werden wir versuchen, sie mit einigen Funktionen und einigen weiteren UI-Komponenten zu einigen Funktionen und einigen weiteren UI-Komponenten Und genau wie zuvor, wenn sich herausstellt , dass ich zu schnell fahre oder wenn ich ein wichtiges Konzept überspringe , das nicht jedem klar ist, halt mich auf und wir werden ein bisschen langsamer fahren Wie beim letzten Mal, als wir fertig sind, kann ich noch ein bisschen hier bleiben und alles besuchen, wenn wir dich brauchen Klingt gut? Ja. In Ordnung. Also, ich glaube, wir haben das Bild der Person und den Namen, richtig? Wir haben nichts von dem anderen Zeug hier oben und wir haben auch nicht den tollen Button hier unten. Korrekt. Und aus irgendeinem Grund mag es wirklich nicht, voranzukommen. Okay. Über Icons haben wir bereits gesprochen. Ich glaube also nicht, dass wir uns das noch einmal ansehen müssen. Aber nur als Zusammenfassung: Wenn es Symbole gibt, nach denen Sie suchen möchten, müssen Sie wissen, wo Sie sie finden können. Sie finden sie einfach unter Okay. Also lass uns gleich loslegen. Und das werden wir der Kaderseite hinzufügen. Und wenn ich mir diesen Code ganz schnell ansehe. Dadurch werden die beiden Schaltflächen auf der rechten Seite jedes Schülernamens erstellt . Wir werden also innerhalb jedes Ion-Elements einen Container mit Schaltflächen erstellen , und jeder On-Button-Container enthält zwei Schaltflächen, und diese Schaltflächen bestehen nur aus einem Symbol, der Ellipse, um uns ein detailliertes Menü zu bieten , und dann dem Vorwärts-Pfeil , der uns zur Rofter-Seite führt. Macht Sinn? Ja. Ordnung. Lass uns sehen. Ob ich das zusammen mit dir machen kann, es aber trotzdem habe. Es wird schwierig sein, das gleichzeitig zu erledigen, nicht wahr? Lass es uns so machen. Wenn ich auf meine Hahn-Seite gehe, meine Dienstplan-HTML-Seite Und wir haben die On-Liste und das On-Om mit dem Personen-Umrisssymbol und dann die Bezeichnung für den Namen der Person Also gleich danach wollen wir ein paar On-Buttons und darin auf Buttons platzieren, die gleich dem Ende in einer Minute hier auf Button-Handler entsprechen. Diese Funktion gibt es noch nicht, aber wir werden eine Funktion namens Present Action Sheet schreiben , und wir werden den aktuellen Schüler übergeben , sodass jede Zeile aufgrund der NG-Vier ihren eigenen Schüler hat. Okay. Und dann innerhalb des Knopfes. Ja, wir werden nur ein Einschaltsymbol mit Slot-Symbol verwenden, also wird es keinen Text auf dieser Schaltfläche geben. Und ich möchte den horizontalen Umriss mit den Ellipsen. Wenn ich nichts anderes mache, lass mich meine eigene Kurve in Schwung bringen Kurve Absoluter Text. Oh. Okay. Du bist stummgeschaltet. Du bist stummgeschaltet. Okay. Okay. Wie lange bin ich schon stumm geschaltet? Seit du weggegangen bist. Ordnung. Muss ich rückwärts gehen Ich glaube nicht, dass wir es gehört haben, als du das Rutschen gemacht hast. Ja. Also sind wir hier, richtig? Jeder ist damit einverstanden? Ich meine, zumindest sieht meine Ergebnisliste so aus wie die, die Sie präsentieren. Jeder hat so etwas? Okay. Jep. Okay. Ich entschuldige mich. Haben also alle eine leere Funktion für die Präsentation eines Aktionsblatts erstellt eine leere Funktion für die Präsentation eines Aktionsblatts Es macht nichts. Es verhindert nur, dass wir einen Fehler in der Konsole haben? Ja. In Ordnung. Also entscheiden wir uns für den. Okay. Also lass uns jetzt wieder hierher gehen. Okay. Jetzt werden wir die Benutzeroberfläche mit dem Slider etwas konkreter gestalten. Ich glaube, wir haben diese Benutzeroberfläche alle schon einmal gesehen. Was wir hier tun , ist, dass wir eine Komponente mit Ion-Item-Optionen hinzufügen müssen. Und damit können wir auf beiden Seiten des Elements eine Schaltfläche hinzufügen . Es bleibt also verborgen, bis der Benutzer nach links oder rechts wischt In diesem Fall möchte ich auf der rechten Seite eine Schaltfläche zum Löschen erstellen rechten Seite eine Schaltfläche zum Löschen Wenn der Benutzer also nach links rutscht, wird ihm die Schaltfläche Löschen angezeigt. Das ist das Markup, das wir brauchen, um das zu erreichen, und es kommt direkt nach dem Tag Ion Items Closed Mach das hier. Ich finde das Ion-Item-Tag geschlossen und füge das Seitenende mit den On-Optionen hinzu, was bedeutet, dass es für die meisten von uns auf der rechten Seite sein wird. Hier verwende ich die Gefahrenfarbe, die standardmäßig rot und ionisch ist, und lösche den Button Also ein paar Dinge. Ich glaube, ich habe das beim letzten Mal erwähnt. Wann immer Sie einen Container haben, einen Ioniker, der mehrere Dinge wie die Schaltfläche oder in diesem Fall die Option eines Elements verarbeiten kann Schaltfläche oder in diesem Fall die Option eines Elements Normalerweise fügen Sie das in einer Pluralversion desselben Tag-Namens Die Umrandung der Schaltflächen enthält also keine Schaltflächenobjekte. In diesem Fall enthält eine Option eine Option. Macht das Sinn? Okay. Und dann für hier werden wir Klick-Events veranstalten, die ich einberufen werde. Bestätigen Sie, dass der Student den aktuellen Schüler bestanden hat. Wir sind immer noch in den NG Four, also haben wir immer noch Schüler. Okay. Okay. Und nochmal, es existiert noch nicht. Nun, eine wirklich coole Sache daran. Lass mich dir das ganz schnell zeigen. Gehe zur gerenderten Seite. Jetzt sollte ich also in der Lage sein, es zu verschieben und die Löschtaste zu drücken. Und weil es keine Funktion gibt, wird es nichts tun, wir geben mir eine Fehlermeldung in der Konsole. Aber zum Schmunzeln, du bist nicht begrenzt, weil du nicht auf eins beschränkt bist und das sollte eine Selbstverständlichkeit sein weil es einen Mehrkomponenten-Container hat Also für ein Grinsen, wenn ich zwei gebe, sind es zwei. Also fragte ich mich eines Tages, ich frage mich, wie viele damit umgehen können Und interessanterweise bewältigt es so ziemlich so viele, wie man darauf werfen kann Und es macht das Richtige. Ich meine, das Markup sieht albern aus, aber das Markup funktioniert. Also ich fand das irgendwie cool, aber sie unterstützen das. Wie viele musste ich entfernen? Okay. Ziemlich viele. Okay. Und ich gehe davon aus, dass Sie es auch als Symbol anstelle von Kevins Worten verwenden können. Interessanterweise nein. Weil Sie feststellen, dass dies kein Einschaltknopf ist Es handelt sich um eine Ion-Item-Option. Aber Sie sprechen ein gutes Argument an. Lass mich weitermachen, das habe ich noch nie gemacht. Lassen Sie uns sehen, ob wir das, was ich sage, dort tun müssen. Also das war die Option. Kannst du ein Symbol hineinlegen? Es sieht nicht so aus, als ob es ein Symbol unterstützt. Es befindet sich im Schiebeteil des Artikels in der Dokumentation. Ordnung. Also hier ist , was wir jetzt machen? Nein, bitteschön. Ja. Okay. Ich bin froh, dass ich mich hier irre. Das ergibt sehr viel Sinn. In diesem Fall könnten wir also anstelle der Option Ion Item wählen. Nun, lass es uns versuchen. Wir hätten es tun ich denke, das ist gültig. Und wo macht dann der Klick darauf? Und was ist mit Offman's Bill? Macht das? Nein. Ich brauche einen Steckplatz. Ordnung. Ich wollte nie davor zurückschrecken live zu programmieren und spontan zu experimentieren Das ist der Tod für Demo-Gott, oder? Stimmt. Jetzt ist die Frage, wo ist meine App? Hier ist meine App. Schau dir das an. Das ist nicht ganz richtig. Es ist so, dass ich noch einen zusätzlichen hatte. Okay. Also ich schätze, wir hätten hier dasselbe tun können. Roller ist gleich Gefahr. Nein. Also das wäre auf die Option gesetzt. Da hast du's. Wie ist das? Ehrlich gesagt, ich glaube, das gefällt mir besser. Also werde ich diesen loswerden. Ich habe nur eine Option mit dem Symbol. Und es rendert. Okay. Nicht schlecht. Guter Anruf. Es ist mir ehrlich gesagt nie in den Sinn gekommen, dort eine Ikone zu platzieren. Ich habe es noch nie gemacht gesehen. Es ist immer eine Textschaltfläche. In Ordnung. Sind hier alle gefangen? Ja. Lass mich den Code ganz schnell holen. Oh, klar. Oder willst du den Icon-Code? Oh, der Icon-Code. Ja. Den Icon-Code habe ich hier. Kannst du das lesen? Ja. Ja. Okay. Ordnung. Sag mir Bescheid , wenn du es hast. Und Sie können wahrscheinlich erraten, was als Nächstes kommt. Als Nächstes müssen wir nur die fehlende Funktion ausarbeiten. Ordnung, verstanden. Und dann machen wir das. Okay. Nein, zumindest vorerst. Okay. Das nächste , was ich tun möchte. Halte das wieder aus dem Weg. Das hier unten ist ein schwebender Action-Button. Es ist toll und ich glaube, es wird hauptsächlich im Materialdesign verwendet. Ich glaube nicht, dass ich es in iOSasthh oft gesehen habe . Die Google-Anwendungen verwenden es in Gmail und Google verwenden es in Gmail und Okay. Also, um das zu benutzen, und ich habe es hier, ist es nur ein schnelles Popup-Menü fast für Debugging-Zwecke Das ist also eine Schaltfläche zum Hinzufügen von Schülern, und das ist ein Zurücksetzen der Anwendung auf ihren ursprünglichen Zustand, und ich glaube, diese würde alles löschen und dann die Datenbank anzeigen Um das zu tun. Nur ein paar Dinge , die Sie über einen Fab wissen sollten. Wenn es geöffnet ist, ist es aktiviert. Sie können das Kantenattribut auf „Wahr“ oder „Falsch“ setzen. Wenn es wahr ist, versuche ich, ob ich das richtig verstanden Der Fab wird am Rand der Kopfzeile angezeigt , wenn er vertikal ist. Also horizontal und vertikal, um zu bestimmen, wo sich der Fab auf dem Bildschirm befindet. Okay. Ich habe ihn immer nur in der Ecke gesehen, aber du kannst sie auch in die Mitte stellen. Ich glaube, wenn Edge wahr ist, wird es den Header tatsächlich ein wenig überlappen. Und wenn es falsch ist, wird es im Inhalt unter der Kopfzeile platziert. Und ich habe noch eine weitere Notiz hier. Wenn „Vertikal“ auf „Unten“ eingestellt ist, sollte der Schlitz fixiert werden . Das ist eine Notiz, die ich für mich habe, und ich kann mich ehrlich gesagt nicht erinnern, was das bedeutet. Okay. Also. Das ist das Markup, um das tolle Menü funktionsfähig Wir erstellen also einen Blick auf den Container am unteren rechten horizontalen Ende, also unten rechts Und hier verwende ich Slot Fixed. Und es wird aus einem tollen Button bestehen. Dort sehen Sie, wann das Menü nicht erweitert ist. Es wird nur ein Symbol mit einer vertikalen Ellipse sein. Wenn es erweitert wird, werden wir die On-Fab-Liste haben Und sie wird nach links bis zum Anfang der Seite erweitert . Und es wird einige Knöpfe haben. Und denken Sie daran, wie ich gesagt habe, dass das Ionische wirklich konsistent ist , wenn es darum geht, Dinge zu benennen Dies scheint eine Ausnahme zu sein , da die Liste die Schaltflächen enthält Es ist keine tolle Button-Sammlung. Es ist eine Sammlung, die auf der Wunschliste steht. Lass uns das ganz schnell erledigen. Mal sehen, ob ich das schaffe. Das ist eine Menge Text auf dem Bildschirm. Lass es mich in Stücken machen. Dies wird das linke Element innerhalb des On-Inhalts sein. Also weiter Fab. Also ich habe keine Ahnung, woher es weiß , dass ich das machen wollte. Ordnung, ich glaube, du besorgst dir einen Polizisten. Es wird ein bisschen gruselig. Okay. Benutzt ihr Copilot und könnt ihr mir den Link dafür geben? Ja. Darüber haben wir letztes Mal gesprochen. Ich habe die Erweiterung hier geladen. Nein, egal, tut mir leid. Ich dachte, du benutzt die Schnipsel. Ja. Ja, ich habe ein paar Schnipsel. Ordnung. Ich werde einfach tippen. Ich kann es jetzt nicht sehen. Ich habe einige, die ionisch sind. Ich habe welche auf Schnipseln. Es ist dieser, der gerade auf Snippets aufgerufen wurde. Ich will wieder hier her. Ich könnte wahrscheinlich einfach den Copiloten ausschalten. Ordnung. Also hier drin, wir haben einen tollen Button. Die vertikalen Ellipsen. Und dann nach dem Knopf. Okay. Oh, ziemlich gut. Ich nehme nur noch ein paar. Okay. Das Symbol ist ein Ei, aber für mich sah es so nah an einem Samen aus, dass ich beschloss, es für die Datenbank zu verwenden. Aber im Moment werden wir dem noch nicht einmal irgendwelche Funktionen hinzufügen können. Wenn es funktioniert, funktionieren wir im Menü. Ist es das, was jeder hat? Okay. Wenn du willst, kannst du mit dem Spieler auf der Fehlerseite herumspielen . Wenn du es vorziehst, größer zu werden, dann sollten wir es in der Lage sein, es auf die gleiche Seite zu ändern. Dann werde erwachsen. Okay. Das ist klasse. Das ist ein cooles kleines Feature. Ich benutze es oft zum Debuggen. Ich werde einen kleinen Debugging-Fab erstellen, der nur aktiviert ist, wenn der Produktionsmodus falsch oder der Entwicklungsmodus wahr ist oder was auch immer Angular verwendet Ich füge Dinge wie Datenbank ein, lösche die Datenbank, lösche die Protokolle, zeige mir Geräteinformationen und solche Dinge Oder wenn ich ein Spiel schreibe, werde ich eines haben, das das gesamte Spiel bis zum letzten Zug durchspielt zum letzten Zug durchspielt , sodass ich das Szenario am Ende des Spiels testen kann. Okay. Okay. Sie können auch programmatisch damit herumspielen. Sie haben alle eine API, aber ich versuche, so viel wie möglich mit Markup zu machen Alle sind bereit weiterzumachen. Hat jeder einen Fab? Ja. Ja. In Ordnung. Jetzt ist es an der Zeit, einige Funktionen hinter diese Benutzeroberflächen zu stellen . Denken Sie also daran, dass ich erwähnt habe, dass es einige wichtige Controller gibt , die wir benötigen werden. Also lass uns das jetzt machen. Kennt jeder das Maßnahmenblatt? Das ist das kleine Menü, das von unten auftaucht? Ich denke, sowohl IOS als auch Android haben eine Version davon. Und wie Sie erwarten würden, wird Monic Ihnen das geben, das für Ihr Gerät negativ aussieht Sie erstellen diese jedoch programmgesteuert. Sie erstellen sie nicht in HTML. Sie erstellen sie in Typoskript. Okay. Aber diese Funktion steht leer da. Wir müssen sie als Sync markieren, weil alle ionischen Controller asynchron sind, also werden wir die Funktionen abwarten wollen , die wir aufrufen Also das Erste, was ich tun möchte, sind einige Buttons zu erstellen Normalerweise würde ich das alles in einer riesigen Funktion machen, aber das ist wirklich schwer zu präsentieren. Also werde ich die Schaltflächen erstellen zuerst die Schaltflächen erstellen und sie dann alle kombinieren und anzeigen . Macht das Sinn? Also mit meinem Code hier. Nein. Da haben wir's. B im Typoskript der Dienstpläne Bevor wir das Maßnahmenblatt präsentieren, nein, tut mir leid . Innerhalb des Aktionsblatts. Also werden wir einen Button erstellen. Es ist eine Art Aktionsblattschaltfläche. Das gibt dieser netten Intelligenz. Okay. Okay. Und was soll diese Funktion tun oder was soll die Schaltfläche tun , wenn der Benutzer darauf klickt Das erste ist also die Textbeschriftung für den Menüpunkt, das Symbol, das wir präsentieren möchten, was nur der Name des Symbols von on icons ist. Und dann könnte die Funktion, die wir ausführen wollen , eine Namensfunktion sein, aber in diesem Fall verwende ich einfach eine Pfeilfunktion. Und die Funktion gibt es bereits im Studentenservice. Also dieses Studentenwerk Mark anwesend. Ich brauche ein Komma. Und dann ein Semikolon Und dann, wie ich es oft tue, habe ich vergessen, den Action Sheet-Button aus Ionic Angular zu importieren den Action Sheet-Button aus Ist das alles geklärt? Okay. Hat jeder den? Ja. Also sind es wirklich so die hinteren Häkchen oder sind es einfache Anführungszeichen? Es kann beides sein. Okay. Ich glaube, an einem Ort war ich tatsächlich, ich erinnere mich, warum ich das getan habe. Wenn Sie einfache Anführungszeichen in PowerPoint eingeben, werden sie automatisch in Curly umgewandelt , was bedeutet, dass Sie sie nicht kopieren und einfügen können Also habe ich angefangen, Backticks-Folien zu verwenden. C. Okay. Gute Frage. Okay. Also, wenn Mark abwesend ist, wird es fast genauso sein. Ich bin so faul. Ich werde es hervorheben. Und dann die Optionen mit dem Pfeil nach unten verschieben. Erstellen Sie eine Kopie des Blocks. Manche von denen stehen im Weg. Okay. Fehlenden Knopf markieren. Als abwesend markieren. Und das ist die Gliederung. Und das hier, ich rufe den Studentenservice für Mark Absent an. Sag mir, wann ich weitermachen kann. Und bei mir war es alles, als ich die da reingetan habe, alles war rot. Also muss ich sie an der falschen Stelle haben. Willst du deinen Bildschirm ganz schnell teilen? Ich kann nicht, weil es nicht so ist , dass ich dabei auf meinem Tablet bin. Okay. Stellen Sie sicher, dass sich die Konstanten darin befinden , die eine Aktionsblattfunktion darstellen Das wäre der Grund, warum ich dasselbe getan habe. Als ich war, fing ich einfach an, draußen darauf zu tippen. Und dann fiel mir ein, dass man keine Konstante in der Klasse haben kann. Okay. Okay. Das hat es geschafft. Ich hab's geschafft. Okay. Also müssen wir nur noch ein paar Buttons erstellen, aber sie werden alle sehr ähnlich erstellt werden. Auch hier werde ich einfach einen neuen Block erstellen. Und das ist „Löschen“ der Schaltfläche „ Textbeschriftungen löschen“. Verwenden Sie das Trach-Symbol. Und hier, beachten Sie, dass ich eine weitere Eigenschaft hinzufüge. Ich füge eine Rolle hinzu, und diese Rolle ist destruktiv. Okay. Destructive macht nur auf IOS einen Unterschied. Android, es wird überhaupt keinen Unterschied machen. Aber auf IOS wird dieser bestimmte Menüpunkt rot angezeigt. Und dann, was den Handler angeht, nenne ich diesen bestätigten Löschversuch Student. Hat das jeder? 1 Sekunde. Sicher. Michael, haben wir zwei Buttons auf dem bestätigten „Schüler löschen“ -Button? Haben wir zwei Schaltflächen bei Bestätigt, Schüler löschen? Nun, kannst du dort einfach für eine Sekunde den Grader-Code zeigen Die Mine? Ja. Ja, das ist in Ordnung. Okay. Also all das sind gegenwärtige Aktionen. Okay. Das ist mein Problem. Korrekt. Einfach reparieren. Richtig. Und bestätige, wir werden am Ende, du weißt schon, einen Bestätigungsdialog öffnen und sagen: Bist du sicher, dass du diese Person löschen willst? Deshalb rufe ich im Studierendenservice noch nie Delete an. Hab dich. Macht Sinn. Okay. Lass mich das vorerst wieder hier hinstellen. Okay. Und das ist, glaube ich, unser letzter Button, und das ist der Abbrechen-Button. Das Aktionsblatt wird also angezeigt. Du willst nichts tun. Du willst es nur stornieren. Das ist eine Schaltfläche zum Stornieren. Beachten Sie, dass dieser keinen Handler hat. Also weil es keinen braucht. Also werde ich einfach nehmen. Das Gleiche, duplizieren, den Handler loswerden. Nennen wir es „Abbrechen“, Texas storniert die Klamotten und die Rolle ist gestrichen. Es gibt also einige eingebaute Rollen, in die das Aktionsblatt integriert ist und die Schaltfläche „ Stornieren“ als eine von ihnen, und das heißt einfach, nichts tun. Und wie Sie gesehen haben, sind sie auch destruktiv. Okay. Also sollten wir jetzt vier Knöpfe haben, die nichts tun, oder? Sie existieren noch nicht. werden eigentlich durch nichts referenziert. Als Nächstes müssen Sie das Aktionsblatt aus diesen Schaltflächen erstellen . Lassen Sie mich das nach unten verschieben. Hier, geh dir aus dem Weg. Jetzt wollen wir also das Aktionsblatt erstellen. Um das zu tun. Entschuldigung, mach genauso weiter. Entschuldigung, das steht in demselben aktuellen Aktionsblatt. Wir sind immer noch im aktuellen Aktionsblatt. Funktion. Aber diese erste Zeile wird nicht funktionieren, weil Mike nie daran denkt, Dinge in seinen Konstruktor zu injizieren Bevor wir das tun, gehen Sie zu Ihrem Konstruktor und fügen Sie einen Actionsheet-Controller oder Pipe-Action-Controller hinzu einen Actionsheet-Controller oder Pipe-Action-Controller Warum gefällt ihm das nicht? Weil ich es nicht importiert habe. Also werde ich den Action Sheet Controller aus Ionic Angular importieren aus Ionic Angular Sobald Sie das getan haben, können wir jetzt zum aktuellen Aktionsblatt zurückkehren und den Rest eingeben Also werden wir ein Aktionsblatt erstellen und warten auf diesen Aktionsblatt-Controller. Ich habe es schon einmal erwähnt. Alle diese Funktionen sind asynchron und versprechen etwas Um das Aktionsblatt zu erstellen, geben wir ihm ein einzelnes Optionsobjekt Hier sagen wir ihm, was wir darin haben wollen. Wir wollen hier einen Header haben, die Backticks sind tatsächlich nützlich. Wir wollen den Vor- und Nachnamen des Schülers. Und dann werden wir kreieren. Das ist auch ziemlich gut. Und wir werden die Schaltfläche erstellen, indem wir eine Reihe dieser konstanten Schaltflächen erstellen , die wir bereits erstellt haben. Das macht Sinn? Haben wir hier irgendein Typskript oder einen Angular Guru? Ich habe diese Frage immer gestellt und nie eine einheitliche Antwort bekommen. Okay. Macht es Sinn, auf die letzte Anweisung einer asynchronen Funktion zu warten Okay. Wenn Sie sich jetzt eine Aktionsblattschaltfläche ansehen, denkt Typescript, dass sie ein Versprechen als ungültig zurückgibt , weil wir eine Synchronisierung markiert haben und nichts zurückgeben Ich könnte aber auch präsentieren, was ein Versprechen zurückgibt Und dann denkt Typescript, dass es ein ungültiges Versprechen zurückgibt. Was ist der Unterschied zwischen der Rückgabe des Versprechens, das uns durch die Gegenwart gegeben wurde, oder dem bloßen Warten Es gibt einen Unterschied, und er ist sehr subtil. Und ich kann mich ehrlich gesagt nicht erinnern, was es ist. Ich glaube, es hat etwas mit der Aufrufliste und mit Fehlern zu tun . Ich denke, wenn Sie die Aktion nicht erwidern ist das Ergebnis des Versprechens unbestimmt Aber wenn Sie die Aktion precent zurückgeben, dann geben Sie Wert des Versprechens zurück, dass das Geschenk Was auch bedeutet, dass das Versprechen ungültig ist. Ja. Also der Unterschied, so wie ich es sehe, ist, dass wir uns dafür entscheiden, undefiniert zurückzukehren Diese Methode wird also quasi zum Feuer und Vergiss, richtig? Ich denke schon. Siehst du irgendeinen Wert darin, das Versprechen zurückzugeben? Ich weiß nicht einmal, warum sie das Versprechen zurückgeben , denn wenn ihre Rückgabe ungültig ist und Sie vielleicht sehen möchten, ob sie fehlschlägt, ich weiß es nicht. Ehrlich gesagt habe ich in all den ionischen Apps, die ich geschrieben habe , nie einen Grund dafür gefunden . Du kannst das sogar tun Du musst nicht einmal darauf warten. Und ich glaube, dass es immer noch denkt. Das Versprechen ist nichtig. Ich habe aber andere Leute gesehen, die solche Dinge getan haben. Sie werden nach der Gegenwart etwas tun. Aber wenn Sie das tun wollen, haben Sie schon das asynchrone Await-Muster verwendet, Sie könnten es einfach so machen So etwas in der Art. Fülle das aus. Okay. Okay. Okay. Also, wenn du das jetzt hast, wenn es gerendert wird, sollten wir, wenn es gerendert wird, ein Maßnahmenblatt besorgen Also, was machen wir mit Casey McBry? Wir werden als anwesend markieren, als abwesend markieren usw. Wir werden löschen, löschen bringt nichts und wir könnten stornieren Sie können ein Aktionsblatt auch schließen indem Sie einfach auf eine beliebige Stelle klicken Und die Escape-Taste auf Ihrer Tastatur. Ja. Hat jeder ein funktionierendes Maßnahmenblatt? Ja. Ja. Ordnung. Also werden wir wieder viele ähnliche Dinge machen. Durch die Implementierung der Warnung zum Löschen. Dazu benötigen wir den Alert-Controller. Die API ist fast identisch mit dem Action Sheet Controller. Also nochmal, was ich der Einfachheit halber oder der Bildschirmfläche machen möchte , ist, ein paar Buttons zu erstellen, und das muss synchronisiert werden. Diese Schaltfläche zum Löschen. Delete wählt Handler aus. Ja, sicher. Schüler löschen. Es. Okay. Also Tippfehler auf der Folie. Ich glaube, Student löschen sucht nach der ID des Studenten Also geben wir einfach den Studentenausweis weiter und nicht den gesamten Studenten. Und dann die Schaltfläche Abbrechen. Okay. Okay. Und genau wie zuvor funktioniert die Rolle des Abbrechens automatisch so, wie Sie es erwarten würden. Die Warnung wird automatisch abgewiesen. Ich vermisse nur hier. Haben wir eine Methode zum Löschen von Schülern entwickelt? Sollte im Studentenservice eine Methode zum Löschen von Studenten verfügbar sein. Ja, ich sehe einen. Und dann genau wie zuvor. Was war die Rolle? Entschuldigung, wurde es abgesagt? Rolle stornieren. Ja. Okay. Also wird kein Handler benötigt. können Sie all diesen Dingen immer noch Handler hinzufügen Role Cancel können Sie all diesen Dingen immer noch Handler hinzufügen. Und ich kann mir vorstellen, dass Sie sich vielleicht anmelden möchten. Weißt du, hey, sie haben gerade einen Studenten gelöscht , solche Sachen. Genau wie zuvor, auf dem Alert-Controller. Hat jeder seine zwei Knöpfe? Und der Alert-Controller? Nein. Also, ich glaube, ich bin da, wo du bist. Mein Alert-Controller ist veraltet und wurde nie benutzt. Richtig. Weil wir es noch nicht benutzt haben. Okay. Also, um das jetzt zu tun. Okay. Mir geht es gut. Und wieder ist es dem Action Sheet Controller sehr ähnlich. In diesem Fall werden wir auch einen Unterheader und eine Nachricht haben . Wir haben die beiden Knöpfe. Jetzt müssen wir, genau wie der andere Controller , eine Erstellungsfunktion haben , die ein Optionsobjekt akzeptiert. Okay. Und das ist in der bestätigten Löschung? Wir befinden uns immer noch im bestätigten Löschvorgang, ja. Okay. Okay. Also, was ich hier tun möchte, ist hey, willst du den Schüler löschen, den Vor- und Nachnamen des Schülers anzeigen , damit der Benutzer weiß, was er löscht. Weißt du, nichts ist schlimmer, als auf die falsche Person zu klicken. Und dann Nachricht. Es ist wirklich machbar. Aber ein anderes Mal. Und dann fügen wir die beiden Knöpfe hinzu. Und dann endlich, wenn du alles richtig nimmst. Okay. Ein paar Dinge. Erstens sollte das funktionieren. Und das sollte funktionieren. Und die Löschtaste ruft einfach den Dienst auf. Wenn ich seride lösche ist es. Ich kann Greg loswerden. Ich werde Neil los und so weiter Weil sie lokal gespeichert sind, auch wenn ich sie oft aktualisiere. Ordnung. Ich glaube, wir gehen. Führt ihr alle Schüler mit verlassenen? Nein. Ich Nein. Ich erhalte die Warnung nicht. Okay. Also lass uns das ein bisschen auflockern. Ihr bestätigter Löschvorgang sollte so aussehen . Bestätigter Student. Schaltfläche löschen, Handler löschen, Schüler löschen, ja. Schaltfläche „Abbrechen“, „Abbrechen“, „ Schließen“, ganz zu schweigen von Kleidung. Und dann ständige Alarmbereitschaft. Oh, okay. Da ist mein Problem. Und das ist okay. Ja. Okay, funktioniert. Mir fehlte die Linie 70. Okay. Ordnung. Also jetzt. Gib mir hier eine Sekunde. Okay. Ordnung. Wir werden eine kleine Änderung vornehmen. Und es würde dir helfen, die Folien zu sehen. Okay. Ich möchte der Komponente die Funktion „Schüler löschen“ hinzufügen . Und ich zeige dir warum. Gehen wir in den Code und fügen eine weitere Funktion hinzu. Denken Sie daran, dass ich das hatte. Das möchte ich sehen. Das heißt, hier bei der bestätigten Löschung nennen wir das stattdessen „ Student löschen“. An diesem Punkt sollte sich überhaupt nichts ändern. Anrufen Ich habe den Handler für die Löschtaste vom Anruf beim Studierendenservice auf den Aufruf dieses Löschstudenten umgestellt die Löschtaste vom Anruf beim . Okay. Es ist eine etwas konsistentere API, weißt du, wir haben dem Studenten die Komponente erzählt. Und das verbirgt dann die Tatsache, dass das Studentenwerk das nur per Ausweis machen will Also den vollen Studenten an diesen weiterreichen. Also, während und während des Anrufs. Okay. Habe. Okay. Also, was ich hier machen möchte, ist den letzten Ionen-Controller zu verwenden , den wir hier verwenden werden, und das ist der Toast-Controller Also oft willst du dem Benutzer eine Nachricht geben , dass etwas Aber es ist nicht kritisch genug , um den Benutzer aufzuhalten. Und wenn der Benutzer die Nachricht verpasst, ist das vielleicht keine große Sache, oder? Das ist also der perfekte Anwendungsfall für einen Toast. Okay. Also, und du kannst das Bild von dem Toast hier oben sehen. Also, was ich jetzt tun möchte, ist den Rest der Funktion „Schüler löschen“ zu implementieren Okay. Sie werden also sehen, dass die API für den Toast-Controller fast genau dieselbe ist wie für den Alert-Controller Aber in diesem Fall habe ich keine Tasten, also ist es eine viel einfachere Funktion Lass mich dir das aus dem Weg räumen. Gehen Sie in meine Funktion „Schüler löschen“ und richten Sie das ein. Delete Student gibt ein Versprechen zurück, damit wir es abwarten können. Dann werden wir einen Toast kreieren. Und Sie sehen wahrscheinlich schon den Fehler, den ich habe? Und das ist so, dass ich noch keinen Toast-Controller habe. Sie also zurück zum Konstruktor, Post-Controller, und importieren Sie ihn dann aus Ionic Dann kann ich runterkommen und fertig werden. Mein Toast hat eine Botschaft. Und eine gute. Es wurde gelöscht. Okay. Und jetzt, die Botschaft ist ziemlich einfach. Was möchtest du dem Benutzer sagen Der Rest sind die anderen Optionen, wie lange möchten Sie diese Informationen anzeigen? Und wo möchten Sie diese Informationen anzeigen? Und in meinem Fall möchte ich weitermachen und 3 Sekunden zeigen. Das ist also in Millisekunden. Und ich werde es oben auf dem Bildschirm platzieren. Es gibt noch andere Dinge, die wir tun können. Wir können Color Danger so machen , dass es rot angezeigt wird. Okay. Ich denke, das Coole ist, wenn du den Weltraum kontrollierst , dann kannst du dir sagen, was die anderen Optionen hier sind. Sie können also Schaltflächen zu einem Toast hinzufügen, genauso wie wir die Anordnung der Schaltflächen zu den anderen hinzugefügt haben Und es ist buchstäblich dieselbe API. Sie könnten also eine Schaltfläche erstellen, auf die der Benutzer klicken kann, um sie zu schließen, bevor die 3 Sekunden abgelaufen sind. Das ist abgelaufen. Du könntest ihm ein Symbol für die linke Seite geben, ein Symbol auf fast einer Kopfzeile neben der Nachricht Also können wir das machen, wir können Icon Tract machen und dann den Toast präsentieren Jetzt, wenn ich zum Löschen gehe. Der Benutzer. Ich kriege die Bestätigung und dann sollte ich oben einen Toast bekommen Und du kannst das kleine Papierkorbsymbol sehen und es wurde gelöscht. Okay. Und ich kann es auch in die Mitte legen. Ich muss es glauben, Bobby. Da hast du's. Oder ganz unten. Fragen. Hat jeder den zum Laufen gebracht? Okay. Normalerweise wären wir zu diesem Zeitpunkt pünktlich pro Pause Wir haben noch ungefähr eine halbe Stunde. Und das nächste, worauf wir zugreifen werden, ist die Informationsseite für Studierende. Ich glaube also, dass ich das normalerweise nach dem Mittagessen machen möchte . Es gibt also etwas , das wir auf der Informationsseite für Studierende übersehen haben. Weiß jemand was es ist? Bemerkt es jemand? Gehen wir zurück zur App. Tatsächlich gibt es ein paar Dinge, die wir verpasst haben. Wir können das in den nächsten 20 Minuten konkretisieren. Es steckt kein Code dahinter, außer hinter neuen. Keines davon macht irgendwas. Und nichts passiert, wenn wir als anwesend markieren. Also werde ich um einen Gruppenkonsens bitten. Woran möchtest du als Nächstes arbeiten? Möchten Sie sie als abwesend und anwesend markieren oder möchten Sie sie löschen, indem Sie der Datenbank Platz nehmen und alle in der Datenbank löschen Nun, entscheiden wir uns für Gegenwart und Abwesende. Ordnung. Okay. Also präsent und abwesend, bringst du den S-Code zurück? Okay. Die Benutzeroberfläche, die ich mir für Gegenwart und Abwesenheit vorgestellt hatte, wäre also ein anderes Symbol irgendwo auf der Liste, oder vielleicht würde ich das Symbol durch ein vorhandenes oder ein abwesendes Symbol ersetzen. Haben Sie eine Präferenz? Klingt einer von denen für irgendjemanden besser oder schlechter? Wenn man sich das vorstellt, könnte das eine sehr kleine Benutzeroberfläche sein. Ich denke, lass uns das versuchen. Direkt nach dem Personenumrisssymbol. Fügen wir ein weiteres On-Symbol hinzu. Ich glaube, wir wollen immer noch, dass Slot gleich Start ist. Und das sind ein paar Möglichkeiten, wie wir das angehen könnten. Ich werde es ausführlich machen Dieser wird gleichberechtigt sein Wir werden dieselben Symbole verwenden , die wir für „Als anwesend markieren“ und „Löschen“ verwenden Also das Gegenwärtige und das Nebensächliche für abwesend. Wenn wir das tun, haben wir ein Symbol für Gegenwart, und dann fehlt eines, was bedeutet, dass wir entscheiden müssen, welches wir zeigen wollen. Wir können das auf zwei Arten tun. Wir können das machen. Wir stellen fest, dass dieses Symbol nur gerendert wird, wenn Studentenstatus dem Status „Gegenwart“ entspricht. Okay. Und dann können wir das machen, was der Studentenstatus ist. Abwesend. Also, bevor ich das speichere und rendern lasse, was wird es uns jetzt zeigen? Was wird es bewirken? Es wird eine der beiden Schaltflächen angezeigt. Bist du dir sicher? Tut mir leid. Einer der beiden. I Was ist, wenn es so ist? Weil Sie sich erinnern, dass es ein optionales Feld ist, also kann es Null sein. Also wenn ich mir das ansehe. Ich bin mit dieser Benutzeroberfläche nicht besonders zufrieden. Was denkst du? Okay. Und ich glaube, es funktioniert. Füge ein drittes Symbol hinzu. Ein Nichts-Symbol? Was passiert, wenn du. Das könntest du sicherlich. Also können wir etwas hinzufügen, damit wir noch eins haben können. Und ich denke, Sie können das tatsächlich tun, wenn Sie ihm einen Namen geben, den es nicht gibt. Also nenne ich es Mike. Und du kannst einfach NG sagen, kein Studentenstatus. Also, wenn es überhaupt keinen Wert hat, dann denke ich, was passieren wird. Ja. War es das, was du im Sinn hattest? Ich habe jetzt nichts, Rendern. Fantastisch. Was hast du geändert? Ich habe eine hinzugefügt. Ich habe eine Tilda anstelle eines Okay gesetzt. Mir geht es gut Okay. Also das ist nicht schlecht. Aber dann begann ich mich zu fragen, was ist der Zweck des Personensymbols? Aber vielleicht ist es am besten, das Personensymbol zu platzieren, wenn nicht sogar den Studentenstatus, und dieses dann komplett zu entfernen. Wie funktioniert das? Ich habe dich vor ein paar Tagen gewarnt. Ich bin kein Designer. Deshalb verwende ich Ionic, weil ich ihre Muster normalerweise ziemlich gut kopieren kann ihre Muster normalerweise ziemlich gut kopieren Kannst du dir den Code noch einmal ansehen? Klar. Es scheint , als bräuchten wir zwei neue Varianten des Personensymbols. Nun, mit einem Plus daneben und etwas mit einem durchgezogenen Schrägstrich Ordnung. Dann schauen wir uns die Icons an. Und schauen wir uns unsere gesamte Person an. Da hast du's. Plus und Mus. Wir verwenden das, um eine Person hinzuzufügen. Ja. Okay. Aber wir haben gefüllt und unbefüllt Sie haben also umrissen und gefüllt. Okay. Anstelle des Augapfels Und dann hast du Sharp, aber ich glaube nicht, dass uns das hier wirklich hilft Ich meine, nochmal, es ist irgendwie. Aber es gab noch einen, nicht wahr? Was ist das? Ich hätte nicht gedacht, dass das Barrierefreiheit ist, aber okay Also könnten wir diesen verwenden für ich weiß nicht, oder wir könnten diesen benutzen, um Dieser Körper. Und dann könntest du Okay benutzen. Person und Personenzusammenfassung? Kannst du ihre Farbe ändern? Ja, das könnte sie. Was denkst du? Ich weiß es nicht. Durchgehend schwarzer Umriss schwarz oder grau oder unbekannt. Nun, ich meine, es ist ein Designproblem bei dir, dass ich kein Designer bin, also ist es mir egal. Aber wie Sie sehen können, müssten Sie hier nur diesen Teil ändern. Aber du hattest ein gutes Argument, also könntest du diesen haben, sie haben ein Grau. Welche Farbe hat das? Okay. Lassen Sie mich noch einmal auf ihre Farben auf den Knöpfen eingehen. Sie haben eine Liste mit Farben. Flugfarbe entspricht Licht. Wir arbeiten. Und dann könntest du es tun, wenn sie abwesend sind, okay. Gliederung der Person. Und wenn sie da sind, können Person und Sie sogar Farbe gleich erfolgreich machen. Nein, nicht der. Okay. Wie ist das? Klar. Nun, der ist fast unsichtbar, nicht wahr? Also ich schätze, ich würde das auf „Farbe ist gleich“ ändern. War es mittelgroß? Mittel. Ja. Ja, das hilft mir auch nicht. Ist ein Medium gefüllt? könnten wir machen. Das wäre also nur eine Person. Ja. Damit könnte ich leben. Also Umrisse, sie sind abwesend, grün, sie sind präsent und das Medium, das wir noch nicht kennen. Und das war der Sinn der Reset-Taste , sie alle so zurückzusetzen , dass 4. Session3: Okay. Habe ich die Live-Transkription schon einmal aktiviert? Ist es gerade passiert? Nun, bitteschön. Okay. Also ist die Transkription aktiviert Wenn du es sehen willst, kannst du es, glaube ich, unter dem Menü „Mehr“ finden Sie können es sich ansehen, die Größe ändern usw. Alles klar. Ohne weitere Umschweife. Zu diesem Zeitpunkt sollten wir also eine ziemlich voll funktionsfähige Kaderseite haben Und ich weiß nicht, ob es jeder gesehen hat, aber ich habe sowohl in E-Mails als auch in Slack eine Aufforderung hinterlassen, um zu sehen, wie wir die drei auf den Symbolen loswerden könnten Hat jemand irgendwelche Ideen oder Gedanken darüber, wie das geht? Wenn ja, komm einfach, ja. Ich habe es zum Laufen gebracht. Was hast du getan? Also könnte ich teilen, wenn du willst. Klar. Lassen Sie mich dafür sorgen , dass ich den Bildschirm teile, aber ich glaube, ich muss das Teilen beenden. Okay. Mal sehen, wie ich den Bildschirm teile? Ich weiß nicht, ob ihr das sehen könnt. Ich sage, ich habe es gesagt. Also habe ich all das Zeug auskommentiert. Nein, es ist genau hier. Also Zeile 28. Ja. Also der Name ist an den Namen des Icons gebunden, ihn an den Schüler weitergegeben, und ich habe auch Farbe gemacht. Perfekt. Farbe basiert auf Moment, was hast du getan? Ich habe gerade bestanden, also gebe ich nur den Studentenausweis ab. Farbe entspricht dem Schüler in den Eltern. Was übersehe ich Was wusstest du, womit ich da rumgespielt habe. Tut mir leid. Tut mir leid. Ja. Ich meinte, ich habe diese Syntax schon einmal gesehen. Nein. Und dann sind die Funktionen hier nur zwei H-Anweisungen, von dort aus. Okay. Hast du den Fehler dabei bemerkt, weil du recht hast Das ist ein einfacher Weg, und viele Leute machen es auf diese Weise Aber es gibt einen Fehler, es auf diese Weise und eckig zu machen. Ich möchte wissen, ob du es bemerkt hast? Ich glaube nicht. Okay. Ich habe Sachen auf die Konsole geschrieben und ich weiß es nicht. Es ist ein bisschen schwer zu folgen. Okay. Also sag es mir. Fügen Sie also in jede Funktion eine Konsolenlog-Anweisung mit dem Namen der Funktion ein. Und wenn ich falsch liege, bin ich sehr froh, mich zu irren. Okay. Perfekt. Und dann noch einer für Farbe. Weiß jemand, was passieren wird? Okay. Also öffne deine Todeswerkzeuge. Da hast du's. Das ist es, was passieren wird. Ja. Also die werden ständig angerufen. Ja. Jedes Mal, Angular überprüfen muss, ob sich etwas geändert hat, also muss es für die Datenbindung diese Funktionen aufrufen, weil es keine Möglichkeit hat , zu wissen, dass es nicht neu zeichnen muss In einer Anwendung wie dieser ist das keine große Sache, Sie werden es nie sehen Aber wenn Sie sich etwas mit Hunderten von datengebundenen Komponenten vorstellen könnten, wäre das wirklich unangenehm. Vor allem, wenn diese Funktionen mehr tun würden als nur das, was sie dort tun, oder? Diese Funktionen machen nicht viel. Es ist also keine so große Sache. Ich war bei einem Projekt, bei dem sie mit der Maus darüber gefahren sind und einen Restaufruf getätigt haben Okay. Wie Sie sich vorstellen können, war das nicht schön. Also ich denke, du bist auf dem richtigen Weg. Aber ich habe gesehen, wie das getan wurde, um dies zu verhindern, indem der Name und die Farbe des Symbols in ein eckiges Rohr umgewandelt wurden. Okay. Und mit einem eckigen Rohr hat es buchstäblich die gleichen Funktionen. Aber weil sich der Eingang zur Pipe nicht geändert hat. Angular weiß, dass es die Funktion nicht aufrufen muss. Ist das leicht zu bewerkstelligen? Oh ja. Sicher. Willst du, dass ich es dir durchspreche, oder willst du, dass ich Sure. Okay. Also lass uns sehen , wo wir verhindern, dass die App läuft. Und mach weiter und frag Angular. Wenn du willst, können wir es einfach mit einem machen , dem Namen oder der Farbe. Es spielt keine Rolle, welche Herkunft der Name hat. Okay. Lassen Sie also Angular CLI eine Pipe generieren und PXG eine Pipe generieren Und dann der Name der Pipe, also vielleicht der Name des Symbols Kapital oder ich, das war egal. Vielleicht bist du okay. Das ist in Ordnung. Öffnen Sie jetzt die Icon-Namens-Pipe. Das wird sein: Sie können mit Befehl oder bei gedrückter Maustaste darauf klicken. Im Terminal. Wo steht „Name des Quell-App-Symbols erstellen“? Klickt Control in der Ausgabe auf den Dateinamen? Dieser Typ, richtig? Nein. Der neben dem. Ich hab dich. Das ist die Testdatei. Ja. Lass uns auf den anderen klicken. Die Datei, die nicht getestet wurde. Das ist das App-Modul. In Ordnung, wir nehmen den mittleren. Da hast du's. Okay. Okay. Wenn Sie also eine Pipe verwenden, wird alles, was Sie für den datengebundenen Wert übergeben , an den Wert übergeben. Was Sie hier also im Wesentlichen wollen, ist der Name des Schülers. Die Schüler. Anwesenheitsstatus, richtig? Ja. Sie würden wahrscheinlich nicht den gesamten Studentenwert darauf übertragen wollen, weil Ihnen nur dieser eine Wert wichtig ist. Okay. Also mach weiter. Also wird der Wert eine Zeichenfolge sein. Ich glaube nicht, dass Sie den Rest dieser Parameter benötigen. Es ist aber keine Zeichenfolge. Du hast recht. Es ist keine Schnur. Es ist Studentenstatus? Korrekt. Also ich meine, sobald Sie diesen Punkt umgestaltet haben, ist es wahrscheinlich sinnvoll, ihn zu einem eigenen Typ zu machen Okay. Aber vorerst schaffst du es. Es sollte okay sein, eine Zeichenfolge zu sein. Was ist, wenn es mir gut geht. Okay. Du könntest es genauso machen. Du könntest es abwesend oder präsent machen. Lass uns sofort mit dem Studenten gehen und ich mache es. Sie können das Refactoring später durchführen. Also ja, jetzt geht es nur noch darum, denselben Code zu kopieren und einzufügen Okay. Und das ist ein Wert. Okay. Okay. Also das sieht ziemlich gut aus. Also jetzt zurück in deinem HTML-Code, wo du weitergibst, Icon Name Student anzurufen, gib einfach Student in Student weiter. Einfach Student und dann an den Namen der Pipe weiterleiten. Name des Symbols. Und dann werde den Stift los, okay. Und ich glaube, es gibt wahrscheinlich noch etwas anderes , das du in Ruhe lassen kannst, wenn du willst , weil du es in der Konsole sehen solltest. Sie werden sehen, dass einer von ihnen nicht immer wieder angerufen wird. Woran ich mich nicht erinnern war, ob es etwas gibt, das du nicht mehr benutzen kannst. Ja, werd das los. Okay. Und ich würde ein ähnliches Konsolenprotokoll in die Pipe schreiben. Auf diese Weise können Sie allen beweisen , dass es nur dann aufgerufen wird , wenn es nötig ist. Und es gibt noch etwas, das du hier noch erledigen musst. Ich habe gerade vergessen, was es ist, also müssen wir es gemeinsam herausfinden Mach weiter und starte es. Die Tatsache, dass es im Modul aktiviert ist, das ist vielleicht alles, was Sie tun mussten , weil es automatisch hinzugefügt wurde. Nein, es gibt einen Rat. Okay. In Ordnung. Genau davor hatte ich Angst. Das kann gefunden werden. Das ist schlimmer als Life Coating. Das ist der Versuch, jemand anderem zu sagen , wie man Leben trägt. Das weiß ich. Ordnung. Also die Pfeife ist da. Muss ich sein? Muss ich im Dienstplanmodul sein? Gehe zurück zum A-Modul. Ich denke, wir müssen es vielleicht deklarieren. Nein, Sir. Nein, ich wollte das, weißt du, heute Nachmittag machen, um sicherzugehen, dass ich bereit bin. Oh, meine Güte. Nein, ich fühle mich schlecht. Ist es das? Was war es? Wie lautet der Name der Pfeife? In der Pipe Dot TS-Datei. Da hast du's. Vielleicht nicht. Nein. Öffnen Sie Ihre Pipe-TS-Datei erneut. Es ist der dritte Tab in Ihrem Editor. Nein, es ist hier. Okay. Ja. Also , wie sollte es heißen. Ja, meinem Gehirn fällt es schwer sich daran zu erinnern, und ich benutze sie ständig. Es ist eines dieser Dinge , wenn man es einmal geschrieben hat, man nie wieder darüber nachdenken muss. Es möchte sicherstellen , dass es im Modul Roster-Seite deklariert oder importiert Oh, vielleicht gehört es nicht ins A-Modul. Vielleicht hast du recht. Vielleicht gehört es ins Modul der Dienstplanseite Okay. Also erkläre es hier. Unter Import oder Es hat kein eigenes Modul. Also deklariere es einfach. Wenn Sie den Namen des Symbols eingeben, sollte es ihn für Sie finden. Da hast du's. Und möglicherweise müssen Sie es aus dem App-Modul entfernen. Hier, das stimmt. Okay. Da hast du's. In Ordnung. Also wie oft wird es immer noch angerufen? Einmal für jede Person, oder? Ja. Und sieh dir an, wie oft das Symbol Farbe 9 noch eingibt. Wenn Sie jetzt herumklicken, klicken Sie einfach auf eine beliebige Stelle. Okay. Ja. Ordnung. Nun, es ist ein bisschen besser geworden, also ruft es nicht weiter, meine Knöpfe sind weg. Ich bin mir nicht sicher, was ich dort gemacht habe. Ja. Da hast du's. Ja, neun Mal. Interessanterweise hat das Icon Name Pipe gekriegt, was hast du gemacht Hast du etwas zurückgesetzt? Ich glaube nicht. Ich glaube, das hast du getan. Ich glaube, du hast auf deinem tollen Button auf Reset gedrückt. Ich heile nämlich das ganze Wasser. Ja, wahrscheinlich. Alle deine Anwesenheitsstatus sind weg? Ja. Okay. Okay. Also der ganze Sinn dieser Übung. Ich sollte keine 15 Minuten deiner Zeit verschwenden. wollte Sie davon überzeugen , dass das Aufrufen von Funktionen aus Ihren Angular-Templates nie wirklich eine gute Idee ist. War das die Botschaft, die du daraus gezogen hast? Ja. Absolut. Ich hatte keine Ahnung. Ich meine, ich habe dieses Verhalten schon einmal gesehen. Du wusstest nie warum? Ich wusste nie, dass ich es nie verstanden habe. Ich meine, ich weiß nicht viel über Angular. Werden alle hier Angular fallen lassen und nächste Woche reagieren? Nein. Eines der Dinge , die ich habe, ist Teil dieses Kurses in einem Buch und einem Videoformat für React. Ich neige einfach dazu, Angular viel häufiger zu verwenden, also fühle ich mich dort wohl. Ordnung. Also lass uns das nochmal teilen. Und wir werden zur Detailseite für Schüler gelangen. Andrew, müssen Sie diese Schaltflächen wieder herstellen , damit Sie zu den Schülerdetails gelangen können? Ich gehe zur Arbeit. Ich werde daran arbeiten. Ich werde es herausfinden. In Ordnung. Okay. Okay. Also die Informationsseite für Schüler, das ist die Detailseite, und das wird hauptsächlich aus der Formularerstellung bei der Validierung bestehen. Und wie Sie sich vorstellen können, hat Ionic viele Komponenten und viele Funktionen, um dies so einfach wie möglich zu gestalten Aber ironischerweise ist es auch sehr kompliziert. Auf unserer Informationsseite für Studierende werden wir also eine Zurück-Schaltfläche implementieren wollen , damit Sie zur Rosa zurückkehren können Wir werden es auf Etiketten wiederverwenden. Sie haben sie gesehen, aber wir werden sie im Kontext eines Formulars verwenden. Wir werden eine On-Eingabe verwenden, und On-Input entspricht im Wesentlichen der HTML-Eingabe. Es ist alles, was Sie möchten, um Daten vom Benutzer zu erhalten. Eine dieser Eingaben ist die neue in Version sechs, die neue Eingabe für Datum und Uhrzeit handelt. Okay. Lassen Sie uns also eine Studentenliste öffnen und einen Backlog implementieren Also sollten wir gleich wieder etwas davon für Sie verschieben Werde das los. Wir werden die Informationsseite für Studierende öffnen. Holen Sie sich die Informationsseite für andere Schüler, das ist also der HTML-Code. Okay. Wir haben also bereits eine Kopfzeile mit einer Werkzeugleiste und wir haben einen Titel. Es tut uns leid. Sollten wir eine Informationsseite für Studierende erstellen? Sie sollten bereits eine Informationsseite für Studierende haben. B vom ersten Tag an. Wir haben all diese Seiten und das Routing zu ihnen erstellt. Okay. Ich glaube nicht, dass ich einen habe. Du nicht. Dann können wir, wenn Sie es erneut teilen möchten, wir können zurückgehen und das ganz schnell für Sie erledigen. Ist das ionisch? Ionic generiert eine Seite mit Studenteninformationen. Und wenn Sie die Studenteninformationen in Ihrem Befehl auf diese Weise eingeben? Ja. Okay. Es wird Groß- und Kleinschreibung vornehmen und die Dateinamen korrekt angeben. Okay. Das habe ich. Okay. Also hast du die Informationsseite für Studierende? Ja. Okay. Ihre Informationsseite für Schüler sollte also eine Titelleiste oder Kopfzeile mit einer Werkzeugleiste haben , die so aussieht? Ja. Also möchte ich es nur ein bisschen ändern. Damit der Vor- und Nachname des Schülers angezeigt wird. Und das machen wir mit einer eckigen regulären String-Datenbindung. Student meint zuerst ein Leerzeichen dazwischen. Es beschwert sich, weil ich noch keinen Studenten habe. Um dort eine Zurück-Schaltfläche einzufügen , haben wir bereits die Werkzeugleiste, und jetzt benötigen wir einen Container für unsere Schaltfläche, dem es sich um eine Einschalttaste und dann um eine spezielle Zurück-Schaltfläche handeln wird und dann um eine spezielle Zurück-Schaltfläche handeln Und was wir hier drin haben werden, ist das Standard-HRF. Und das bedeutet für den Fall, dass wir direkt zur Kaderseite kommen und nichts in der Historie steht den Fall, dass wir direkt zur Kaderseite kommen und nichts in der Historie Und sie haben trotzdem die Zurück-Taste gedrückt. Wir müssen ihnen einen Ort geben, an den sie gehen können. Selbst wenn es keinen Ort gibt, an dem die Zurück-Schaltfläche angezeigt wird, definieren wir das als die Kaderseite Sie neigen dazu, dieses Problem in einer mobilen App nicht allzu häufig zu sehen in einer mobilen App nicht allzu da Sie als Entwickler kontrollieren können , wie der Benutzer von Ort zu Ort gelangt Aber in einem Webbrowser könnten sie einfach eine beliebige URL eingeben und direkt dorthin gehen . Das macht Sinn? Und dann werden wir auch eine Menütaste wollen. Obwohl wir argumentieren könnten, dass eine Menüschaltfläche auf der Detailseite keinen Sinn ergibt. Es wird wirklich eine Entscheidung sein, die Ihnen überlassen bleibt. Lassen Sie mich meinen Sir wieder zum Laufen bringen. Okay. Es kompiliert. Hatte jemand Fragen zu diesem speziellen Code? Die Syntax? Alles außer der Zurück-Taste sollte Ihnen an dieser Stelle bekannt vorkommen. Okay. Also lass mich wieder rüber kommen. Und hier ist meins. Und wenn ich gehe, lass mich öffnen. Weißt du was? Ich werde es nicht so machen. Wir werden Kanten verwenden. Okay. Also mein Dienstplan, das könnte tatsächlich ein Fehler sein, weil ich keinen Vor- oder Nachnamen für Schüler Also, wenn du mitmachst, solltest du das auch sehen, du hast noch keinen Studenten Okay. Was die Frage aufwerfen sollte, wie bekommen wir einen Studenten auf die Seite? Wenn du dir die URL ansiehst, nun ja, ich schätze, du kannst dir die URL nicht ansehen, weil sie fehlgeschlagen ist. Die URL für eine Studenteninformation. Wenn Sie sich erinnern, dass das Umherziehende die Studenteninformationen war, die ID des Schülers schrägstrich die Studenteninformationen war, die ID des Schülers schrägstrich , funktioniert das momentan aufgrund des Syntaxfehlers oder des Bindungsfehlers überhaupt nicht Syntaxfehlers oder des Bindungsfehlers Also kann ich das schnell beheben, indem ich herkomme und einfach sage: Okay Ich kann es einfach mit einem leeren Schüler auf meiner Komponente angeben und dann sollte es zumindest nicht scheitern, oder? Aber der Titel, hier steht nichts. Aber genauso, wenn ich herkommen und sagen würde. Vorname John, Nachname Do Let it rebuild. Und jetzt sehen wir John Doe. Und wir haben immer noch unsere Menütaste und unser Backbon. Aber das hilft uns nicht, den Schüler auf die Seite zu bekommen. Ja. Meins geht überhaupt nicht auf die Studentenseite. Was machst du? Einfach nichts. Okay. Möchtest du es teilen und diagnostizieren? Ich meine, für mich ist das, wo das eigentliche Lernen stattfindet, wenn wir uns hinsetzen und die Probleme lösen? Ja. Lass mich wieder mitmachen. Okay. Nochmals zoomen. Okay. Ich werde das Teilen hier beenden. Ich möchte auf jeden Fall sichergehen, dass wir diesen Teil richtig hinbekommen , weil das Erstellen des Formulars eigentlich nicht so schwer ist. Also ich denke, wir haben heute Abend zusätzliche Zeit auf dem Programm. Der erste Teil des Formulars wird nervig sein. Der Rest ist unkompliziert. Eine Menge Duplizierung von HTML. Okay. Was schauen wir uns an? Also ich denke, es ist diese Zeile hier, oder? Es heißt Studenteninformation? Ja. Sie haben also Ihren Router-Link und geben das Array, die Studenteninformationen und den Studentenausweis weiter. Und was passiert, wenn Sie auf diesen Link klicken? Ja. Ich glaube, ich weiß, was das Problem ist, aber ich möchte es zuerst überprüfen. Also hier bin ich einfach okay. Sie haben Fehler in Ihrer Konsole. Klicken Sie dort oben auf die Nummer fünf mit dem Fehlersymbol. Okay. Das gleiche Problem hatte ich schon einmal, oder? Weil ich Vorname und Nachname habe. Okay. Also war es bei mir, es wurde nicht einmal auf die Seite gerendert. Okay. Okay. Es tut mir leid. Ja, das habe ich für mich auch nicht getan. Also, wenn du es vorerst reparieren willst, nur um sicherzugehen, dass du es schaffst, mach weiter und füge einfach das Dummy-Studentenobjekt deiner TS-Datei mit den Studenteninformationen Ja, das sollte funktionieren. Mach weiter und füge einen Vor - und Nachnamen hinzu. Es sollte ein Doppelpunkt sein. Vor- und Nachname sollten einen Doppelpunkt anstelle eines Gleichheitszeichens haben . Weil Sie ein Typskript-Objektliteral erstellen. Ja, da hast du's. Ja. Das ist das Java in mir. Ich kann dir nicht sagen, wie oft ich das schon gemacht habe. Ich danke dir. Okay. Also ist es so rendern. Rendern Sie immer noch nicht? Nein. Unerwarteter zufälliger Student in Spalte 19. Öffnen Sie Ihre HTML-Datei. Sieht aus, als hättest du da einen Tippfehler. So sehe ich, was das Problem ist. Der Student auf Seite. Was habe ich getan? Die Informationsseite für Studierende mit Punkt HTML ist die, die Sie öffnen möchten. Und Sie können sogar sehen, dass der VS-Code Ihnen mitteilt , dass zwei Fehler enthalten sind. Sehen Sie sich die Tatsache auf der linken Seite an. Die Datei ist rot aufgeführt. Okay. Klicken Sie also links auf die rote oder orangefarbene Datei. Ja. Du hast zwei Fehler. Sie haben hier also die Möglichkeit die geschweiften Klammern jeweils einzeln anzulegen Es ist also der Vorname des Studenten in enger Klammer. Space Pen, du gehst. Jetzt sollte es in Ordnung sein. Okay. Da hast du's. Ich denke schon. Ich mache das nur ein bisschen zu schnell. Nein. Hab ich getan. Nein, habe ich. Okay. Hab dich. In Ordnung. Ich höre auf zu teilen. Schon. Nein, ich werde weiter teilen. Okay. Also müssen wir einen Studenten auf eine Seite bringen. Und okay. Ich glaube, ich habe das neulich angesprochen. Ich bin ein großer Fan unseres X JS, und ich benutze X JS vielleicht öfter, als gesund ist, aber ich finde, wenn man sich damit richtig vertraut gemacht hat, schreibt man besseren Code. Also dieser Code hier. Lassen Sie mich zunächst fragen, ob schon jemand mit unserem XJS wohl fühlt oder wissen wir, ob Sie wissen, was unser HKS ist Ich habe davon gehört. Okay. Dann könnte das ein bisschen dauern, es ist sicherlich gewöhnungsbedürftig. Also, was wir hier tun und ich werde versuchen, langsam vorzugehen, ist ich auf meiner Studenteninformationsseite ein Observable habe , das ich Studenten-Dollarzeichen nenne Und was passiert ist , dass ich die Route der Seite habe, die eine Parametertabelle enthält Das ist die Par-Map. Und Angular stellt das als Observable zur Verfügung, sodass Sie Code schreiben können , wenn sich die Route ändert Also, wenn die Informationsseite für Schüler die erste ist und Sie zum ersten Mal auf dieser Seite Ihre Komponente wird gerendert, der Konstruktor wird aufgerufen, G aktiviert und es läuft, und all das passiert im Lebenszyklus der eckigen Seite, so wie es sein sollte Wenn sich die Route dann ändert, die Seite das aber nicht muss Also von Studenteninformation eins zu Studenteninformation zwei. Angular weiß, dass es nicht die gesamte Seite von Grund auf neu erstellen muss , da sich nur ein Teil der Parametermap geändert hat. Sie können also aufpassen. Sie können diese Änderungen abonnieren. Die Komponente wird nicht gerendert, die Seite wird nicht gerendert. Sie können jedoch darauf reagieren, indem Sie aufmerksam indem Sie die Parameterübersicht abonnieren Ich richte hier also ein neues Observable ein , das auf den Änderungen am p basiert und diese Änderungen ein neues Observable ein , das auf den Änderungen am p basiert und diese Änderungen an einer anderen RX JS-Funktion namens switch Map hochspielt an einer anderen RX JS-Funktion namens anderen RX JS-Funktion Switch Map sagt: Dieses Observable hat gerade den neuen Wert ausgelöst Nimm diesen Wert und wechsle ihn zu einem anderen Observablen, das wir durch den Aufruf dieser Funktion erhalten werden Also nehmen wir den Parameter, den ID-Parameter von params get Und wir werden diesen Wert an den Studentenservice „Get Student“ weitergeben den Studentenservice „Get Student Also werden wir das Studentenwerk bitten, uns Student eins, Student zwei, Student drei zu geben. Wir nehmen diesen Wert und führen einen R XJS-Operator namens TAP aus, was bedeutet, dass wir uns nur den Wert ansehen werden Wir werden nichts Besonderes damit machen. Wir werden es uns nur ansehen. gibt uns der Student einen Schüler zurück, oder er gibt uns nichts, wenn wir keinen finden können. Wenn es also keinen Schüler mit dieser ID gibt, werden wir dem eckigen Router sagen , zur Teilnehmerplan-Seite zurückkehren soll Ist das soweit klar? Es ist cool, wenn es nicht so ist. Tatsächlich gibt es einen sekundären Weg, wie wir das implementieren können, und der ist vielleicht einfacher zu verstehen. Aber ich wollte zuerst den harten Weg gehen. Okay. Der Student wird quasi zu einer Beobachtungsperson der Schüler sich der Parameter, wenn sich die Route ändert, erhält die beobachtbare Schülerin den neuen Das ist das Wichtigste, an das man sich bei diesen Zeilen erinnern Das Studenten-VM-Observable baut auf dem Student-Observable und leitet diesen Wert einfach über einen Mapper weiter, der diesen Schüler klont , um uns eine exakte Kopie davon zu geben. Und Clone Student macht einfach eine Reihe von JS-Teilen. Es ist ein Forman-Klon, den Sie vielleicht schon einmal gesehen haben. Das heißt also, wenn wir ein Studentenobjekt vom Studentenservice bekommen, bekommen wir eine Kopie davon, wenn sich die Route ändert Wo geht dieser Code hin? Das werde ich dir als Nächstes zeigen. Okay. Okay. Und ich werde versuchen, so etwas live zu machen. ich das letzte Mal an diesem Workshop teilgenommen habe, Mike Cartington von Ionic vorbei , gerade als ich diesen Code durchging Und eines der Dinge, die er mir erzählt hat war mit einer Ionic-App, das musst du nicht tun Also, was wir dieses Mal tun werden. Also lass uns sehen. Die Informationsseite für Studierende. Ich will immer noch einen Studenten. Aber dieses Mal werde ich es vordefinieren als „Lass mich kurz darüber nachdenken Weil ich das so machen will, wie Mike es mir gesagt hat. Nun, lass mich dich fragen. Willst du, dass ich es so mache und es dann vereinfache, oder willst du es zuerst auf die einfache Art machen? Gehen wir beide Wege, um zu sehen, was sich ändert. Okay. Fair genug. Also ich will die Schüler und okay. Okay. Lassen wir es also für eine Sekunde dabei, weil ich den Router noch nicht habe. Denken Sie daran, was ich neulich gesagt habe, dass ich meine Importe nicht mache oder meine Importe nicht auf den Folien zeige. Also brauchen wir die Route, das ist ein Versuch, das hier aus dem Gedächtnis zu machen . Das ist es auch nicht . Es ist das Richtige. Hattest du jemals einen dieser Tage, an denen du dich nicht an deinen Namen erinnern kannst? Ist es nicht der eckige Router? Nein. Nein, nein, nein. Aber das brauchen wir auch. Das ist also der Router. Das brauchen wir. Und so navigieren wir per Route. Es ist das laute Schreien. Gib mir eine Sekunde. Eines dieser Dinge, an meinen Namen kann ich mich nicht erinnern. Ich habe es aktiviert. Also denk dran. aktivierte Route enthält Informationen über die Route, die zum Rendern Ihrer Seite verwendet wurde. Okay. Also haben wir das und Param Map ist auf der aktivierten Route Wie Sie sehen können, handelt es sich um einen beobachtbaren Typ. Jedes Mal, wenn sich das ändert, werden wir seinen Wert weiterleiten. Dieser Studentenservice, was bedeutet, dass wir den Studentenservice brauchen. Irgendwas, das du dich fragst Mike wirklich so codiert? Ja, tut er. Studierende des Studentenwerks. Okay. Okay. Wenn nicht Studenten. Ich bin auch nah dran, aber wir gehen zurück zu Roster. Und natürlich müssen wir jetzt all die schönen PS herausfinden , die durcheinander sind Das zu mögen. Das sollte es mir nicht gefallen. Also Router oder Map. Oh. Wir brauchen mehr Immobilien. Diese Karte mit verlegten Schaltern Service in Anspruch nehmen. Das ist kein Problem. Okay. In Ordnung. Also gibt es keine Studenten. Ich glaube, was hier passiert , fehlen einige Importe. Import Switch Maps Rechtschreibung Import Perfo. Da hast du's. S Okay. Da haben wir's. Also wechsle Map und Taper von X JS-Operatoren Okay. Sobald sich der Ausweis ändert, ändert sich die Route, wir bedauern den Ausweis und rufen an, um den Schüler zu holen. Wenn wir keinen Schüler finden, gehen wir zurück zur Teilnehmerliste. Das ist richtig Kannst du das für 1 Sekunde so lassen, wie es ist? Die Folie oder der Code. Die sind gleich. Welches kannst du besser lesen? Das Ding im roten Bereich. Okay. Holen. Ich wechsle, Mann. Okay. Die Switch-Map nimmt im Wesentlichen den Wert eines Observablen und erstellt ein brandneues Observable und wechselt dann zu diesem neuen Wenn wir am Ende einen Schüler haben, ist er letztlich ein beobachtbarer Student Und wann immer Sie mit RXJS wie diesem arbeiten, füllen Sie sie langsam auf und komponieren Versuchen Sie nicht, aus allem ein einziges Observable zu machen. Selbst das könnte zu viel sein. Aber jetzt werde ich ein Modell aus der Studentenansicht erstellen, um das Ganze zu verbessern. MP stammt ebenfalls von unseren JS-Operatoren, und Clone Student gibt es noch nicht. Mal sehen, ob der Copilot weiß, was hier zu tun ist? Nicht ganz. Jetzt tut es das. Und dann weinten Studenten. Okay. Okay. Okay. Das war genug, um den Schüler von der Route auf der Seite in die Komponente zu bekommen. unserer Vorlage werden wir also nur mit dieser arbeiten. Mike, tut mir leid, ist dieser ganze Code, worin steckt das? Ist es bei einem dabei? Ist es im Konstruktor? Es ist nicht im Konstruktor. Es ist so, es ist nur ein Teil der Komponente. Das sind eigentlich Komponenten. Meins ist ziemlich durcheinander. Ich bin mir nicht sicher, was los ist Okay. Du willst , dass ich das in den Slack-Channel stelle , damit du es kopieren und einfügen kannst Das ist nützlich, aber es ist nicht notwendig, den ionischen Teil zu verstehen. Nein. Nein, ich habe überall rote Schnörkel. Ja. Hab ich auch gemacht. Vor allem , weil du nicht all das Zeug hast. Ja. Ja, ich melde mich danach bei dir. Okay. Ja. Ich werde langsam nervös mit meinem Konstruktor Es heißt, dass der Mitgliedskonstruktor vor allen Definitionen von Methoden der öffentlichen Instanz deklariert werden sollte vor Korrekt. Ja, ich schaffe das, du hast das. Ja. Und das liegt daran, dass ich den Schüler nicht darunter gesetzt habe. Das sollte ihn glücklich machen. Je nachdem, was Sie für die Kreditvergabe verwenden, sollen Angular-Apps hier so aufgebaut sein, dass Sie Ihre Instanzvariablen, Ihre Felder ganz oben in der Klasse haben Instanzvariablen, Ihre Felder , dann Ihren Konstruktor, dann Ihre Lebenszyklusereignisse und dann Ihre Funktionen Okay. In Ordnung. So bekommen wir den Schüler auf die Seite. Okay. Im Grunde ist die gesamte Studenteninformationsseite, der gesamte HTML-Code, mit einem G-Container-Tag versehen, der eine NG-Direktive verwendet , sodass es nur gerendert wird, wenn es einen Schüler gibt Ich werde das noch einmal sagen. Wir werden den gesamten HTML-Code der Seite mit einem Container umwickeln. Und der G-Container wird nur gerendert, wenn wir einen gültigen Schüler haben. Dies verhindert im Wesentlichen undefinierte Nullreferenzfehler. Okay. Ein paar Dinge, falls du schon über NGF wissen solltest, damit es nicht gerendert wird, es sei denn, der NGF ist Aber was noch wichtiger ist, NG-Container ist ein spezielles Angular-Tag , das keinerlei Ausgabe rendert Es hat keinen Einfluss auf das Markup. Das heißt also im Grunde, dass alles, was sich im G-Container befindet, nicht existieren wird , wenn wir keinen gültigen Schüler haben Der Rest dieser Linie ist ein eckiges Rohr, und wir nennen das Rohr. Die Async-Pipe wird sich also für uns um das An- und Abmelden kümmern das An- und Abmelden kümmern , wir müssen uns nicht darum Jedes Mal, wenn eine Studenten-VM eine Eigenschaft auslöst, ist das ein neuer Wert. Alles, was sich in diesem Energiecontainer befindet, wird aufgefordert, es neu zu lackieren Das Letzte, was wir tun, ist An-Pipe mitzuteilen, dass der Wert, den wir von diesem Observable erhalten , intern in meine Vorlage übernommen Ich werde es als den unveränderlichen Namen Student bezeichnen. Deshalb kann ich den Vornamen des Studenten und den Nachnamen sagen. Das habe ich in die Praxis umgesetzt. Wenn ich jetzt hier reinkomme und all meine Inhalte zusammenfalle. Ich kann einfach Container GF machen , nicht VM Dollar. Als Student. Und dann den Energiebehälter zumachen. Ich weiß nicht, wo der herkam. Und es beschwert sich, weil ich immer noch einen Studenten habe? Ich habe keinen Film bekommen. Ich habe den Schüler losgeworden, nicht wahr? Warum beschwert es sich? Weil ich nicht schließe Danke. Format. Okay. Okay. Jetzt gehen wir zurück zu Edge. Ich bin immer noch dabei, mein Data Mining zu machen. Das Data Mining funktioniert. Okay. Also möchte ich sichergehen, dass jeder zumindest bis zu diesem Punkt kommt. Und dann zeige ich dir den einfacheren Weg, den Mike uns gegeben hat. Es ist nicht viel einfacher. Ein einfacherer. Siehst du die Macht hier? Bin ich nicht, ich abonniere keine Observables. Ich warte nicht darauf, dass Versprechen gelöst werden. Ich nicht, ich mache keinen HTTP-Aufruf direkt von meiner Komponente aus. Ich beschäftige mich nicht mit der Fehlerbehandlung. All das kann innerhalb meines Dienstes erledigt werden, und die Komponente kann so geschrieben werden , dass sie nur gerendert wird, wenn sie gültige Daten hat So können Sie sich wirklich darauf konzentrieren , was die Komponente tun muss Macht das Sinn? Das sollte es sein, das ist der gesamte Code, den Sie für die Komponente benötigen. Hat jeder die? Es funktioniert auf meiner Seite. Fantastisch. Sonst noch jemand. Jeder hat es nicht zum Laufen, der will. Ich bin da. Okay. Okay. Geht es euch allen gut, heute Abend ein bisschen zu lang rüber zu gehen? Mir geht es gut, wenn du es bist. Hängt davon ab, wie lange wir das hinkriegen. Okay. Und das Feedback zum Workshop, ich gehe davon aus, dass ihr hingeht. Okay. Verbringen Sie keine Stunde mit unserem J ich werde schon eine kurze Pause in der Natur einlegen. Ordnung. Auf wen warten wir noch? Mir fehlen also wohl die Importe für Switch Map, Tap und Map. Lass uns sehen. Ja. PS ist ziemlich gut darin, zu raten, aber erst, wenn du eins davon hast Okay. Bereit weiterzumachen? Wir sind an dem Punkt angelangt , an dem wir das schaffen können. Okay. Von hier aus wollen wir also ein Formular erstellen. Wahrscheinlich habe ich das schon einmal in HTML gemacht. Wir benötigen also ein Formular für alle Werte, die für einen Schüler bearbeitet werden können Wir können ein On-Label mit einer On-Eingabe zusammen verwenden , mal sehen Dinge, die Sie über Etiketten wissen sollten. Die wichtigen Farben sind wahrscheinlich nicht so gut wie alles kann geändert werden. Aber die Position des Labels relativ zu seinem Eingabeelement. Es sieht also so aus. Wenn Sie also eine Standardeinstellung haben, erhalten Sie die Bezeichnung neben dem Platzhalter X sieht genauso aus. Ich neige dazu, Stack oder Floating zu verwenden. Was machen die? Okay. Okay. Das Laden ist ziemlich cool, weil es wie ein festes Etikett aussieht. Und wenn du es dann anklickst, wird es zu einem Stack-Label. Es wird also nach oben animiert und ist nicht im Weg, sodass Sie tippen können. Welches Sie wirklich verwenden, liegt ganz bei Ihnen. Was auch immer Ihre Designentscheidungen sind. Input ist also ein großes Thema. Denken Sie an alles, was Sie mit einem HTML-Eingabe-Tag und Supercharge Am haben sie viel Arbeit geleistet, um es wirklich, wirklich leistungsfähig zu machen , sodass es ein wenig überwältigend erscheinen mag Es muss nicht wirklich alles andere sein mit eckig und ionisch Wenn Sie mit den Grundlagen beginnen und dann von dort aus weitermachen, ist das nicht so schlimm Hier sind einige andere wichtige Dinge für den Input. Stellen Sie sich also vor , Sie haben eine Texteingabe. Auch hier können Sie die Farbe erstellen. Sie können ihr einen Debounce-Wert geben Jede N-Eingabe löst ein Änderungsereignis aus, wenn der Benutzer sie ändert Wenn Sie jedoch einen Debounce-Wert angeben, der größer als Null ist, wird dieses Änderungsereignis erst ausgelöst so viele Millisekunden vergangen sind vergangen Sie geben also beispielsweise einen Debounce-Wert von 500 ein und der Benutzer tippt. Sie erhalten die Änderungsnachricht erst, eine halbe Sekunde vergangen ist, ohne dass der Benutzer irgendwelche Änderungen vorgenommen hat ohne dass der Benutzer irgendwelche Änderungen vorgenommen Wenn Sie auf einem Mobilgerät gesehen haben, dass Sie statt der Return- oder Enter-Taste eine Suchzeichenfolge auf der Bildschirmtastatur statt der Return- oder Enter-Taste eine Suchzeichenfolge eingeben können, heißt es, suchen oder Das ist der Hinweis auf die Eingabetaste. Sie können dem Mobilgerät auch einen Hinweis geben, welche Art von Tastatur je nach Eingabemodus angezeigt werden soll. Und schließlich ist Typ genau wie ein HTML-Eingabetyp. Nach welcher Art von Daten suchen Sie? Es wird standardmäßig Text verwendet. Sie können also all diese verschiedenen Attribute verwenden , um das Erlebnis für Ihren Benutzer zu personalisieren und anzupassen Wir können unsere Eingaben auch validieren. Dies sind die integrierten Validierungen , die Ihnen zur Verfügung stehen Minimale maximale Länge der Zeichenfolge, minimale maximale Anzahl an numerischen Werten, Reg X-Muster und Angabe, ob ein Feld erforderlich ist oder nicht Den nächsten werde ich dir zeigen. Versuche nicht, alles in dich aufzunehmen. Dies sind alle Hinweise zur automatischen Vervollständigung , die bei Eingaben zulässig sind. Wenn Sie also schon einmal auf eine Webseite gegangen sind und Ihr Browser gesagt hat: Hallo, lassen Sie mich das für Sie eingeben. Es liegt an solchen Dingen. Also dein Vorname, deine Adresse, dein Stadtstaat. Und wenn Ihr Browser diese Informationen kennt , gibt er sie für Sie ein. Macht das Sinn? Okay. Lass uns gehen. In Ordnung. Ich wollte nur kurz darauf eingehen. Was wir also tun müssen, um die Eingaben des Benutzers für den Schüler zu erhalten die Eingaben des Benutzers für den , ist ein Formular zu erstellen, einfach ein normales HTML-Formular. Bei einem eckigen Formular möchten wir einen Event-Handler für N G submit bereitstellen. Diese Funktion wird aufgerufen, wenn der Benutzer das Formular absendet Die Studentenform in Pfund entspricht der Form N G. Das ist ein weiterer Angularismus. Das heißt , wenn wir ein eckiges Formular haben, wird uns ein G-Formular angezeigt, das die gesamte gerenderte Form darstellt Und wir werden dieses Formular der lokalen Vorlagenvariablen Studentenformular zuweisen . Und wenn wir das tun, können wir innerhalb unseres HTML-Codes auf dieses Formular verweisen, Angular fragen, ob es gültig ist, es nach Fehlern fragen und so weiter. Was ich hier machen möchte, ist, auf den Inhalt zurückzukommen, der momentan leer ist. Ich möchte ein Formular erstellen. Leeres Absenden entspricht Absenden. Wir werden das Studentenobjekt einreichen, wenn das Formular abgesendet ist , und wir werden ein lokales Variablen-Studentenformular haben , und das ist das NG-Formular, das für uns erstellt wird On Submit existiert noch nicht. Damit es bei Laune bleibt, komm einfach her und erstelle eins. Ja. Auch wenn es nichts tut. Jetzt ist es wenigstens glücklich. Als Nächstes. Lassen Sie uns ein einzelnes Eingabefeld erstellen da alle Eingabefelder so aussehen werden. Und ich glaube, ich möchte eine Liste auf der Liste haben. Wir wollen einen Artikel auf Lager haben. Nein, ich möchte nicht, dass der Copilot die Arbeit für mich erledigt. Bei dem Artikel auf der möchte ich ein Etikett auf dem Etikett haben. Und ich werde die Farbe festlegen. Vorname gültig. Ich erkläre das gleich. Mir geht es wi 5. Session4: Ordnung, Leute. Willkommen zum vierten und letzten Workshop. Ich möchte heute Abend damit beginnen, über den Anwendungsspeicher zu sprechen und darüber, wie das alles funktioniert. Bei ionic gibt es eine Reihe verschiedener Speicheroptionen. Und weil ich normalerweise meistens mit Geräten arbeite. Ich speichere viel auf dem Gerät. Ich werde also nicht auf die verschiedenen Arten von Cloud-Speichern eingehen , und Ionic hat ein Unternehmensangebot , das sicheren Cloud-Speicher So können Sie buchstäblich einfache Daten auf das Gerät übertragen Und genau das mache ich hier. Also, was ich als Kondensatorspeicher verwende. Sie erinnern sich vielleicht an die erste Sitzung, als wir rausgehen und einen Kondensatorspeicher installieren mussten , um die Lagerservicetür oder die Servicetür für Studenten zu bekommen oder die Servicetür für Studenten Und wie Sie hier sehen können, handelt es sich um eine ziemlich vereinfachte API Sie haben Methoden festgelegt, eine Methode zum Entfernen, Löschen der Datenbankmethode und eine Methode zum Abrufen des Arrays aller Schlüssel in Ihrer Datenbank Und ich sage Datenbank. Ich verwende den Begriff locker, weil er eigentlich nur ein Schlüsselwertspeicher ist eigentlich nur ein Schlüsselwertspeicher der an Ihre Anwendung angehängt ist Und was ich damit meine, ist, dass es an Ihr You-HTTP-Schema angehängt Ihr You-HTTP-Schema Wenn Sie also NPM Start verwenden würden, wodurch NG Serve mit der Standardeinstellung Port vier als 200 gestartet mit der Standardeinstellung Port vier als 200 Spielen Sie mit der Anwendung, richten Sie Ihren Shop ein, erstellen Sie neue Schüler und bearbeiten Sie sie. Und dann schließe die App und starte sie erneut mit Ionic Serve, was meiner Meinung nach Port 8.100 Es hätte nicht dieselbe Datenbank . Wenn es also HTTP oder HTTPS wäre, denke ich, dass sie sogar unterschiedliche Datenbanken bekommen. Es hängt wirklich nur damit zusammen, dass Ihre Anwendungen Vorfälle ausführen. einem Desktop-Browser verwendet es lokalen Speicher, was bedeutet, dass es flüchtig ist. Es könnte jederzeit zerstört werden. Auf einem echten Gerät hat es DB indexiert oder was ist das andere SQL Light? Nein. Sie können sagen , dass Sie SQL Light verwenden sollen. Dafür gibt es also eine Option, und damit ist sie ziemlich gut. Sie können also SQL Light verwenden. Aber das ist nicht der Index TV und der andere. Es entgeht mir jetzt, aber das ist egal. Es wird das richtige für das richtige Gerät verwenden. Und das ist eines der Dinge, die Sie Verwendung von Kondensatorspeichern erhalten. Sie müssen sich darüber keine Sorgen machen. Also, ob du eine PWA bist, ob du Android oder IOS bist, es ist egal Um den Studentenservice mit nur diesen fünf API-Aufrufen einzurichten , habe ich im Wesentlichen eine Reihe von öffentlichen Methoden erstellt Der Kondensatorspeicher-Service basiert ausschließlich auf Versprechen. Sie werden also sehen, dass alles, was ich hier mache, auch auf Versprechen basiert. Abgesehen davon, dass er wie der zweite aussieht. Alle Schüler sind das Observable, auf das sich unsere Komponente „ Komponenten-Liste“ stützt Das funktioniert also so wenn einem Schüler irgendwas passiert, egal ob Sie ihn als abwesend markieren, ihn präsentieren, löschen, speichern, ihn abrufen , einen neuen finden, was auch immer Der Speicherdienst nimmt die Informationen auf, die Sie ihm gerade gegeben haben. Also hier ist ein brandneuer Student. Hier ist ein vollständig hydratisiertes, brandneues Studentenobjekt. Es speichert es im lokalen Speicher oder Speicher und teilt dann sofort mit, dass alle Schüler beobachtbar sind, dass ein brandneues, komplett regeneriertes Array für Sie erstellt wurde, und das veranlasst die Komponente, sich selbst zu aktualisieren Wie Sie sich wahrscheinlich vorstellen können. Wenn Sie ein Dutzend Schüler haben, ist das kein Problem. Wenn Sie 1.000 oder 10.000 Studenten haben , könnte dies ein Problem sein. Die Art und Weise, wie der Studentenservice geschrieben ist Sie ihn erweitern könnten, indem Sie Paging, Sortierung und alles Mögliche Und dann müssten Sie nur noch auf dieses Observable achten Das überlasse ich dem Zuschauer als Übung. Auch innerhalb des Studentendienstes gibt es einige private Beiträge, die in Kürze behandelt werden, und zwar das Studierendensystem selbst, das als RHS Verhaltenssubjekt implementiert ist Und das sorgt dafür, dass innerhalb des Studentenwerks eine lokale Kasse vorhanden ist , die jeder Änderung aktualisiert wird Und das ist es, was dann an die Komponente an die Abonnenten gesendet wird . Und das geschieht über die Funktion Push A. Push A sagt einfach: Hey, wir haben ein neues Verhaltenssubjekt. Wir haben ein neues Array. Verarbeiten Sie es. Die anderen drei Funktionen hier sind einfach interne Instrumente , die wir in Kürze sehen werden, und sie sind im Grunde nur Hilfsfunktionen Also habe ich im Studentenservice ein generisches Objekt namens Neue Schnittstelle für Studierende erstellt , und wie Sie sehen können, werden dadurch einfach alle Felder ausgeblendet, sodass sie dadurch Also haben wir es noch nicht versucht. Aber wenn du zu Wenn du auf die Seite mit den Studenteninformationen gehst. Im Studentenservice gibt es einen Code , der diesen Studenten zurückgibt, den leeren Schüler statt den Studenten mit Ausweis , nach dem Sie gefragt haben. Hier ist das Thema Verhalten. Auch hier nimmt es intern eine Reihe von Studierenden auf. Und wenn die Anwendung gestartet wird, fragt die Komponente mit der Teilnehmerliste einfach nach Funktion aller Schüler , und das macht dieses Verhalten unbeobachtbar Als allgemeine Regel gilt: Wenn Sie es mit einem Verhaltensobjekt mit mehreren Abonnenten zu tun haben, sollten Sie das eigentliche Thema nicht Ihren Abonnenten offenlegen das eigentliche Thema , da sie dann alle unkontrolliert neue Werte eingeben könnten , da sie dann alle unkontrolliert neue Werte eingeben Das allgemeine Muster besteht also darin, Ihren Abonnenten das Verhalten des Subjekts als nicht beobachtbar zurückzugeben , und genau das tun diese Sie können mich jederzeit unterbrechen, wenn ich zu schnell vorgehe oder wenn Sie etwas Ich glaube, Sie haben das zu Beginn des Studentendienstes gesehen . Wir haben eine initialisierte Funktion, und alles, was sie tut, ist, Push beim ersten Mal aufzurufen Also sagt Push A, hol mir alle meine Schüler und sag dann dem Verhaltenssubjekt, dass es einen anderen Wert ausgeben soll , wenn diese Schüler darin enthalten sind Also nochmal, es ist einfach kein Datenbank-Seed, es ist ein Anwendungs-Seed. Also hier ist der Anfangswert. Lassen Sie alle Schüler das Speichersystem, das Kondensatorspeichersystem, bitten , mir alle meine Schlüssel aus der Datenbank zu geben. Als Nächstes filtere ich das Array nur nach den Schlüsseln , die mit der Schlüsselkonstante des Schülers beginnen, was meiner Meinung nach nur das Wort Studentenunterstrich ist Sie haben nicht viel Einfluss darauf, wie es gespeichert wird, wie Daten hier gespeichert werden. Sie können also alles speichern. Also, wenn ich Schüler speichern möchte oder Dinge speichern möchte , die nicht Schüler sind , was ich vielleicht irgendwann tun würde, dann möchte ich vielleicht irgendwann Lehrer oder Klassen speichern. Ich muss sie unterscheiden, da es einen einzigen Schlüsselwertspeicher gibt. Also habe ich einen Studentenschlüssel erstellt, der nur das Wort Student ist. Also habe ich alle Schlüssel aus der Datenbank anhand dieses Schülerschlüssels gefiltert . Und dann die nächste Zeile hier, ich muss auf ein Versprechen warten und jeden Schüler nach seinem Schlüssel suchen. Macht das Sinn? Also, wenn das Versprechen gelöst ist, habe ich eine ganze Reihe von Studenten Und die Scharfsinnigen unter Ihnen werden feststellen, dass ich keine Fehlerbehandlung habe hier keine Fehlerbehandlung habe, und das sollte ich wahrscheinlich Okay. Und hier ist das Finden eines einzelnen Studenten und hier ist der Sonderfall für neue. Wenn Sie also den Studentenausweis „Neu“ weitergeben, werde ich das Versprechen einfach mit dem leeren Studenten lösen . Andernfalls gehe ich in die Datenbank und suche nach dem Studenten anhand dieses Schlüssels und seiner ID Also die Schüler geben eins ein, Schüler geben zwei ein und so weiter Und den Schüler nach dem Schlüssel auswählen. Sie werden feststellen, dass es ein bisschen komisch aussieht. Also muss ich die Speicherfunktion aufrufen , es ist die Get-Methode. Und ich muss ein Objekt übergeben. Ich bin mir nicht sicher, warum Sie den Schlüssel nicht weitergeben, aber Sie müssen ihn als Objekt übergeben. Deshalb gibt es die geschweiften Klammern innerhalb des Parameters Ich übergebe also tatsächlich ein Objekt, bei dem der Schlüssel des Schlüssels und der Wert dieses Schlüsselparameters für Schüler übergeben werden. Es ist irgendwie bizarr. Der Kondensatorspeicher speichert nur Zeichenketten. Es führt keine JSON-Analyse oder -Serialisierung für Sie durch, weshalb ich das Ergebnis angeben muss Und nicht nur das Ergebnis, sondern auch der Wert des Ergebnisses. Nochmals, welcher Speicher DG mir als Versprechen eines Objekts zurückgibt. Und in diesem Objekt steckt ein Wert. Macht das Sinn? Es ist irgendwie komisch. Und ich denke, es gibt einfachere Speicherbibliotheken da draußen, aber ich wollte dabei bei den ionischen Sachen bleiben. Ähnlich wie bei Ähnlich wie Delete Student, wieder, du nennst Storage Remove und musst den Schlüssel übergeben Um einen Schüler zu retten, habe ich eine UUID-Bibliothek Wenn du also einen brandneuen Schüler erstellst, gibst du mir einen Schüler zum Speichern eines Studenten ohne Ausweis Anstatt einfach zu versuchen, eins, zwei, drei, vier zu finden, erstelle ich eine UUID und speichere diese Asset-ID Es ist so einzigartig, dass ich nicht glaube, dass Sie jemals vor Ort auf eine Kollision stoßen würden eine Kollision stoßen Wahrscheinlich auch nicht global, aber man weiß ja nie. Was bedeutet das doppelte Fragezeichen? Das heißt, das entspricht der Aussage, dass Studentenausweis gleich Studentenausweis Sofern es nicht Null ist, weisen Sie UUID vier zu. Das ist relativ neu im Typoskript. Ich finde es clever. Es spart ungefähr zehn Tastenanschläge, aber ich weiß nicht, ob es klarer ist Würdest du zustimmen? Ja. Ja, es ist das erste Mal, dass ich es gesehen Deshalb habe ich mich gefragt. Ja, manchmal denke ich, manchmal bin ich zu schlau für mich selbst, denn als ich das neulich zum ersten Mal gesehen habe, musste ich mich daran erinnern, was es macht. Also ja, ich denke, dass man wahrscheinlich einfach Student Dot ID gleich Student Dot ID sein sollte Student Dot ID gleich Student Dot ID Und dann Fragezeichen, Fragezeichen, was bedeutet, du weißt schon, nicht drin Also das könnte ein bisschen einfacher sein. Lass uns sehen. Also nach einem Löschvorgang oder einem Schüler rufen wir Push All auf und das sendet das Array wieder an alle Abonnenten. Do Save Student ist die interne Implementierung von Save Student. Es wird also davon ausgegangen, dass Sie bereits eine Studenten-ID oder einen Schlüssel haben, und es ruft einfach die Speichersatzfunktion auf und übergibt den Schlüssel im Wert. Beachten Sie noch einmal, dass ich das Ergebnis stringifizieren muss, weil es das für mich nicht tun wird Mark Present ist sehr einfach. Ich habe den Studentenstatus auf Präsentieren gesetzt. Das Gleiche gilt für Abwesend und dann rufe ich do Save Student an. Do save student aktualisiert den Speicher und ruft Push All erneut auf. Beim Zurücksetzen der Anwesenheit alle Schüler überprüft und dann der Status zurückgesetzt Und wieder bin ich schlau, weil Sie sehen können , dass die Kartenerklärung eine Abkürzung hat Also nehme ich die Statuseigenschaft aus dem Studentenobjekt und übergebe dann den Rest des Studentenobjekts mit dem Rest-Operator. Das wäre gleichbedeutend damit, den Studentenstatus durchzugehen und ihn einfach als unset aufzurufen Aber auch hier musste ich schlau sein, also. Wenn du meinst, du würdest mich wegen meiner Klugheit bei einer Pull-Request-Bewertung anrufen, wirst du keine Argumente von mir bekommen Ist das klar oder ist das nur bizarr? Nun, ich habe auch den Wahnsinn gemacht, du weißt schon, die Java-Streams Also, ich meine, es macht Sinn. Weißt du, noch einmal, weißt du, diese Worte sind nur für Menschen da, um sie zu verstehen. Weißt du, es wird alles in das übersetzt was auch immer die Computer benutzen werden. Richtig. Wissen Sie, es geht nur darum was wir brauchen, um zu verstehen, was wir tun. Ja. Und ehrlich gesagt, was wir in der letzten Sitzung getan haben , als wir alle Observablen entfernt haben, um den Schüler auf die Studenteninformationsseite zu bringen , ist jetzt viel lesbarer Ich denke, HGS hat seinen Platz und dieser besondere Ort war nicht Okay. Also das sind ein paar andere Dinge, die wir hatten. Ich glaube, das haben wir gesehen. Wir haben Themendaten, tut mir leid, Startdaten. Und das war erst ganz am Anfang, wenn wir nichts in der Datenbank haben, können wir es uns ansehen und ein paar von, ich glaube, wir haben zehn falsche Studenten, und dann sind klare Daten das Gegenteil Und das ist einfach. Wir nennen Speicher einfach Clear. Okay. Und das ist alles für die Aufbewahrung. Haben Sie Fragen, bevor wir zur Kamera gehen. Oh, ich meine, das ist buchstäblich alles, was Sie tun müssen, um den lokalen Speicher zu nutzen. Wow. Ja. Und die Codes sind alle da. Es ist alles im Studentenservice. Ja. Okay. Also, was werde ich jetzt tun? Gib mir hier eine Sekunde. Nun, ich schätze, ich kann es später bearbeiten. Ich gehe zurück. Das war vorher alles ergänzendes Material Okay. In Ordnung. Also lass uns über die Kamera sprechen. Okay. Also haben wir uns Pixabay schon einmal angesehen. Und was ich hier gemacht habe , ist, dass ich ein Bild von einer Kamera gefunden Was ich wollte, war ein Platzhalterbild. Wenn es also kein Bild von dem Schüler gab, wollte ich, dass an seiner Stelle etwas angezeigt Wenn du also mitmachen willst, geh zu Pixabay und suche dir ein schönes Bild von einer Kamera Es ist nicht einmal wichtig, welcher . Dieser ist cool. Okay. Also das habe ich eigentlich nicht hier gemacht, also muss ich es hier machen. Ja, ich habe es nicht hier. Also lass uns weitermachen. Welches magst du? Ich habe eine Menge von ihnen. Erstens möchte ich das Poloid nehmen Also möchte ich die SVG-Version herunterladen. Und dann mache ich mit. Warum hat es nicht damit geklappt? Versuch das nochmal. Okay. Da ist es. Ich werde es benennen? Kamera. Und ich werde es auf meine Bilder ziehen . Ich muss es dort nicht sehen. Okay. Also ist es in Bildern. Okay. Okay. Hier sage ich in Camera Dot PNG speichern, aber du willst es speichern, wo auch immer du es herunterlädst. Wenn Sie ein PNG herunterladen, verwenden Sie natürlich die richtige Erweiterung. Okay. Jetzt brauchen wir diese beiden NPM-Pakete. Wir müssen dem Kondensator sagen , dass wir die Kamera benutzen Und weil ich glaube, dass wir uns gerade alle in einem Browser befinden, brauchen wir die ionischen PWA-Elemente damit es in einem Browser funktioniert Also werde ich das tun. Okay. Okay. Und ich installiere. Beides. In Ordnung. Und das ist erledigt. Folgt mir jemand und du musst warten, bis der NPM fertig Ja. Tut mir leid. Ich wollte das Bild festhalten, also lass mich das ganz schnell machen. Okay. Dann wirst du das wollen? In Ordnung, D. In Ordnung. Jeder hat eine Kamera und der NPM-Stand ist fertig. Okay. Als Nächstes öffnest du. Das meiste davon sollte schon da sein. Aber ich erinnere mich, dass ich am ersten Tag jemanden bitten musste , einige dieser Dinge zu kommentieren , wie diesen Import hier. Und das definierte benutzerdefinierte Elemente. Sie haben es entweder gelöscht oder auskommentiert. Ich weiß nicht mehr welche. Also öffne T. Ja. Ich habe das überhaupt nicht. Es gibt ein paar Dinge, die wir hier erledigen müssen. Geh das aus dem Weg. Ich schließe das. Okay. Also brauchen wir eine Plattform, wir müssen die Plattform booten. Was auch immer es da ist Okay. Also das haben wir schon im Fang. Also müssen wir das Okay nennen. Das hat nicht funktioniert. Also müssen wir benutzerdefinierte Elemente definieren oder importieren und das bei korrekter Eingabe tun. Da haben wir's. Lader für B-Elemente. Ordnung. Sind sich alle einig , dass das gleich aussieht? Ups. In Ordnung. Hat das jeder? Noch nicht. In Ordnung. Hoppla Ich kann mir nicht vorstellen, wie oft mir der Pfeil nach links folgt Wie viele davon muss ich herausschneiden? Auf der Armlehne meines Stuhls sitzt immer meine Tastatur. In Ordnung. Okay. Auf der Informationsseite für Schüler müssen wir diese Dinge oben in der Datei importieren. Also Kamera-Ergebnistyp und Kameraquelle von der Kondensator-Kamera. Lass mich sehen, ob ich das kann. Da haben wir's. Also zurück auf der Studenteninformationsseite. Gut. Und dann machen wir so ein Foto. Sie werden feststellen, dass das Objekt oder die Klasse von Ionenkondensatoren ebenfalls sehr vielversprechend ist. Also werden wir eine A-Sync-Funktion namens Bild aufnehmen erstellen , die die Funktion „Foto abrufen“ der Kamera aufruft Funktion „Foto abrufen“ der Kamera und ein einzelnes Konfigurationsobjekt benötigt Es gibt viele verschiedene Dinge, die Sie hier weitergeben können. Dadurch sollten wir ein JPEG-Bild von angemessener Qualität erhalten , das wir dann dem eigentlichen Datenbild al zuordnen können . Die Bilddaten U , weil wir es in der allerletzten Zeile dem Schülerbild zuweisen , wird es eine Zeichenfolge sein Es wird eine Base-64-kodierte Zeichenfolge des Bildes sein. an das Schülerobjekt angehängt, sodass es, wenn wir es speichern , auch im lokalen Speicher gespeichert Alles automatisch. Lass mich meinen VS-Code reinbringen und schauen, ob ich das hier irgendwie aus dem Weg räumen kann. Das gehört also zur Komponente mit den Studenteninformationen. Das ist verdammt gut. Aber so werde ich es nicht machen. Jemand muss mich daran erinnern, den Copiloten auszuschalten. Alles klar. Das ist nicht schlecht. Wir wollen nicht Base 64 als Ergebnistyp. Wir wollen eine Daten-URL. Wenn wir dort überhaupt Geheimdienste hätten. Qualität 90 ist wahrscheinlich okay. Fühlen Sie sich frei, damit zu spielen. Bearbeitung zulassen ist wahr, das heißt, geben Sie dem Benutzer die Möglichkeit oder spielen Sie ein bisschen damit, bevor Sie es akzeptieren. Das ist auch optional. Und die Quelle Es wird die Kamera sein. Ich denke, Sie können das auch tun, wenn Sie kein Gerät mit einer Kamera haben, Sie können einfach zu den Quellfotos gehen. Ich denke, das könnte für einen Mac oder Windows funktionieren , wenn Sie keine Kamera haben. Ich habe eine Webcam, also werde ich sie als Kamera belassen. Das wird uns also ein Bild machen. Ich brauche ein Stoffetikett. Und dann bin ich mir nicht sicher, warum ich dort zwei Zeilen habe. Warum hast du es nicht einfach gesagt? Oh, ich verstehe. Aber ich möchte die Daten-URL aus dem Bild abrufen. Und dann möchte ich das einstellen. Und das ist ein Tippfehler, das muss es sein, egal. Das tut mir leid. Wir geben den Studenten weiter, richtig. Es wird also so sein, dass Studentenbild gleich Bild-URL ist. Ist das klar? Ja. Aber ich werde ein bisschen nervös, da steht, dass das Bild kein Eigentum eines Studenten ist Eigentum eines Studenten Ich weiß nicht, warum das so ist, aber der Grund, ich es nicht bin, ist, dass ich es nicht gegeben habe , ich habe ihm nicht gesagt, was Student ist Also, du hast recht. Also, wenn wir ihm sagen, dass es ein Student ist, habe ich das gleiche Problem, oder? Ja. Also werde ich den Befehl „Auf Student klicken“ drücken. Und ich werde hinzufügen, dass es sich um ein Lehrskript handelt. Wenn du darüber nachdenkst Weil ich in der Leitung 39 der Veranstaltung nicht gesagt hatte , dass ich einen Studenten nehme. Also ist es standardmäßig auf any voreingestellt. Das Studentenbild ist also in Ordnung. Sie haben die Schnörkel bekommen, weil Sie den Fehler bekommen haben , weil Sie ihm gesagt haben, dass es sich um einen Schüler handelt Was wäre also passiert, wenn ich mein Studentenobjekt so gelassen hätte , wie ich es hatte Und hatte kein Bild. Kannst du es erraten? Nun, entweder wird es funktionieren oder nicht. Es wird gut funktionieren, weil die Typinformationen wirklich nur zur Kompilierzeit existieren. Sobald Ihre gesamte Typsicherheit , die Sie aus Typoskript herausholen, weg ist Sobald Sie auf Javascript umgestellt sind und es ausführen Es ist nur Javascript. Es wird sagen: Oh, du hast ein Feld gesetzt, wenn du mir eine Zeichenfolge gegeben hast und gesagt hast, du sollst es als Studentenbild verwenden. Cool. Ich werde das für dich tun. Weil es in Javascript funktionieren würde, wird es gut funktionieren. Okay. Aber wir spielen hier gerne nett, also. Also werden wir es so machen. Also haben Sie Ihren Schüler mit einer optionalen Zeichenfolge namens image aktualisiert ? Ja. Ordnung. Also müssen wir jetzt etwas mit der Aufnahmefunktion verbinden. Und das machen wir im HTML. Also, was ich hier mit Studenteninfo-HTML machen möchte . Lass mich dir das alles wieder aus dem Weg räumen. Also wir haben unser Studentenformular und wir haben die Liste. Also, was ich hier tun möchte, ist einfach ein weiteres On-Item mit einem Click-Handler hinzuzufügen . Und ich werde den Schüler darauf hinweisen. Da drin verkaufe ich Student falsch. Hier habe ich zwei Bilder. Das erste Bild wird nur angezeigt, wenn das Schülerbild existiert, und ich werde es als Klasse festlegen, wir werden das CSS in einer Minute aktualisieren. Foto eines Studenten. Okay. Ist Studentenalter. Wenn wir ein Bild des Schülers auf dem Schülerobjekt haben , erstellen wir ein Bild-Tag mit diesem Schülerbild als Quelle. Und mein Image-Tag beschwert sich, weil ich kein Altex habe Wir können also Alt-Text so einrichten, wie wir es auf diese Weise machen. Das ganze erste Mal. Ein Name von Lqufast. Letzter Student. Das gilt auch für alle Texte mit dem Namen des Schülers. Wenn wir andererseits kein Studentenbild haben. Keine Macht entspricht Vermögenswerten, Bildern, M war ein SVG A entspricht k einem Bild. Wie sieht das aus Ich werde meinen NG-Server starten oder NPM starten Und bevor wir uns das ansehen, wollen wir das CSS korrigieren In diesem Workshop haben wir nicht viel über CSS gesprochen. Ich betrachte mich nicht als CSS-Experte, aber dafür ist es nicht allzu schwer, es von ihnen zu machen. Da haben wir's. Also der Fotokurs für Studenten , den ich auf dem Bild eingerichtet habe? Ich gebe ihm eine maximale Höhe von 25% des vertikalen Raums. Also nicht mehr als das. Und ich werde das Objekt so einstellen, dass es abgedeckt ist. Es wird also das Bild zuschneiden, nimmt aber trotzdem das gesamte Rechteck ein. Das machen wir. Dann kommen wir wieder rein und aktualisieren die Seite hier. Ich sehe keinen Fehler, also lass uns hier darauf eingehen. Da ist mein Polid der Text, also sehe ich nicht, dass er etwas bewirkt. Aber wenn ich darauf klicke, kannst du meine Kamera sehen . Das ist cool. Ich benutze die andere Kamera. Wenn ich ein Foto machen will. Nun, ich habe nicht sehr gut gearbeitet. Lass uns das nochmal versuchen. Da haben wir's. Und dann kann ich es speichern. Und da ist mein Bild. Und wenn ich Jonathan Bennett rette. Komm wieder rein. Das Bild ist immer noch da. Wie cool ist das? Okay. Kein Applaus, nichts. Ordnung. Wie geht's allen anderen? Entschuldigung, ich war stumm geschaltet, aber nein, das ist cool. Funktioniert es bei dir? Ja. Ja, ich hatte das Bild. Es hieß dann, dass keine Kamera gefunden wurde. Okay. Gibt mir die Möglichkeit, ein Bild auszuwählen. Also lass mich das versuchen und sehen. Also, wenn ich es sage, kannst du zurückgehen. W. Sehr cool. Ja. Ja, das ist cool. Das gefällt mir. Das ist also ein Kondensator, im Wesentlichen auf den Punkt gebracht Capacitor bietet Ihnen eine konsistente API. Auf allen Geräten und Webseiten. Jetzt wird nicht jeder Kondensator angeschlossen, wir arbeiten mit dem Desktop-Browser. Viele werden es tun. Wenn du zu den offiziellen Plug-ins gehst und sie dann auch Community-Plug-ins haben, werden sie dir sagen, womit sie funktionieren. Es gibt Dinge wie Face ID , die offensichtlich nur mit einem Apple-Produkt funktionieren, und ich denke, sie funktionieren mit iPhones oder IOS Aber Sie können über alles auf das GPS zugreifen. Ich verwende die Browser-API. Ich benutze, wenn du an einem Schreibtisch bist, es geht tiefer und es nutzt dein WLAN und wenn du ein iPhone hast, benutzen sie das GPS. Auf Android wird es das GPS verwenden. Aber es gibt Ihnen eine konsistente API, mit der Sie sich weiterentwickeln können, sodass Sie sich nicht genau erinnern müssen, Android, ich muss das tun oder IOS, ich muss das tun. Macht das Sinn? Also jetzt, jetzt müssen wir es tun. Nun, bevor ich weitermache, gibt es jemanden , der die Kamera zum Laufen bringen möchte , es aber noch nicht getan hat? Nimm das als Nein. Nun kommen wir zum wahrscheinlich gefährlichsten Teil des Workshops. Weil ich keine Folien zu diesem Zeug habe. Bei diesem lebe ich einfach ganz spontan. Wie Sie sich vorstellen können, ist es ziemlich aufregend. Zu diesem Zeitpunkt haben wir also eine funktionierende Anwendung. Und ich denke, es ist gut genug , um in den App Store oder den Play Store gestellt zu werden. Lassen Sie mich also sicherstellen, dass die ionische Erweiterung läuft, geladen ist und läuft Nein. Stell sicher, dass alles gut ist. Das ist in Ordnung. Okay. Wo ist? Da ist der ionische. Da ist er. Okay. Habt ihr alle schon die ionische Erweiterung gesehen? Wir haben es wirklich nicht benutzt, weil ich mich nicht unbedingt darauf verlassen möchte Aber es gibt einige coole Dinge, die es tun kann . Was will es, dass wir tun? Es möchte migrieren Es möchte, dass wir diese Funktionen hinzufügen. Dies sind Empfehlungen, die uns der Ionenstecker geben wird Das erste, was ich jetzt tun möchte, ist, dass ich ein IOS-Projekt hinzufügen möchte. Es sollte eine Frage sein, einfach genau dort zu klicken Ja, ich möchte meinem Kondensatorprojekt IOS-Unterstützung hinzufügen . Und es zeigt mir im Terminal hier Befehle, die es ausführt. Okay. Okay. Also konnte ich nicht. Konnte nicht sinken, es fehlte WWW. Und ja, das vergesse ich selbst immer. Um eine Synchronisation mit dem Kondensator durchzuführen, müssen Sie mindestens einmal eine Produktionsversion Ihrer Anwendung erstellen . Also habe ich gerade NPM Run Build ausgeführt. Also, was sind Coco Pods? Worauf sind Sie es gewohnt, zu entwickeln? An welche native Desktop-Anwendung sind Sie gewöhnt? Ich Mac, ich dachte, du wärst vielleicht ein Dot-Entwickler. Oh, nun ja, nein, ich bin ein Java-Entwickler, also dann denke ich, dass es Maven entspricht Es ist ein Paketmanager. Okay. Oder zumindest ist das eines der Dinge, die Maven tun kann, oder? Ich weiß, dass es viel bewirken kann. Ja. Okay. Es ist ein CocoaPods, ich glaube, es ist nur ein Abhängigkeitsmanager Das Coole daran ist, dass Sie sich nicht wirklich darum kümmern müssen , es sei denn, Sie bauen Ihre eigenen Kondensator-Stecker nicht wirklich darum kümmern müssen , es sei denn, Sie Aber jetzt, da wir die App erstellt haben, sollten wir in der Lage sein, sie mit dem Kondensator zu synchronisieren. Okay. Und lass mich aufmachen. Paket, Jason. Oh, sie haben es nicht hier. Okay. Ich hatte ein Drehbuch erwartet. Also NPM-Skripte Okay. Also schien es vorbei zu sein. Komm wieder her. Schauen wir uns an, was es getan hat. Also hat der NPM-Run-Build meine ionische Angular-App erstellt und alle Assets ins WWW gestellt Das ist also die gesamte erstellte Anwendung. Capacitor Sync hat die gesamte Angular Ionic App in dieses IOS-Projekt kopiert in dieses IOS-Projekt Das ist also ein X-Code-Projekt. Technisch gesehen müssen wir uns nicht sonderlich darum kümmern , weil Ionic einen Großteil der Arbeit für uns erledigt hat Und ich werde der Erste sein, der zugibt, dass ich kein X-Code-Typ oder ein Objektiv-C-Typ oder ein schneller Typ bin Es ist einfach nicht etwas, das mich jemals besonders angesprochen hat. Aber jetzt, wo ich es erstellt und synchronisiert habe, kann ich dieses Projekt in Xcode öffnen Und davor hatte ich Angst. Okay. Mein Betriebssystem wurde also aktualisiert, seit ich XCode das letzte Mal ausgeführt habe, was bedeutet, dass ich EXCO oder zumindest einen Teil von Xcode aktualisieren oder zumindest einen Teil von Lassen Sie uns nun sehen, was es macht. Folgt Ihnen einer von Ihnen auf Ihrem Mac? Ja. In Ordnung. Ich möchte noch einmal darauf klicken. Das sieht besser aus. Okay. Also, es gibt X-Code. Bist du ein Apple-Entwickler? Nein. Nein. Ich bin als Apple-Entwickler registriert, zahle aber die Abonnementgebühr nicht, sodass ich nichts in den App Store pushen kann. Aber ich sollte zumindest dazu in der Lage sein , wenn ich es finde. Okay. Also habe ich eine Bundle-ID. Das Signieren erfolgt automatisch, aber ich habe kein Team, also muss ich zu meinem persönlichen Team gehen. Und das sollte nicht registriert werden können, weil Sie das nicht können. Die Bundle-ID muss global eindeutig sein. Nun, meins, weil ich Laufen als meine Domain verwende. Und meine Uhr möchte, dass ich meinem Computer vertraue. Ja, das darfst du. Komm spazieren. Nennen wir es Juli 2022. Versuche es erneut. Okay. Also hat es ein Signage-Zertifikat und ein Bereitstellungsprofil für mich erstellt und ein Bereitstellungsprofil für Zu diesem Zeitpunkt sollte ich also in der Lage sein, einen Simulator auszuwählen oder, wenn ich möchte, mein aktuelles iPhone anzuschließen wenn ich ein Lightning-Kabel hätte Irgendwo hier in der Nähe. Wenn wir Zeit haben, mache ich das. Nehmen wir mit einem iPhone acht eines der kleineren älteren. Ich sollte auf Play klicken können. Es wird gebaut. Ich habe dir doch gesagt, dass das Macbook schnell ist, oder? Okay. Ja. Ich habe den offenen X-Code unter meinem Kondensator im Ionischen nicht gesehen unter meinem Kondensator im Ionischen Hast du nicht? Ja. Das hatte ich nicht. Hattest du den Bau an der Spüle gemacht? Ja. Ja, und du hast das Ad-IOS-Projekt gemacht? Ja. Ja. Weil ich deswegen die Kokapapseln gegessen habe Okay. Richtig. Nun, lassen Sie mich versuchen, es noch einmal zu bauen, um es zu sehen. Ordnung. Der Simulator wird gerade gestartet Also auf dem iPhone 8 mit IOS 1155. Das kannst du ganz oben sehen. Wenn du es sehen kannst, ist das klein, heißt es, Apple läuft auf dem iPhone 8. Da hast du's. Mit allen drei Knöpfen. Jetzt kann ich dir sagen, dass das scheitern wird. Es ist nicht so, dass die Anwendung funktionieren wird, oder? Ich kann hier reinkommen. Ich kann ein Geschenk markieren. Ich kann als abwesend markieren. Ich kann gehen, ich kann Jennifers Namen in Jen ändern. Okay. Und es benimmt sich wie ein iPhone Und wir werden sagen, dass Jen am zehnten März 95 geboren wurde am zehnten März 95 Und wir werden Jen retten. Jetzt heißt es also Jen und hat immer noch denselben Geburtstag. Ich kann Troy löschen. Und alles, was wir in den letzten 3.5 Sessions entwickelt haben , läuft komplett als wäre es eine native iPhone-App Ein paar Dinge müssen wir noch tun, um es besser zu machen, aber es funktioniert. Also, wenn ich hier zu Casey reinkomme, weiß jemand, was passiert, wenn ich auf das Bild von der Kamera klicke Es gibt keinen Kamerasimulator, also wird es nicht funktionieren, dafür wird es scheitern Ich werde dich wahrscheinlich bitten, ein Bild auszuwählen oder einfach zu sterben. Nein, es stirbt einfach. Nein. Aber ich glaube, der Grund, warum es gestorben ist, ist nicht, dass es keine Kamera gibt. Es ist genau hier. Hier fängt es also an zu werden. Wir sind nicht mehr wirklich im Bereich der Ionik. Und wenn Sie zur Dokumentation des Kondensator-Kamerasteckers gehen , werden Sie davor gewarnt Die Kamera funktioniert nur, wenn Sie X Code mitteilen , dass Sie um Erlaubnis zur Verwendung der Kamera bitten möchten und. Ihr habt es alle gesehen, oder? Anwendung X möchte Ihre Kamera verwenden und dann stehen ein oder zwei kleine Sätze darunter , die Ihnen sagen, was sie mit dem Bild machen oder wie sie diese Daten verwenden werden . Richtig. Das ist hier drin. Das ist im X-Code. Mit Ionic ist das nicht möglich und für Android ist es anders als für IOS Es ist dasselbe. Sie müssen immer noch um Erlaubnis bitten, aber die Art und Weise, wie Sie um Erlaubnis gebeten ist bei Android anders. Also, soweit ich mich erinnere, lass mich die App beenden. Okay. Soweit ich mich erinnere, ist es irgendwo hier drin. Ich bin in der Information. Und was sagen sie mir, wonach ich suche. Ihnen fehlt die Beschreibung der Nutzung der Anna Photo Library-Anzeige. Erforderliche Gerätefunktionen. Den vergesse ich immer. Also werde ich das nehmen. Ich werde zurück zu den Interwebs gehen. Okay. Und Apple sagt, eine Nachricht, die dem Nutzer mitteilt, warum die App diese Anzeige anfordert, wohin geht sie? Da haben wir's. So fügen Sie das im X-Code hinzu. Wir sind also bei Informationen, benutzerdefinierten IOS-Zielen. Das sehe ich nicht. Siehst du das? Nein. Natürlich haben sie das Zeug bei fast jedem geändert, hier ist der Brauch, den ich immer angefangen habe. Das ist hier auf der linken Seite. Klicken Sie mit der rechten Maustaste auf eine beliebige Schlüsselzeile und klicken Sie auf Zeile hinzufügen. Hinzufügen. Das fühlt sich an. Das sehe ich falsch, nicht wahr? Ich glaube nicht, dass das dazugehört. Okay. Wie wäre es mit den R-Werten? Nein, ich mag das E. Okay, was ist das auf der Liste? Ly. Das ist der, den ich will. Da haben wir's. Das will ich haben. Das nicht. Jetzt, wo ich das da habe, glaube ich, genau deswegen wollen wir es verwenden. Schreiben Sie den Wert, der beschreibt, warum Ihre Anwendung ihn benötigt. Hier können wir ein Foto von Ihnen machen. Okay. Macht das Sinn? Lass es nochmal laufen. Der Simulator läuft immer noch. Und jetzt gehe ich zum Dienstplan. Klickt hier, hoffentlich. Mir hat es immer noch nicht gefallen. Deshalb verwenden wir Ionic und Nott fehlt. Lassen Sie uns das hier noch einmal überprüfen. Es ist weg, nicht wahr? Nein. unten. Hier bitteschön. Sollte das im Rahmen der erforderlichen Gerätefunktionen liegen? Nein. Sie haben es auf dem Bundle ex dem Bundle gemacht. Sie haben es hier irgendwo gemacht. Ja. Also, was war ihr Wert, den sie hatten? Vielleicht ist das der Unterschied. Der Wert des Schlüssels wird als Beschreibung des Popups angezeigt , das dem Benutzer angezeigt wird. Schreiben Sie also den Wert, der beschreibt, warum Ihre Anwendung Zugriff auf die Fotobibliothek benötigt? Das sieht gut aus. Lass es uns versuchen. Geh zurück zur App. Musst du es erneut bauen? Das habe ich mir auch gedacht. Lass uns einfach den Build-Ordner reinigen. Und dann baue es und führe es erneut aus. Oh. Beeindruckend. Ja. Darüber freut es sich immer noch , oder? Es ist möglich. Oh, es ist auch hier, nicht wahr? Es ist so, dass es in der Info-P-Liste steht. Es ist sogar genau dort. Ich bin mir ziemlich sicher, dass es nicht in der Kapsel ist. Ich glaube, es ist einfach hier. Es macht immer Spaß, mit IOS umzugehen. Gehen wir also zum Kondensator. Lass uns sehen, was sie sagen. Mera einstecken. Es erfordert mehr als nur diesen Also haben wir diesen gemacht, richtig? Nein. Wir haben diese Mauer gemacht. In Ordnung. Also haben wir den. Die sind alle gleich, oder? Okay. Okay. Ich möchte sie ein bisschen anders machen , damit ich weiß , welcher welcher ist. Okay. Lass uns das versuchen. Asador sagt, wir brauchen drei, also haben wir jetzt drei. Es fühlte sich nicht so an, als wäre es gebaut worden, oder? Du hast gesagt, dass es so war? Nein. Lass es uns versuchen. Da hast du's. Aber das war es, was wir brauchten. Wir brauchten alle drei. Ordnung. Also schauen wir mal, ob ich hier ein Kabel habe . Was bedeutet, dass ich den Stecker ziehen muss. Das ist das Problem mit dem MacBook-Fehler. Es hat nur zwei Anschlüsse. Also werde ich meinen Strom abziehen , da das Ding einer Batterie sechs oder 7 Stunden lang läuft Ich bin in meinem iPhone 11. Okay. Jetzt, wo wir das funktionstüchtig haben. Ich habe hier mein iPhone 11 zum Entsperren, um das Zubehör zu verwenden. Jetzt Michaels iPhone. Ich teile den Bildschirm immer noch, oder? Ja. Ja. Okay. Okay. Also habe ich mein iPhone ausgewählt. Und jetzt werde ich es wieder starten. Und ich denke, Bill war erfolgreich. Michael, das ist in Ordnung. Ich werde für einen Moment aufhören zu