2016-07-08 4 views
1

Ich habe Probleme mit der Umgestaltung eines Gitters zu einem Tisch. Im aktuellen Raster habe ich zwei ng-Wiederholungen, um die korrekten Daten von einem Controller zu laden. Siehe unten:Wie benutzt man zwei ng-Wiederholungen in einer Tabellenzeile?

<div class="container-fluid"> 
<br/> 
<div class="row"> 
    <div class="col-xs-3"> <b>{{ 'title' | translate}}</b></div> 
    <div class="col-xs-2"><b>{{ 'date' | translate}}</b></div> 
    <div class="col-xs-3"><b>{{ 'time' | translate}}</b></div> 
    <div class="col-xs-2"><b>{{ 'EventState' | translate}}</b></div> 
    <div class="col-xs-2"></div> 
    <br/> 
    <br/> 
</div> 
<div class="row editEventTabs" ng-repeat="event in profileCtrl.user._events"> 
    <div ng-repeat="date in profileCtrl.eventDates(event, profileCtrl.user) "> 
     <div class="col-xs-3"><a href="/#/eventProfile/{{event._id}}/{{date}}">{{event.title}}</a></div> 
     <div class="col-xs-2">{{ date }}</div> 
     <div class="col-xs-3"><i>{{ event.start | date:'HH:mm' }} - {{ event.end | date:'HH:mm' }}</i></div> 
     <div class="col-xs-2">{{ event.eventStatus | translate }}</div> 
     <button class="col-xs-2 btn btn-default" ng-click="profileCtrl.unsubscribe(event, date)">{{ 'unSubscribe' | translate }}</button> 
     <br/> 
     <br/> 
    </div> 
</div> 

Die erste ng-Wiederholung wird die Ereignisse laden, und einige der Ereignisse wiederkehrend, so möchte ich die Ereignisse alle untereinander von einem wiederkehrenden Ereignis zeigen. Die zweite ng-Wiederholung lädt das Datum, das zu einem bestimmten Ereignis gehört.

Jetzt möchte ich dies in einer Tabelle, Refactoring, aber ich kann nicht herausfinden, wie die Daten aus den beiden in einer ng-Wiederholungen Tabellenzeile zu bekommen ..

ich wegen einiger Daten eine Tabelle benötigen Ich möchte sortieren/filtern, was momentan in einem Grid nicht möglich ist. (Wenn ich rechts)

UPDATE

Zunächst bedankt sich bei allen für die Antwort bereits. Die Ausgabe muss in etwa so aussehen: Lay out

So werden die Verknüpfung des Ereignisses und das Datum von den Controllern abgerufen.

UPDATE 2

Es arbeitet jetzt. Mit diesem Code:

<div class="container-fluid"> 

<table class="table"> 
    <tr> 
     <th> {{ 'title' | translate}} </th> 
     <th> {{ 'date' | translate}} </th> 
     <th> {{ 'startTime' | translate}} </th> 
     <th>{{ 'endTime' | translate }}</th> 
     <th> {{ 'state' | translate}} </th> 
     <th></th> 
    </tr> 

    <tbody ng-repeat="event in profileCtrl.user._events "> 
     <tr ng-repeat="date in profileCtrl.eventDates(event, profileCtrl.user) | orderBy: date " > 
      <td><a href="/#/eventProfile/{{event._id}}/{{date}}">{{event.title}}</a></td> 
      <td> {{date }} 
      </td> 
      <td> 
       {{ event.start | date:'HH:mm' }} 
      </td> 
      <td> 
       {{ event.end | date:'HH:mm' }}</td> 
      <td> 
       {{ event.eventStatus | translate }} 
      </td> 
      <td> 
       <button class="btn btn-default" ng-click="profileCtrl.unsubscribe(event, date)">{{ 'unSubscribe' | translate }}</button> 
      </td> 
     </tr> 
    </tbody> 
</table> 

Dank alle für die Hilfe!

+0

Wäre es nicht sinnvoller, 1. 'ng-repeat' Zeilen und die zweite Spalte (Zellen) zu bilden? –

