Was sind die Unterschiede zwischen NG-IF und NG-Show/Hide?
Der erste Unterschied besteht darin, dass NG-IB nur dann erstellt wird, wenn der Ausdruck nach dem DOM-Knoten wahr ist, NG-Show zu Beginn erstellt wird, und Anzeige: Block und Anzeige: Keine werden verwendet, um die Anzeige zu steuern und nicht anzuzeigen.
Der zweite Unterschied besteht darin, dass NG-wenn wird (implizit) ein neues Zielfernrohr erzeugen, und dies gilt für NG-Switch, NG-include usw., um eine Schnittstelle dynamisch zu erstellen.
Dies führt dazu, dass das NG-Modell mit der grundlegenden Variablen in ng-if gebunden wird und dieses Modell an einen anderen Anzeigebereich in der äußeren DIV binden. Wenn sich die innere Schicht ändert, ändert sich die äußere Schicht nicht synchron, da es bereits zwei Variablen gibt.
<p> {{Name}} </p> <div ng-if = "true"> <Eingabe type = "text" ng-model = "name"> </div>Ng-show hat dieses Problem nicht, da es nicht mit seinem eigenen Bereich erster Stufe ausgestattet ist.
Die Möglichkeit, diese Art von Problem zu vermeiden, besteht darin, Elemente in der Seite immer an die Eigenschaften des Objekts (data.x) zu binden, anstatt direkt an die Basisvariable (x) zu binden.
Weitere Informationen finden Sie im Bereich von AngularJs
Wenn NG wiederholt über ein Array, wenn es im Array die gleichen Werte gibt, welche Probleme werden dort sein und wie man sie löst?
Duplikate in einem Repeater sind nicht erlaubt. Das Hinzufügen von Track von $ index kann es lösen. Natürlich können Sie auch jeden gewöhnlichen Wert verfolgen, solange Sie jedes Element im Array eindeutig identifizieren können (die Assoziation zwischen DOM und den Daten erstellen).
Kann der in NG-Klick geschriebene Ausdruck die Methoden auf JS-nativen Objekten verwenden?
Nicht nur Ausdrücke im NG-Klick, sondern nur native JS-Methoden können nicht direkt auf dem Weg auf der Seite aufgerufen werden, da diese nicht im $ Scope des Controllers vorhanden sind, der der Seite entspricht.
Nehmen Sie eine Kastanie:
<p> {{ParseInt (55.66)}} <p>
Sie werden feststellen, dass nichts angezeigt wird.
Aber wenn Sie diese Funktion in $ Scope hinzufügen:
$ scope.parseInt = Funktion (x) {return parseInt (x);}Natürlich gibt es kein solches Problem.
Für diese Art von Anforderung kann die Verwendung eines Filters eine gute Wahl sein:
<p> {{13.14 | ParseIntFilter}} </p> app.filter ('parseIntFilter', function () {return function (item) {return parseInt (item);}}){{jetzt | Wie können vertikale Linien und nachfolgende Parameter angepasst werden?
Filter, formatiert Daten, erhält eine Eingabe, verarbeitet sie nach einer bestimmten Regel und gibt das Verarbeitungsergebnis zurück.
Eingebauter Filter
Es gibt neun Arten von integrierten Filtern:
Datum (Datum)
Währung
Limitto (Grenzarray oder Stringlänge)
orderby (sortieren)
Kleinbuchstaben (Kleinbuchstaben)
Großbuchstaben (Kappen)
Anzahl (formatieren Sie die Anzahl, fügen Sie tausend Separator hinzu und empfangen Sie Parameter, um die Anzahl der Dezimalstellen zu begrenzen).
Filter (verarbeiten Sie ein Array und filtern Sie Elemente heraus, die ein Substring enthalten)
JSON (Formatieren von JSON -Objekt)
Es gibt zwei Möglichkeiten, den Filter zu verwenden. Eine ist direkt auf der Seite:
<p> {{jetzt | Datum: 'yyyy-mm-dd'}} </p>
Ein anderer besteht darin, es in JS zu verwenden:
// $ filter ('Filtername') (Objekte, die gefiltert werden müssen, Parameter 1, Parameter 2, ...)
$ filter ('Datum') (jetzt 'yyyy-mm-dd hh: mm: ss');
Benutzerdefinierte Filter
// Formular App.filter ('Filtername', Funktion () {Rückgabefunktion (Objekt, das gefiltert werden muss, Filterparameter 1, Filterparameter 2, ...) {// ... Tun Sie etwas, um das Objekt nach der Verarbeitung zurückzugeben;}}); // Chestnut app.filter ('TimesFilter', function () {return function (item, times) {var result = ''; für (var i = 0; i <times; i ++) {result+= item;} return Ergebnis;}})Wie ist die Beziehung zwischen Fabrik, Service und Anbieter?
Fabrik
Fügen Sie die Servicemethode und die Daten in ein Objekt ein und geben Sie dieses Objekt zurück
app.factory ('fooService', function () {return {target: 'factory', sayhello: function () {return 'hello' + this.target;}}});Service
Erstellen Sie einen Dienst über die Konstruktormethode und geben Sie ein instanziiertes Objekt zurück
app.Service ('fooService', function () {var self = this; this.target = 'service';Anbieter
Erstellen Sie einen Dienst, der über die Konfiguration konfiguriert werden kann. Die zurückgegebene in $ GET besteht darin, die Fabrik zu verwenden, um den Inhalt des Dienstes zu erstellen
app.Provider ('fooService', function () {this.configData = 'init data'; this.setConFigData = function (data) {if (data) {this.conFigData = data;}} this. $ Get = Funktion () iTal Self; this.target;Aus der Sicht der Implementierung der Implementierung ruft der Service die Fabrik an und gibt seine Instanz zurück. Der Werksanbieter ruft den Anbieter an, der den in seinem $ GET definierten Inhalt zurückgibt. Die Fabrik- und Servicefunktionen sind ähnlich, außer dass die Fabrik eine normale Funktion ist, die alles zurückgeben kann (Rückgabe kann zugegriffen werden. Der Dienst ist ein Konstruktor, auf den nicht zurückgegeben werden kann (die darauf gebunden sind). Der Anbieter ist eine verbesserte Fabrik, die eine konfigurierbare Fabrik zurückgibt.
Siehe AngularJS Factory vs Service gegen Anbieter
Welcher Mechanismus wird zur Datenbindung von Angular verwendet? Detaillierte Beschreibung des Prinzips
Schmutziger Inspektionsmechanismus.
Die bidirektionale Datenbindung ist einer der Kernmechanismen von AngularJs. Wenn sich die Datenänderung in der Ansicht ändern, wird diese auf das Modell aktualisiert. Wenn sich das Modell ändern, wird die Ansicht auch gleichzeitig aktualisiert. Dies erfordert natürlich eine Überwachung.
Das Prinzip ist, dass Angular eine Hörwarteschlange im Bereichsbereichsmodell einrichtet, um auf Datenänderungen zu hören und die Ansicht zu aktualisieren. Jedes Mal, wenn ein Objekt an die Ansicht gebunden ist, fügt AngularJs eine $ Watch in die $ Watch -Warteschlange ein, um festzustellen, ob es Änderungen im Modell, das es überwacht, Änderungen vorliegen. Wenn der Browser ein Ereignis erhält, das durch Angular Context verarbeitet werden kann, wird die $ digest -Schleife ausgelöst, wodurch alle $ -wachen durchquert und schließlich das DOM aktualisiert wird.
Kastanischen Kastanien geben
<Button ng-klick = "val = val+1"> Erhöhen Sie 1 </button>
Beim Klicken wird eine Aktualisierungsoperation generiert (mindestens zwei $ Digest Loops werden ausgelöst)
Drücken Sie die Taste
Der Browser erhält ein Ereignis und betritt den Winkelkontext
Die $ Digest -Schleife beginnt auszuführen und fordert sich ab, ob sich jede $ Watch ändert
Da $ Watch Monitoring $ scope .val Änderungen gemeldet hat, wird eine $ digest -Schleife durchgesetzt
Keine Änderungen in der neuen $ Digest -Schleife festgestellt
Der Browser nimmt den Controller zurück und aktualisiert den DOM, der dem neuen Wert von $ scope.val entspricht
Die Obergrenze der $ Digest -Schleife beträgt das 10 -fache (eine Ausnahme wird nach mehr als 10 -fach um die Vorbeugung von unendlichen Schleifen ausgelöst).
Siehe Datenbindung für AngularJs
Zwei horizontale Schnittstellenblöcke a und b. Wenn ein Ereignis in A ausgelöst wird, wie können er es wissen? Detaillierte Beschreibung des Prinzips
Mit anderen Worten, dieses Problem ist, wie Sie zwischen horizontalen Schnittstellenmodulen kommunizieren. Es gibt zwei Methoden, eine besteht darin, Dienste zu teilen, und der andere muss auf Ereignissen beruhen.
Shared Services
In Angular kann ein Singleton -Objekt über Fabrik erzeugt werden, und dieses Objekt kann in die Module A und B injiziert werden, die Kommunikation benötigen.
Basierend auf Ereignissen
Es gibt zwei Möglichkeiten, dies zu tun
Die erste besteht darin, den übergeordneten Controller zu verwenden. Lösen Sie im Kindercontroller ein Ereignis ($ emit) an den übergeordneten Controller, hören Sie dann ($ on) Ereignisse im Elterncontroller an und senden Sie dann ($ Sendung) an den Kindercontroller. Auf diese Weise werden Daten durch die vom Ereignis getragenen Parameter über den übergeordneten Controller und zwischen denselben Ebenen der Ebene propagiert.
Der zweite Typ ist die Verwendung von $ rootscope. Jede Winkelanwendung verfügt standardmäßig über einen Wurzelbereich $ rootscope. Der Wurzelbereich befindet sich auf der obersten Ebene, und es gibt Rahmen, die an allen Ebenen davon hängen. Wenn der Subcontroller $ rootscope direkt verwendet, um Ereignisse zu senden und zu empfangen, kann die Kommunikation zwischen Gleichaltrigen erreicht werden.
Siehe die Kommunikation zwischen Controllern in AngularJs
Wie sollte eine eckige Anwendung gut geschichtet werden?
Dividierung der Verzeichnisstruktur
Für kleine Projekte können Sie sie nach Dateityp organisieren, z. B.:
CSSJS -Controller -Modelle -Dienste Filter
Für größere Projekte ist es jedoch am besten, sie nach Geschäftsmodulen zu teilen, wie beispielsweise:
CSSMODULES ACTORCONTERS MODELLE MODELLE DIENSTLEISTUNGEN FILTERS Vorlagen Diskontroller Modelle Dienstleistungsfilter Vorlagen
Es ist am besten, ein gemeinsames Verzeichnis unter Modulen zu haben, um öffentliche Dinge zu speichern.
Aufteilung des logischen Code
Als MVVM -Framework sollten Winkelanwendungen nach Modell, Ansichtsmodell (Controller) und Ansichten geteilt werden.
Die Aufteilung des Logikcodes hier bezieht sich hauptsächlich auf den Versuch, die Controller -Schicht so dünn wie möglich zu gestalten. Extrahieren Sie die gemeinsame Logik in den Dienst (z. B. Hintergrunddatenanfragen, Datenfreigabe und Cache, ereignisbasierte Kommunikation zwischen Modul usw.), extrahieren Sie gemeinsam genutzte Schnittstellenoperationen in die Richtlinie (z.
In komplexen Anwendungen können entsprechende Konstruktoren auch für Entitäten wie das Festplattenmodul (Festplatten) festgelegt werden, das möglicherweise mehrere Ansichten wie Liste, neue Erstellung und Details bzw. entsprechende Controller aufweist. Anschließend kann ein Festplattenkonstruktor erstellt werden, um die Datenabschluss-, Lösch-, Änderungs- und Überprüfungsvorgänge abzuschließen. Wenn ein Scheibencontroller vorliegt, wird der Festplattenkonstruktor in den Festplattenkonstruktor injiziert und eine Instanz erzeugt. Diese Instanz hat die Methoden zum Hinzufügen, Löschen, Änderungen und Überprüfungen. Dies hat nicht nur klare Schichten, sondern realisiert auch die Wiederverwendung (die Controller -Schicht dünner wird).
Beziehen Sie sich auf die eingehende Praxis von AngularJs im Suning Cloud Center
Welche Routing -Bibliotheken werden üblicherweise für Winkelanwendungen verwendet und welche Unterschiede sind ihre Unterschiede?
Ngroute und UI.router werden üblicherweise in angular1.x verwendet, und es gibt auch einen neuen Router (Komponentenorientiert) für Angular2. Der hintere dahinter wurde im eigentlichen Projekt nicht verwendet, daher werde ich nicht darüber sprechen.
Unabhängig davon, ob es sich um NGROUTE oder UI.ROUTER handelt, muss als zusätzliches Merkmal des Frameworks in Form von Modulabhängigkeiten eingeführt werden.
der Unterschied
Das NGroute-Modul ist ein Winkelrouting-Modul, während das UI.router-Modul ein Drittanbietermodul ist, das basierend auf dem NGroute-Modul entwickelt wurde.
UI.router basiert auf dem Staat (Staat), NGroute basiert auf URL, und das UI.router -Modul hat leistungsstärkere Funktionen, die sich hauptsächlich in den Verschachtelungsaspekten der Ansichten widerspiegeln.
Verwenden Sie UI.router, um Routen mit klaren Eltern-Kind-Beziehungen zu definieren, und fügen Sie untergeordnete Routing-Vorlagen in <div ui-view> </div> der übergeordneten Routing-Vorlage über die UI-View-Direktive ein, wodurch das Verschachteln der Ansicht erkannt wird. Dies kann nicht in NGroute definiert werden. Wenn <div ng-view> </div> gleichzeitig in der Sicht der Elternkind verwendet wird, fällt es in eine tote Schleife.
Beispiel
Ngroute
var app = angular.module ('nGrouteApp', ['nGroute']); app.config (Funktion ($ roouteProvider) {$ routeProvider .Wen ('/main', {templateurl: "main.html", controller: 'mainctrl'}) .otherIge ({{redirectto:/tabs ';Ui.router
var app = angular.module ("uirouteApp", ["ui.router"]); App.config ($ urlrouterProvider, $ stateProvider) {$ urlrouterProvider.Otherwise ("/Index"); $ stateProvider. 'Mainctrl'})Wenn Sie ein vollkomponentes System durch Winkelrichtlinie planen, auf welche Herausforderungen können Sie begegnen?
Ich habe noch nie selbst eine vollständige Komponenten mit Richtlinie erstellt, also kann ich es nicht erklären.
Eine Sache, an die man denken kann, ist, wie Komponenten mit der Außenwelt interagieren und wie sie durch einfache Konfiguration verwendet werden können.
Angular -Anwendungen, die von verschiedenen Teams entwickelt wurden. Wenn Sie sie integrieren möchten, welche Probleme können auftreten und wie Sie sie lösen können?
Konflikte zwischen verschiedenen Modulen können auftreten.
Zum Beispiel werden alle Entwicklungen eines Teams unter Modulea durchgeführt, während der von einem anderen Team entwickelte Code unter Moduleb durchgeführt wird
angular.module('myApp.moduleA', []) .factory('serviceA', function(){ ... }) angular.module('myApp.moduleB', []) .factory('serviceA', function(){ ... }) angular.module('myApp', ['myApp.moduleA', 'myApp.moduleB'])Dies wird dazu führen, dass Servicea unter zwei Modulen überschrieben wird.
Es scheint, dass es in Angular1.x keine gute Lösung gibt. Daher ist es am besten, in der frühen Phase einheitliche Planung zu machen, Vereinbarungen zu treffen und sich streng in Übereinstimmung mit der Vereinbarung zu entwickeln. Jeder Entwickler schreibt nur einen bestimmten Blockcode.
Was sind die Nachteile von Angular?
Starke Einschränkungen
Dies führt zu hohen Lernkosten und ist bis zum Frontend unfreundlich.
Bei der Befolgung von AngularJs-Konventionen ist die Produktivität hoch und Java-Programmierer-freundlich.
SEO nicht förderlich
Da alle Inhalte dynamisch erfasst und gerendert werden, können Suchmaschinen nicht kriechen.
Eine Lösung ist, dass der Server für den normalen Benutzerzugriff auf den Inhalt der AngularJS -Anwendung reagiert. Für Suchmaschinenzugriff reagiert sie auf HTML -Seiten speziell für SEO.
Leistungsprobleme
Da das MVVM-Framework, da die Zwei-Wege-Bindung von Daten implementiert wird, werden Leistungsprobleme für große Arrays und komplexe Objekte auftreten.
Methoden, mit denen die Leistung von Winkelanwendungen optimiert werden kann:
Reduzieren Sie die Überwachungselemente (z. B. Einwegbindung für Daten, die sich nicht ändern)
Setzen Sie den Index aktiv fest (Geben Sie den Track nach, einfachen Typen verwenden sich standardmäßig als Index, und Objekte verwenden $$ Hashkey standardmäßig, z.
Reduzieren Sie die Menge an gerenderten Daten (z. B. Paging oder jedes Mal einen kleinen Teil der Daten abzurufen und nach Bedarf abzurufen).
Datenabflachung (zum Beispiel für Baumstrukturen, um Abflachungsstrukturen zu erstellen, um eine Karte- und Baumdaten zu erstellen. Beim Betrieb auf dem Baum werden die Änderungen der Baumdaten, da dieselbe Referenz wie die flachen Daten ist, mit den ursprünglichen flachen Daten synchronisiert)
Darüber hinaus gibt es für Angular1.x Probleme mit schmutziger Überprüfung und Modulmechanismus.
Mobile
Ionic kann ausprobiert werden, aber es ist nicht perfekt.
Wie kann ich Peter-Paul Kochs Ansicht zu Angular im Januar 2015 sehen?
Wie sehen Sie den Controller als Syntax an, die in Angular 1.2 eingeführt wurde?
Der grundlegendste Nutzen
Vor Angular 1.2 war jede Bindung an der Ansicht direkt an $ Scope gebunden
Funktion myctrl ($ scope) {$ scope.a = 'aaa'; $ scope.foo = function () {...}}Unter Verwendung von Controlleras wird Controller nicht erneut $ Scope injizieren. Controller wird zu einem sehr einfachen JavaScript -Objekt (POJO), einem reineren ViewModel.
Funktion myctrl () {// Verwenden Sie VM, um dies zu erfassen, um die internen Funktionen zu vermeiden, wodurch sich der Kontext ändert, wenn diese var vm = this verwendet wird; vM.a = 'aaa';}Prinzip
Aus Sicht der Quellcode -Implementierung erstellt die Controlleras -Syntax nur ein Attribut für $ Scope mit dem AS -Alias für das Controller -Objekt.
if (Directive.Controlleras) {Locals.Neben dem oben erwähnten Controller können Sie jedoch vermeiden, dass Sie eine Grube im Zusammenhang mit AngularJS-Umfang begegnen (dh die Grube, in der Ng-wenn ein Zielfernrohr erzeugt, das tatsächlich eine Grube ist, die tatsächlich eine Grube ist, die in den Vererben der medianen Art der JavaScript-Prototyp-Kette, bei deren Pittors, die Pittoras, auf die Sicht, auf die Sicht, auf deren Pitcx, auf die Sicht, auf die Sicht auf die Sicht, auf die sich auf die Sicht beziehen können, sind die Ansicht. existiert).
<div ng-controller = "testctrl as vm"> <p> {{name}} </p> <div ng-if = "vm.name"> <Eingabe type = "text" ng-model = "vm.name"> </div> </div>Frage
Ein Problem, das Sie mit Controlleras begegnen, ist, dass, da kein $ scope injiziert wird, Methoden unter $ emit, $ scunning, $ on, $ watch usw. nicht verwendet werden können. Diese ereignisbezogenen Operationen können einheitlich eingekapselt und behandelt werden, oder $ Scope wird zur besonderen Behandlung in einen einzelnen Controller eingeführt.
Referenzwinkelregler als Syntax gegen den Umfang
Details zur "Abhängigkeitsinjektion" von Angular "
Kastanie
Die Abhängigkeitsinjektion ist ein Software -Design -Muster, das darauf abzielt, Abhängigkeiten zwischen Codes zu verarbeiten und die Kopplung zwischen Komponenten zu verringern.
Wenn Sie beispielsweise keine AngularJS verwenden, müssen Sie dies möglicherweise tun, wenn Sie Daten aus dem Hintergrund abfragen und sie im vorderen Ende anzeigen möchten:
var Animalbox = document.querySelector ('. Animal-Box'); var httprequest = {get: function (url, radback) {console.log (url + 'angefordert'); var Animals = ['Katze', 'Hund', 'Kaninchen']; Rückruf (Tiere); }} var render = function (el, http) {http.get ('/api/tiere', Funktion (Tiere) {El.InnerHtml = Tiere;})} Render (httprequest, Animalbox);Wenn die Parameter jedoch nicht übergeben werden, wenn der Render aufgerufen wird, wie folgt, wird ein Fehler gemeldet, da El und HTTP nicht gefunden werden können (die Abhängigkeit ist definiert, und die Abhängigkeit wird beim Ausführen nicht automatisch gefunden).
machen();
// TypeRror: Eigentum kann nicht und definierte Eigenschaft lesen
Und mit AngularJs können Sie dies direkt tun
Funktion myctrl = ($ scope, $ http) {$ http.get ('/api/tiere'). Erfolg (Funktion (Daten) {$ scope.Arimals = data;})}Mit anderen Worten, wenn die Winkel -App ausgeführt wird, wird MyCtrl aufgerufen und zwei Abhängigkeiten, $ scope und $ http werden automatisch injiziert.
Prinzip
AngularJs färbt den Namen des Abhängigkeitsdienstes durch den Parameternamen des Konstruktors und verwendet toString (), um die entsprechende Zeichenfolge zu ermitteln, die dieser definierten Funktion entspricht, die Parameter (Abhängigkeiten) in Regelmäßigkeit, dann erhält die entsprechende Abhängigkeit in der Abhängigkeitskarte und übergibt sie und überträgt sie.
Um es zu vereinfachen, ist es wahrscheinlich wie folgt:
var inject = {// Speicherabhängigkeitszuordnungsbeziehung Speicherung: {}, // Registrieren Sie das Abhängigkeitsregister: Funktion (Name, Ressource) {this.storage [name] = ressource; }, // analysieren Sie die Abhängigkeit und rufen Sie die Auflösung an: Funktion (Ziel) {var self = this; var fn_args =/^Funktion/s*[^/(]*/(/s*([^/)]*)/)/M; var strip_comments = /(////.*$)|(///**/s/s weibliches*?/*//)/mg; fnText = target.toString (). ersetzen (strip_comments, ''); argdecl = fntext.match (fn_args) [1] .Split (/,?/g); var args = []; argdecl.foreach (function (arg) {if (self.storage [arg]) {args.push (self.storage [arg]);}}) return function () {target.apply ({}, args); }}}Unter Verwendung dieses Injektors kann die vorherige Kastanie, die AngularJs nicht verwendet, nach dem Modifizieren aufgerufen werden.
Inject.register ('el', Animalbox); Inject.register ('Ajax', httprequest); reender = inject.resolve (render); reender ();Frage
Da AngularJS Injector annimmt, dass der Parametername der Funktion der Name der Abhängigkeit ist, und dann nach der Abhängigkeit suchen, wenn die Abhängigkeit wie in der vorherigen Kastanie injiziert wird, kann die Abhängigkeit nach dem Komprimieren des Codes nicht gefunden werden.
// Funktion myctrl = ($ scope, $ http) {...} // Funktion myctrl = (a, b) {...}Daher werden die folgenden zwei Methoden normalerweise verwendet, um Abhängigkeiten zu injizieren (es gibt Anforderungen an die Reihenfolge, in der Abhängigkeiten hinzugefügt werden).
Array Annotation -Methode
MyApp.Controller ('myctrl', ['$ scope', '$ http', function ($ scope, $ http) {...}])Explizite $ Inject
MyApp.Controller ('myctrl', myctrl); Funktion myctrl = ($ scope, $ http) {...} myctrl. $ inject = ['$ scope', '$ http'];Wieder auffüllen
Für einen DI -Container müssen drei Elemente einbezogen werden: die Registrierung von Abhängigkeiten, die Abhängigkeitserklärung und den Erwerb von Objekten.
In AngularJs können sowohl Modul als auch $ bereitgestellt werden, die Registrierung von Abhängigkeiten; Der eingebaute Injektor kann Objekte erhalten (automatisch Abhängigkeitsinjektion). Die Abhängigkeitserklärung ist wie in der vorherigen Frage erwähnt.
Hier ist eine Kastanie
// Für das Modul wird mehr als ein Parameter übergeben, was bedeutet, dass ein neues Modul erstellt wird, und ein leeres Array bedeutet keine Abhängigkeit von anderen Modulen // Es gibt nur einen Parameter (Modulname), was bedeutet, Modul zu erhalten // myappe add MyApp.Services als Abhängigkeit Angular.modul ('Myapp. Myapp.Services'). Angular.module ('MyApp.Services', []) // $ Provider hat Fabrik, Dienst, Anbieter, Wert, konstant // Definieren Sie ein httpServiceAngular.module ('MyApp.Services'). Service ('httpService', ['$ http', Funktion ($ http) {... {... {... {... {... {... {... {... {... {... {... {... {... {... {... {... {... {... {... {... {... {... {... {... {... {... {... {... {... {... {... {... {... {... {... {... {... {... {... {... {... {... {... {... {... {...beziehen sich auf
[AngularJS] Implementieren Sie eine einfache Abhängigkeitsinjektion selbst
Module und Injektoren im Winkel verstehen, d. H. Abhängigkeitsinjektion
Abhängigkeitsinjektion Praktisches Anwendungsszenario in AngularJs
Wie man angular2 sieht2
Im Vergleich zu Angular1.x hat Angular2 große Veränderungen vorgenommen und ist fast ein brandneues Rahmen.
Basierend auf TypeScript (die mit TypeScript entwickelt werden können) sind starke Sprachtypen vorteilhafter, wenn große Projektteams zusammenarbeiten.
Die Komponentierung verbessert die Effizienz von Entwicklung und Wartung.
Es gibt auch Module, die dynamisches Laden, neue Router, native Unterstützung für Versprechen usw. unterstützen.
Es richtet sich an zukünftige Standards und absorbiert die Vorteile anderer Rahmenbedingungen, die es wert ist, sich darauf zu freuen, aber es gibt auch mehr Dinge zu lernen (es als nächstes, TS, RX usw.).
Das obige ist eine Zusammenstellung der Informationen für AngularJS -Interviewfragen. Wir werden in Zukunft weiterhin relevante Informationen hinzufügen. Vielen Dank für Ihre Unterstützung für diese Website!