Jan Varwig schreibt über die Rolle von Richtlinien in Angular. Es ist keine Antwort auf Ihre Frage, aber in einigen Fällen könnten seine Ideen eine gute Alternative sein: jan.varwig.org/archive/angularjs-views-vs-directives/…
Juha Palomäki
Ich habe das eckige Tutorial durchgearbeitet und hatte genau die gleiche Frage. Sie machen dies nicht sehr deutlich. Es scheint jedoch ein ziemlich tiefes Konzept zu sein.
qwwqwwq
Antworten:
100
Sie können nur eine haben ng-view.
Sie können ihren Inhalt auf verschiedene Weise ändern: ng-include, ng-switchoder Mapping verschiedene Controller und Vorlagen durch die routeProvider.
Mapping-Controller und -Vorlagen ersetzen das gesamte ng-view-Element, oder?
zx1986
9
Was ist mit der dynamischen Änderung des Inhalts eines Widgets? Möchten Sie nicht eine Ansicht für das Widget und einen Controller für das Widget sowie ein Modell für das Widget erstellen?
Ray Suelzer
Wird empfohlen, Ansichten zu verwenden? Ist es nicht besser, divs mit ng-showund zu definieren ng-hideund ihre Sichtbarkeit mithilfe von Variablen zu steuern? Weil ich manchmal mehrere Komponenten verstecken / anzeigen möchte
Leider heißt es in der UI-Router-Readme: Hinweis: UI-Router befindet sich in der aktiven Entwicklung. Während diese Bibliothek gut getestet ist, kann sich die API ändern. Erwägen Sie die Verwendung in Produktionsanwendungen nur, wenn Sie einem Änderungsprotokoll folgen und Ihre Verwendung entsprechend aktualisieren möchten.
Trainoasis
1
@trainoasis Hat es für mehrere Projekte verwendet, scheint 'sehr' stabil zu sein und bis jetzt hatte ich kein Problem mit dem Ändern der API, tatsächlich erinnere ich mich an keine größere Änderung der API.
Morteza Ziyae
19
Ich glaube, Sie können es erreichen, indem Sie nur Single haben ng-view. In der Hauptvorlage können Sie ng-includeAbschnitte für Unteransichten haben und dann im Hauptcontroller Modelleigenschaften für jede Untervorlage definieren. Damit sie automatisch an ng-includeAbschnitte gebunden werden. Dies ist dasselbe wie mit mehrerenng-view
Sie können das in der Dokumentation angegebene Beispiel überprüfenng-include
Wenn Sie im Beispiel die Vorlage aus der Dropdown-Liste ändern, wird der Inhalt geändert. Nehmen wir hier an, Sie haben einen Hauptinhalt ng-viewund anstatt Unterinhalte manuell durch Auswahl der Dropdown-Liste auszuwählen, tun Sie dies wie beim Laden der Hauptansicht.
In Ermangelung einer Lösung wie UI-Router ist ng-include tatsächlich eine praktikable Alternative, wie Sie erklärt haben. Was ng-include nicht erreichen kann, sind URL-gesteuerte Mehrfachansichten. $ Route kann verschiedene Ansichten basierend auf der aktuellen URL nicht dynamisch rendern. Wir könnten die Arme von Angular drehen und dies mithilfe einer benutzerdefinierten Logik in der Steuerung erreichen, wie im Beispiel in der ng-includeDokumentation , aber es ist kein wünschenswertes Muster der Anwendungsarchitektur, UI-Router ist die richtige Art von Lösung.
Yiling
Ein Plus für @ Yiling Kommentar. Die Verwendung von ng-include ist eine Problemumgehung.
Farshid Saberi
13
Mit dem regulären ng-viewModul können Sie nicht mehr als eine dynamische Vorlage haben.
Mit diesem Projekt können Sie dies jedoch tun (suchen nach ui-router).
Angular-UI scheint eine gute Wahl in der (nahen) Zukunft zu sein, aber es scheint immer noch sehr instabil für den Produktionseinsatz zu sein
David Barreto
8
Es ist möglich, mehrere oder verschachtelte Ansichten zu haben. Aber nicht von ng-view.
Das primäre Routing-Modul in Angular unterstützt nicht mehrere Ansichten. Sie können aber auch einen UI-Router verwenden. Dies ist ein Modul eines Drittanbieters, das Sie über Github, Angular-UI / UI-Router, https://github.com/angular-ui/ui-router erhalten können . Derzeit wird auch eine neue Version von ngRouter (ngNewRouter) entwickelt. Es ist im Moment nicht stabil. Deshalb biete ich Ihnen ein einfaches Startbeispiel mit UI-Router. Mit ihm können Sie Ansichten benennen und angeben, welche Vorlagen und Controller zum Rendern verwendet werden sollen. Mit $ stateProvider sollten Sie angeben, wie Ansichtsplatzhalter für einen bestimmten Status gerendert werden sollen.
Ich bin mir nicht sicher, warum Sie das tun müssen. Warum nicht die Kopf- / Fußzeile und die ng-Ansicht den Inhalt einbinden?
user441521
ng-include funktioniert, wenn die Dateien gehostet werden, z. auf nodejs. Wenn Sie mit einem lokalen Verzeichnis arbeiten, wird ein domänenübergreifender Fehler ausgegeben.
Sid
0
Sie können nicht mehrere ng-Ansicht haben. Unten ist mein Anwendungsfall, in dem ich meine Anforderung gelöst habe. Ich wollte ein Verhalten mit Registerkarten in meinem Modelldialog haben. Ich hatte ein Problem, als ich auf Registerkarten mit Hyperlink klickte, die Router-Links aufrufen. Ich habe dies mit Button und CSS für Tabs gelöst. Wenn der Benutzer auf die Registerkarte klickt, wird tatsächlich kein Hyperlink aufgerufen, der immer den ng-Router aufruft. Wenn der Benutzer auf die Registerkarte klickt, wird eine Methode aufgerufen, bei der ich HTML dynamisch lade. Unten ist die Funktion beim Klicken auf die Registerkarte
Antworten:
Sie können nur eine haben
ng-view
.Sie können ihren Inhalt auf verschiedene Weise ändern:
ng-include
,ng-switch
oder Mapping verschiedene Controller und Vorlagen durch die routeProvider.quelle
ng-show
und zu definierenng-hide
und ihre Sichtbarkeit mithilfe von Variablen zu steuern? Weil ich manchmal mehrere Komponenten verstecken / anzeigen möchteUI-Router ist ein Projekt, das helfen kann: https://github.com/angular-ui/ui-router Eine seiner Funktionen sind mehrere benannte Ansichten
UI-Router hat viele Funktionen und ich empfehle Ihnen, ihn zu verwenden, wenn Sie an einer erweiterten App arbeiten.
Überprüfen Sie Dokumentation von Multiple Benannte Ansichten hier .
quelle
Ich glaube, Sie können es erreichen, indem Sie nur Single haben
ng-view
. In der Hauptvorlage können Sieng-include
Abschnitte für Unteransichten haben und dann im Hauptcontroller Modelleigenschaften für jede Untervorlage definieren. Damit sie automatisch anng-include
Abschnitte gebunden werden. Dies ist dasselbe wie mit mehrerenng-view
Sie können das in der Dokumentation angegebene Beispiel überprüfen
ng-include
Wenn Sie im Beispiel die Vorlage aus der Dropdown-Liste ändern, wird der Inhalt geändert. Nehmen wir hier an, Sie haben einen Hauptinhalt
ng-view
und anstatt Unterinhalte manuell durch Auswahl der Dropdown-Liste auszuwählen, tun Sie dies wie beim Laden der Hauptansicht.quelle
ng-include
Dokumentation , aber es ist kein wünschenswertes Muster der Anwendungsarchitektur, UI-Router ist die richtige Art von Lösung.Mit dem regulären
ng-view
Modul können Sie nicht mehr als eine dynamische Vorlage haben.Mit diesem Projekt können Sie dies jedoch tun (suchen nach
ui-router
).quelle
Es ist möglich, mehrere oder verschachtelte Ansichten zu haben. Aber nicht von ng-view.
Das primäre Routing-Modul in Angular unterstützt nicht mehrere Ansichten. Sie können aber auch einen UI-Router verwenden. Dies ist ein Modul eines Drittanbieters, das Sie über Github, Angular-UI / UI-Router, https://github.com/angular-ui/ui-router erhalten können . Derzeit wird auch eine neue Version von ngRouter (ngNewRouter) entwickelt. Es ist im Moment nicht stabil. Deshalb biete ich Ihnen ein einfaches Startbeispiel mit UI-Router. Mit ihm können Sie Ansichten benennen und angeben, welche Vorlagen und Controller zum Rendern verwendet werden sollen. Mit $ stateProvider sollten Sie angeben, wie Ansichtsplatzhalter für einen bestimmten Status gerendert werden sollen.
Für dieses Beispiel müssen Sie auf anglejs und angle-ui.router verweisen.
quelle
Sie können nicht mehrere ng-Ansicht haben. Unten ist mein Anwendungsfall, in dem ich meine Anforderung gelöst habe. Ich wollte ein Verhalten mit Registerkarten in meinem Modelldialog haben. Ich hatte ein Problem, als ich auf Registerkarten mit Hyperlink klickte, die Router-Links aufrufen. Ich habe dies mit Button und CSS für Tabs gelöst. Wenn der Benutzer auf die Registerkarte klickt, wird tatsächlich kein Hyperlink aufgerufen, der immer den ng-Router aufruft. Wenn der Benutzer auf die Registerkarte klickt, wird eine Methode aufgerufen, bei der ich HTML dynamisch lade. Unten ist die Funktion beim Klicken auf die Registerkarte
Benutzer $ templateRequest. Fügen Sie auf der Seite test_template.html Ihren HTML-Inhalt hinzu. Dieser HTML-Inhalt wird an Ihren Controller gebunden.
quelle