2017-05-31 50 views
1

我想自動生成theadth,基於模板td如何通過在Angular 2中檢查TD來將TH添加到TABLE中?

<Datatable> 
    <tr #lineSelected *ngFor="let subscription of results"> 
     <td nameColumn="Nom">{{subscription.name}}</td> 
     <td nameColumn="Statut">{{subscription.status}}</td> 
     <td nameColumn="Origine">{{subscription.origin}}</td>       
     <td nameColumn="Date d'ajout">{{subscription.date}}</td> 
    </tr> 
</Datatable> 

現在:

<table>  
    <tbody> 
    <tr> 
     <td>name1</td> 
     <td>status1</td> 
     <td>origin1</td>        
     <td>date1</td> 
    </tr  
    <tr> 
     <td>name2</td> 
     <td>status2</td> 
     <td>origin2</td>        
     <td>date2</td> 
    </tr> 
    </tbody>  
</table> 

目標:

<table> 
    <thead> 
    <th>Nom</th> 
    <th>Statut</th> 
    <th>Origine</th> 
    <th>Date d'ajout</th> 
    </thead> 
    <tbody> 
    <tr> 
     <td>name1</td> 
     <td>status1</td> 
     <td>origin1</td>        
     <td>date1</td> 
    </tr  
    <tr> 
     <td>name2</td> 
     <td>status2</td> 
     <td>origin2</td>        
     <td>date2</td> 
    </tr> 
    </tbody>  
</table> 

這裏是我的component.ts

@Component({ 
    selector: 'Datatable', 
    template: ` 
     <table> 
      <ng-content></ng-content> 
     </table> 
    `, 
    styleUrls: ['./datatable.component.css'] 
    }) 
    export class DatatableComponent { 

    } 

我該怎麼做?

+0

你想在哪裏定義th內容? –

+1

@MarkusKollers感謝您的回答,您可以檢查我的編輯嗎? – Steffi

+0

我不知道你爲什麼要根據'td'自動生成'thead'和'th'。不知道默認情況下表中的列數? – Dimitri

回答

0

你的DataTable組件仍有改進的空間,但我可以在以後做到。 然而,爲了實現特定用例,你可以做的事情之一是:

一些-consumer.component.ts

這將是你在哪裏消費DataTable組件的組件。

@Component({ 
    selector: 'ConsumerComponent', 
    template: ` 
    <Datatable> 
    <tr> 
     <th *ngFor="let header of headers">{{ header }}</th> 
    </tr> 
    <tr #lineSelected *ngFor="let subscription of results"> 
     <td nameColumn="Nom">{{subscription.name}}</td> 
     <td nameColumn="Statut">{{subscription.status}}</td> 
     <td nameColumn="Origine">{{subscription.origin}}</td>       
     <td nameColumn="Date d'ajout">{{subscription.date}}</td> 
    </tr> 
    </Datatable> 
    `, 
}) 
export class ConsumerComponent implements OnInit { 
    public results = [{ 
    name: 'foo', 
    status: 'none', 
    origin: 'qux', 
    date: 'some-date-string' 
    }, { 
    name: 'baz', 
    status: 'nil', 
    origin: 'nil', 
    date: 'some-date' 
    }]; 
    public headers = [] as string[]; 

    ngOnInit() { 
    // If your result array comes from a service, you should have a check first. 
    this.headers = Object.keys(this.results[0]); 
    } 
} 

當然還有其他的方法可以做到這一點。

+0

感謝您的回答。是不是可以從「nameColumn」屬性生成th值? – Steffi

+0

我不相信這是可能的。如果你想有不同的表頭,你的對象鍵,有其他方法來做到這一點。如果您正在追求的情況下,我可以編輯我的答案。 – Umair

+0

這個想法是和AllenFang的Bootstrap React Table做同樣的事情 – Steffi

相關問題