2016-06-01 9 views
0

Ich habe ein Array (siehe unten), das ich ein bestimmtes Objekt durch Filterung durch Auswertung des Ergebnisses der comp_group Eigenschaft ziehen.Ziehen einer Eigenschaft aus einem gefilterten Array

Also, in der Ansicht:

<p>Standings array for this team: {{getStandings | filter: {team_id: "1"} }}</p> 

Und die getStandings Array sieht wie folgt aus:

  [ 
      { 
       "comp_group":"Group A", 
       "team_id":"1", 
       "team":"A", 
       "overall_w":"0", 
       "overall_l":"0", 
      }, 
      { 
       "comp_group":"Group A", 
       "team_id":"2", 
       "team":"B", 
       "overall_w":"0", 
       "overall_l":"0", 
      }, 
      { 
       "comp_group":"Group B", 
       "team_id":"3", 
       "team":"C, 
       "overall_w":"0", 
       "overall_l":"0", 
      }, 
      { 
       "comp_group":"Group B", 
       "team_id":"4", 
       "team":"D, 
       "overall_w":"0", 
       "overall_l":"0", 
      } 
     ] 

Dies zieht erfolgreich das erste Objekt aus dem Array (das mit team_id: 1).

Ich weiß jedoch nicht, wie die einzelnen Eigenschaften dieses Objekts in einem eckigen Ausdruck zugreifen.

My (unbefriedigend) Lösung:

Da das Ergebnis ist ein Array ein einzelnes Objekt enthält, meine aktuelle Lösung ist, für jedes Element mit dem Filter ng-repeat zu tun, und dann die Eigenschaft, ziehen aus, dass aber es ist sehr repetitiv und eindeutig nicht die beste Lösung.

sieht wie folgt aus:

<table> 
    <col width="210px"> 
    <col width=""> 
    <tr ng-repeat="teamstat in getStandings | filter: {team_id: whichMyteam} "> 
     <td><p>Games Played:</p></td> 
     <td><p>{{teamstat.overall_gp}}</p></td> 
    </tr> 
    <tr ng-repeat="teamstat in getStandings | filter: {team_id: whichMyteam} "> 
     <td><p>Wins:</p></td> 
     <td><p>{{teamstat.overall_w}}</p></td> 
    </tr> 
    <tr ng-repeat="teamstat in getStandings | filter: {team_id: whichMyteam} "> 
     <td><p>Draws:</p></td> 
     <td><p>{{teamstat.overall_d}}</p></td> 
    </tr> 
</table> 

Gibt es eine elegantere Möglichkeit, um dies zu?

+0

Können Sie zeigen, welche Tabellenformatierung Sie versuchen zu erreichen? –

Antwort

1

mit nur einem zu diesem Zweck ng-wiederholen Sie Ihre ng-Wiederholung auf einem tbody-Tag platzieren können

<table> 
    <col width="210px"> 
    <col width=""> 
    <tbody ng-repeat="teamstat in getStandings | filter: {team_id: whichMyteam} "> 
     <tr> 
      <td><p>Games Played:</p></td> 
      <td><p>{{teamstat.overall_gp}}</p></td> 
     </tr> 
     <tr> 
      <td><p>Wins:</p></td> 
      <td><p>{{teamstat.overall_w}}</p></td> 
     </tr> 
     <tr> 
      <td><p>Draws:</p></td> 
      <td><p>{{teamstat.overall_d}}</p></td> 
     </tr> 
    </tbody> 
</table> 
+0

Das hilft viel aufzuräumen, danke (überrascht habe ich nicht daran gedacht ...). Allerdings benutze ich immer noch ng-repeat, und es scheint nicht die richtige Situation zu sein, da sich nichts wiederholt. In meiner Situation muss ich nur auf diese Eigenschaften im Array zugreifen, und derzeit ng-repeat ist die einzige Möglichkeit, wie ich es mir vorstellen kann ... – Paulos3000

+0

ja ich verstehe. Für mich ist eine Wiederholung der richtige Weg, um das zu tun, was Sie erwarten, aber vielleicht ist es mehr der Render, den Sie gemacht haben. Table tag und ng-repeat können schwierig zu manipulieren sein. Für meine Apps habe ich div mit Bootstrap Tab CSS verwendet, um es den Benutzern zu rendern. –

0

Wenn Sie sicher sind, können Sie höchstens ein Objekt erhalten wird durch Filterung, dann können Sie die zuweisen gefiltertes Objekt zu einer Variablen.

Sie können ng-init in einer beliebigen Vorlage (vor dem Drucken aus einer Variablen) verwenden, um eine Variable mit dem gefilterten Objekt zu initialisieren.

Aber Initialisierung in Vorlage wie dies macht Code unlesbar und schwierig zu warten. Verwenden Sie daher anstelle der obigen Lösung den Filter im Controller und initialisieren Sie die Variable dort.

Controller:

$scope.teamstat = $filter('filter')($scope.getStandings, {team_id: "1"})[0]; 

Vergessen Sie nicht, $ Filter in Ihrem Controller zu injizieren.

Dann zeigen Sie Teamstat in der Ansicht.

<table> 
    <col width="210px"> 
    <col width=""> 

    <tr> 
     <td><p>Games Played:</p></td> 
     <td><p>{{teamstat.overall_gp}}</p></td> 
    </tr> 
    <tr> 
     <td><p>Wins:</p></td> 
     <td><p>{{teamstat.overall_w}}</p></td> 
    </tr> 
    <tr> 
     <td><p>Draws:</p></td> 
     <td><p>{{teamstat.overall_d}}</p></td> 
    </tr> 
</table>