AngularJS ng-click um zu einer anderen Seite zu gehen (mit Ionic Framework)
Lesezeit: 7 Minuten
Denker
Wenn ich auf die Schaltfläche klicke (die sich oben in der Ionic-Navigationsleiste befindet), sollte ich idealerweise zu einer anderen Seite gelangen. Es funktioniert jedoch nicht. Beim Klicken verschwinden alle Schaltflächen der Navigationsleiste.
Wenn ich Dummy-Codes verwendet habe, funktioniert es; die Warnung erscheint. Aber wenn ich es in den eigentlichen Code tausche, funktioniert es nicht.
Ich habe das Gefühl, dass etwas mit den Controller-Codes und wie auf die URL oder Ansicht verwiesen wird, nicht stimmt. Aber auch das Testen mit href und ui-sref bringt nichts. Google Devt Tools (JS-Konsole) und Batarang zeigen ebenfalls nichts an.
Die Controller-Datei (die Post- und Auth-Abhängigkeiten funktionieren einwandfrei). Wenn ich versuche, die URL sowohl in .go() als auch in function() einzufügen, schlägt die App fehl.
app.controller('NavCtrl', function ($scope, $location, $state, Post, Auth) {
$scope.post = {url: 'http://', title: ''};
$scope.create = function() {
/* $location.path("https://stackoverflow.com/tab/newpost"); */ /* this variant doesnt work */
$state.go("https://stackoverflow.com/tab/newpost");
};
});
Versuchen Sie, die neu zu laden ganz Seite? Oder navigieren Sie einfach zu diesem Tab?
– manosim
23. August 2014 um 17:05 Uhr
Die App hat eine Navigationsleiste oben und eine untere Leiste. Die untere Leiste wird durch den Zustand „Tab“ dargestellt. Beim Klicken sollte es zur neuen Seite navigieren, während die Navigationsleiste und die untere Leiste bestehen bleiben.
– Denker
23. August 2014 um 17:08 Uhr
Wenn Sie uns eine zur Verfügung stellen können Codestift Link, dann wird es einfacher sein, Ihnen zu helfen.
– manosim
23. August 2014 um 17:19 Uhr
Nur um sicherzugehen, hast du meine Antwort überprüft? Ihr Problem kommt von ui-router, der Teil des ionischen Frameworks ist. Das $state.go muss richtig aufgerufen werden – mit einem Zustandsnamen, nicht mit der URL … hoffe, das hilft ein bisschen 😉
– Radim Köhler
23. August 2014 um 17:21 Uhr
@RadimKöhler Ich habe die Methoden $state.go und $window ausprobiert und beide hatten einen Cannot GET /tab/newpost-Fehler (wenn der HTML-Code einen ng-click=create() anstelle von ng-click(“tab.newpost”) hat Ich denke, es funktioniert einigermaßen.Wenn Sie $state.go verwenden, bin ich mir nicht sicher, wie ich es sonst zum Laufen bringen soll.Codepen funktioniert hier schlecht, da ich verschiedene Codes habe, die sich auf die Datenbank und andere Elemente beziehen, die ich nicht einfügen kann.
– Denker
23. August 2014 um 17:27 Uhr
Radim Köhler
Basierend auf Kommentaren und aufgrund der Tatsache, dass @Thinkerer (das OP – Originalplakat) Ich habe einen Plunker für diesen Fall erstellt und beschlossen, eine weitere Antwort mit weiteren Details anzuhängen.
Hier ist ein Plunker, der von erstellt wurde @Denker
und wir brauchen ihre verkettete URL '/tab' + '/posts'. Das ist die URL, die wir als verwenden möchten Andernfalls
Der Rest der Anwendung kommt dem Ergebnis sehr nahe, das wir brauchen …
ZB müssen wir den Inhalt immer noch in dieselbe Ansicht targetgood platzieren, nur diese wurden geändert:
Wie ich bereits in meinen vorherigen Antworten und Kommentaren sagte … das $state.go() ist der einzig richtige Weg, wie man es benutzt ionic oder ui-router
Überprüfen Sie das alles hier Letzte Anmerkung – Ich habe nur die Navigation zwischen ausgeführt tab.posts… tab.newpost… der Rest wäre ähnlich
Danke vielmals! In der Tat, um Ihren Änderungen zu folgen und sowohl tab.posts als auch tab.newpost zu platzieren, um dieselbe Ansicht zu haben, und das Ganze funktioniert! Können Sie erklären, warum? Und wo soll ich die -Änderungen einfügen?
– Denker
24. August 2014 um 15:04 Uhr
Diese Lösung ist eine von vielen. Wir können es so machen, wie wir es getan haben, wenn Neu sollte sein ersetzen das Beiträge. Wir können aber auch zwei Bereiche mit unterschiedlichen Ansichtsnamen/Zielen erstellen (Geschwisteransichten). Oder wir können die verschieben Neu unter dem Beiträgeund dann nehmen wir an, ganz oben auf der Liste könnte ein Bereich stehen, in dem wir neue erstellen … während wir immer noch auf Beiträgen sind (tabs.posts.new)… und viele andere. Ich würde dringend empfehlen, hierher zu gehen: stackoverflow.com/a/20581135/1679310 und alle Links zu besuchen, die ich dort meistens erwähnt habe state.js. Bitte … das wird Ihnen sehr helfen, die wahre Kraft von zu erkennen ui-router. Genieß es 😉
– Radim Köhler
24. August 2014 um 15:09 Uhr
Der Übergang funktioniert, aber eine kurze Frage. Die Submit-Schaltfläche habe ich in ng-click=”submitPost()” geändert. Wenn ich auf „Senden“ klicke, komme ich zu meiner Anmeldeseite, aber der neue Beitragseintrag war fertig. Irgendeine Idee warum? Ich denke, es ist der URL-Router für sonst. Kann ich sagen, wenn Sie angemeldet sind, gehen Sie beim Senden zur Seite mit den Beiträgen?
– Denker
24. August 2014 um 15:25 Uhr
Wenn Sie nach dem Absenden zum Zustand tab.view wechseln möchten, müssen Sie es so aufrufen $state.go('tab.view', {postId: postId})… das ist es. Aber bitte langsamer. Bitte lesen Sie meine Links. Das wird helfen. und auch das: stackoverflow.com/a/21097886/1679310
– Radim Köhler
24. August 2014 um 15:34 Uhr
Verwenden <a> mit href statt a <button> löst mein Problem.
Genau das, was ich gesucht habe, danke. Auch für alle, die sich fragen <button> und <a> wird gleich aussehen, solange Sie die ionischen Klassen verwenden.
– alexkb
2. Juli 2015 um 5:08 Uhr
Radim Köhler
Ein Gedanke, den Sie ändern sollten, ist der Anruf $state.go(). Wie hier beschrieben:
Der übergebene Parameter sollte der Zustandsname sein
$scope.create = function() {
// instead of this
//$state.go("/tab/newpost");
// we should use this
$state.go("tab.newpost");
};
Einige zitieren aus doc (der erste Parameter zu des [$state.go(to \[, toParams\] \[, options\]):
zu
Zeichenfolge Absoluter Zustandsname oder relativer Zustandspfad
Der Name des Zustands, in den gewechselt wird, oder ein relativer Zustandspfad. Beginnt der Pfad mit ^ oder . dann ist es relativ, sonst ist es absolut.
Einige Beispiele:
$state.go('contact.detail') will go to the 'contact.detail' state
$state.go('^') will go to a parent state.
$state.go('^.sibling') will go to a sibling state.
$state.go('.child.grandchild') will go to a grandchild state.
Wenn Sie einfach zu einer anderen Seite wechseln möchten, benötigen Sie möglicherweise einen Link, der wie eine Schaltfläche mit einem href wie dem folgenden aussieht:
<a href="/#/somepage.html" class="button">Back to Listings</a>
Hoffe das hilft.
12414400cookie-checkAngularJS ng-click um zu einer anderen Seite zu gehen (mit Ionic Framework)yes
Versuchen Sie, die neu zu laden ganz Seite? Oder navigieren Sie einfach zu diesem Tab?
– manosim
23. August 2014 um 17:05 Uhr
Die App hat eine Navigationsleiste oben und eine untere Leiste. Die untere Leiste wird durch den Zustand „Tab“ dargestellt. Beim Klicken sollte es zur neuen Seite navigieren, während die Navigationsleiste und die untere Leiste bestehen bleiben.
– Denker
23. August 2014 um 17:08 Uhr
Wenn Sie uns eine zur Verfügung stellen können Codestift Link, dann wird es einfacher sein, Ihnen zu helfen.
– manosim
23. August 2014 um 17:19 Uhr
Nur um sicherzugehen, hast du meine Antwort überprüft? Ihr Problem kommt von ui-router, der Teil des ionischen Frameworks ist. Das $state.go muss richtig aufgerufen werden – mit einem Zustandsnamen, nicht mit der URL … hoffe, das hilft ein bisschen 😉
– Radim Köhler
23. August 2014 um 17:21 Uhr
@RadimKöhler Ich habe die Methoden $state.go und $window ausprobiert und beide hatten einen Cannot GET /tab/newpost-Fehler (wenn der HTML-Code einen ng-click=create() anstelle von ng-click(“tab.newpost”) hat Ich denke, es funktioniert einigermaßen.Wenn Sie $state.go verwenden, bin ich mir nicht sicher, wie ich es sonst zum Laufen bringen soll.Codepen funktioniert hier schlecht, da ich verschiedene Codes habe, die sich auf die Datenbank und andere Elemente beziehen, die ich nicht einfügen kann.
– Denker
23. August 2014 um 17:27 Uhr