AngularJS verschachtelte ui-view in eine ng-Wiederholung

7

Ich erstelle eine App mit der Spotify-API. Die App kann: 1. Finden Sie Alben nach Künstlernamen über ein Eingabefeld 2. Sobald die Alben angezeigt werden, kann der Benutzer auf den Titel des Albums klicken und die Titel dieses Albums sehen.

Ich habe 2 Ansichten erstellt: 1. die Albenansicht 2. Tracks anzeigen, Kind von Alben anzeigen.

Ich möchte die Titel-UI-Ansicht eines bestimmten angeklickten Albums - mit is ID - in die ng-Wiederholung des Albums zeigen. aber das Ergebnis ist, dass ich die selbe Titelliste des angeklickten Albums in allen Albumlisten habe. Wie kann ich die Track-UI-Ansicht des Albums in dem angeklickten Album-Container anzeigen, der das Ergebnis einer ng-repeat-Direktive ist?

hier der Code:

die Route:

%Vor%

Die Albumansicht:

%Vor%

Hauptalben Controller:

%Vor%

Der Titel-Controller:

%Vor%     
davelab 23.10.2014, 14:39
quelle

3 Antworten

11

Was du versuchst zu tun, ergibt keinen Sinn. Einem Bundesstaat können mehrere Ansichten zugeordnet sein, diese Ansichten müssen jedoch vordefiniert , nicht dynamisch generiert sein.

Es besteht ein Konflikt zwischen dem Code, in dem Sie statisch Ihre Nur eine Ansicht definieren :

%Vor%

und der Code, in dem Sie dynamisch ui-view mit ng-repeat generieren. Es gibt keine Logik, um zu sagen, auf welchen ui-view Sie Ihren HTML-Code laden können. In diesem Fall schlage ich vor, nur 1 ui-view zu haben, indem ich ihn aus ng-repeat verschiebe:

%Vor%

Oder wenn Sie es wirklich in ng-repeat einfügen müssen, versuchen Sie ng-if , um sicherzustellen, dass nur 1 ui-view angezeigt wird. (this is a workaround and not recommended)

%Vor%

und modifiziere deine MainCtrl ein bisschen, um $state zu injizieren, damit wir Zugriff darauf in der Ansicht haben:

%Vor%     
Khanh TO 07.02.2015 04:35
quelle
4

Leider macht das, was du versuchst, keinen Sinn. Was du damit sagst, ist: Wiederhole die Ansicht dieses Bundesstaates (Alben) so oft, wie viele Gegenstände es in den Sammelalben gibt. " Aber wenn du dann auf den Anker klickst, sagst du dem album.tracks state , um das Album mit der ID des Albums zu erhalten, auf das du geklickt hast. Dadurch wird der album.tracks-Status in jeder ui-view in der Albumansicht angezeigt (was Sie sehen).

Ein einzelner Status kann nicht mehrmals auf derselben Seite "instanziert" werden, wie Sie es hier versuchen. Siehe diese Frage für weitere Informationen: Does Angular JS unterstützt das Routing mehrerer Ansichten auf derselben Seite

Ich würde vorschlagen, dies auf eine andere Weise zu erstellen - vielleicht mit einer ng-Wiederholung mit ngInclude innerhalb, wenn Sie Ihre Vorlage getrennt halten müssen. Ansonsten ist es wahrscheinlich einfacher, das ganze Template auf einer Seite zu erstellen, ng-repeat für alle Alben und Tracks, dann alle auszublenden und jedes zu zeigen, wenn man mit ngHide / ngShow klickt.

    
Joshua Whitley 05.02.2015 22:29
quelle
3

Wenn Sie innerhalb einer ng-Wiederholung mehrere Ansichten erstellen müssen, wäre es dann besser, eine Direktive zu erstellen?

    
Raulucco 09.02.2015 14:34
quelle