Antwort

0

auf Ihr Event Objektstruktur Je sollten Sie eine Reihe von Terminen innerhalb jedes Objekt in profileCtrl.user._events haben:

 
{ 
    _id: 'your event id' 
    title: 'Sample title', 
    start: [Date Object], 
    end: [Date Object], 
    eventStatus: 'your event status', 
    dates: [ 
     [Date Object], 
     [Date Object], 
     [Date Object] 
    ] 
} 

Vorlage

<div class="container-fluid"> 
    <div class="row"> 
     <div class="col-xs-12"> 
      <table class="table table-striped"> 
       <thead> 
       <tr> 
        <th>{{ 'title' | translate}}</th> 
        <th>{{ 'date' | translate}}</th> 
        <th>{{ 'time' | translate}}</th> 
        <th>{{ 'EventState' | translate}}</th> 
       </tr> 
       </thead> 
       <tbody> 

       <!-- Iterating events --> 
       <tr ng-repeat="event in profileCtrl.user._events"> 
        <td> 
         {{event.title}} 
        </td> 
        <td> 
         <!-- Iterating event.dates --> 
         <ul ng-repeat="date in event.dates"> 
          <li> 
           {{date}} - 
           <a href ng-click="profileCtrl.unsubscribe(event, date)">{{ 'unSubscribe' | translate }}</a> 
          </li> 
         </ul> 
        </td> 
        <td> 
         {{ event.start | date:'HH:mm' }} - {{ event.end | date:'HH:mm' }} 
        </td> 
        <td> 
         {{ event.eventStatus | translate }} 
        </td> 
       </tr> 

       </tbody> 
      </table> 
     </div> 
    </div> 
</div> 
+0

Hallo amit, danke! Ihr Setup ist in der Tat sehr logisch. Leider habe ich nicht bei diesem Projekt angefangen und die Logik des Speicherns eines Events ist anders als deine. Das kann sich im Moment nicht ändern. Der 'profileCtrl.user._events' ist ein Verweis auf meine Mongochef-Datenbank. – Roy

+0

Sie müssen die Daten im Service (oder Controller) nach dem Abrufen aus der Datenbank aktualisieren, um die beste Struktur für Ihre Vorlage zu erhalten – amit

1

Erwarten Sie mit "profileCtrl.eventDates (event, profileCtrl.user)" re-Array mit einem Wert?

+0

Entschuldigung: Erwartest du mit "profileCtrl.eventDates (event, profileCtrl.user)" nur ein Array mit einem Wert? –

+0

Das "profileCtrl.eventDates (event, profileCtrl.user)" erhält das Datum für das spezifische Ereignis. Siehe Bild in aktualisierter Nachricht bitte. – Roy

1

Wenn Sie nur ein Array mit einem Wert abzurufen, müssen Sie nicht eine verschachtelte ng-repeat müssen. Sie können das gewünschte Datum mit ng-init abrufen.

<div class="container-fluid"> 

<table class="table"> 
    <tr> 
     <th> {{ 'title' | translate}} </th> 
     <th> {{ 'date' | translate}} </th> 
     <th> {{ 'startTime' | translate}} </th> 
     <th>{{ 'endTime' | translate }}</th> 
     <th> {{ 'state' | translate}} </th> 
     <th></th> 
    </tr> 

    <tbody> 
     <tr ng-repeat="event in profileCtrl.user._events" ng-init="date = profileCtrl.eventDates(event, profileCtrl.user)[0]"> 
      <td><a href="/#/eventProfile/{{event._id}}/{{date}}">{{event.title}}</a></td> 
      <td> {{date }} 
      </td> 
      <td> 
       {{ event.start | date:'HH:mm' }} 
      </td> 
      <td> 
       {{ event.end | date:'HH:mm' }}</td> 
      <td> 
       {{ event.eventStatus | translate }} 
      </td> 
      <td> 
       <button class="btn btn-default" ng-click="profileCtrl.unsubscribe(event, date)">{{ 'unSubscribe' | translate }}</button> 
      </td> 
     </tr> 
    </tbody> 
</table>