2017-05-20 5 views
1

Stellen Ich habe drei Komponenten: componentA, componentB, componentC, und diese Komponenten verwendet werden, in meiner Hauptseite, auf Seite zu laden erhalte ich die Reihenfolge dieser Komponenten wie so:basierend auf Werten von Server zurück

{ 
    "componentA": 3, 
    "componentC": 2, 
    "componentB": 1 
} 

Wie kann ich setzen diese Richtlinien, um durch Server in meinem Haupt-Seite zurückgegeben:

<div class="container"> 
    <componentB></componentB> 
    <componentC></componentC> 
    <componentA></componentA> 
</div> 

Antwort

2

Sie können ein Array der Schlüssel sortiert erstellt:

var list = { 
    "componentA": 3, 
    "componentC": 2, 
    "componentB": 1 
} 

var listSorted = Object.keys(list).sort(function(a,b){return list[a]-list[b]}) 
console.log(listSorted) // ["componentB", "componentC", "componentA"] 

Dann können Sie ng-Schalter (https://docs.angularjs.org/api/ng/directive/ngSwitch) Während Verwendung ng-Repeat (https://docs.angularjs.org/api/ng/directive/ngRepeat) iterativ über das Array. Sie können Bedingungen für jede Komponente schreiben, um festzustellen, ob sie gerendert werden soll.

<div ng-repeat="componentName in $ctrl.listSorted track by $index" 
ng-switch="componentName"> 
    <componentA ng-switch-when="componentA">...</componentA> 
    <componentB ng-switch-when="componentB">...</componentB> 
    <componentC ng-switch-when="componentC">...</componentC> 
</div> 
+0

die Verwendung von 'ng-switch' verursacht keine Probleme mit Scopes? Stellen Sie sich vor, 'componentA' benötigt' listA', das sich im übergeordneten Controller befindet, ist es von innerhalb von 'ng-switch' zugänglich? – Rachmaninoff

+1

Übergeben Sie "listA" als Bindung an ComponentA? Das würde immer noch funktionieren – user2340824

+0

ja so etwas – Rachmaninoff

Verwandte Themen