次のhtmlコードスニペットがあります。 angular2、ng-bootstrap ngタブを使用しています。私の質問は、タブがクリックされたときにメソッドクリックを呼び出す方法ですか?追加(クリック)しましたが、タブをクリックしてもfetchNews()メソッドがまったく呼び出されません。何が悪いのですか?
<ngb-tab title="Active" (click)="fetchNews('active')">
<ng-template ngbTabContent>
<table class="table table-sm table-striped">
<thead>
<tr>
<th>Title</th>
<th>Description</th>
<th>Attachment</th>
<th>Start Date</th>
<th>End Date</th>
<th>Actions</th>
</tr>
</thead>
<tr *ngFor="let item of news">
<td>{{item.title}}</td>
<td>{{item.description | Ellipsis:25}}</td>
<td>{{item.attachmentUrl | Ellipsis:25}}</td>
<td>{{item.startDate | date: 'MM/dd/yyyy hh:mm a'}}</td>
<td>{{item.endDate | date: 'MM/dd/yyyy hh:mm a'}}</td>
<td>
<button type="button" class="btn btn-secondary btn-sm" (click)="showNewsModal('active',item, true)">
Modify
</button>
</td>
</tr>
</table>
</ng-template>
</ngb-tab>
ngbTabTitle
テンプレートを宣言して、そこでクリックイベントをキャッチできます。
<ngb-tab>
<ng-template ngbTabTitle>
<div (click)="fetchNews('active')">Active</div>
</ng-template>
<ng-template ngbTabContent>
<table class="table table-sm table-striped" (click)="fetchNews('active')">
...
</table>
</ng-template>
<ngb-tab>
以下は毎回正しく動作するはずです。
fetchNews(evt: any) {
console.log(evt); // has nextId that you can check to invoke the desired function
}
<ngb-tabset (tabChange)="fetchNews($event)">
<ngb-tab title="Active">
<ng-template ngbTabContent>
<table class="table table-sm table-striped">
...
</table>
</ng-template>
</ngb-tab>
</ngb-tabset>
ngb-tabset
タグにtabChange
イベントを追加する必要がありますngb-tab
に一意のIDを設定します。htmlファイル
<ngb-tabset (tabChange)="changeTab($event)"> <- Add Event
<ngb-tab [id]="0"> <- SET ID
<ng-template ngbTabTitle>
</ng-template>
<ng-template ngbTabContent>
</ng-template>
</ngb-tab>
<ngb-tab [id]="1"> <- SET ID
<ng-template ngbTabTitle>
</ng-template>
<ng-template ngbTabContent>
</ng-template>
</ngb-tab>
</ngb-tabset>
。tsファイル
changeTab(event) {
if (event.nextId == '0') {
// Action for first tab
}
else if (event.nextId == '1') {
// Action for second tab
}
}
パーティーに遅れますが、クリックイベントが機能するためには、ngb-tabset(コードには表示されず、通常bootstrapタブにそのタグがあります)に設定する必要があります。 ngb-タブ上<ngb-tabset type="pills" id="myId" class="myClass" (click)="togglePanel($event)">
簡単な解決策::
以下のようにngbTabTitleを使用してくださいイベントをトリガーするここからコードのように
<ngb-tabset>
<ngb-tab >
<ng-template ngbTabTitle>
<div (click)="getTransactionList()">Transactions</div>
</ng-template>
<ng-template ngbTabContent >
<table class="custom-table">
<thead>
<tr>
<th>TransactionID</th>
<th>Sender</th>
<th>Recipient</th>
<th>Time</th>
<th>Amount</th>
</tr>
</thead>
<tbody>
<tr *ngFor="let Transaction of getTransactions | slice:0:10; let i=index">
<td>{{Transaction.id}}</td>
<td>{{Transaction.senderId}}</td>
<td>{{Transaction.recipientId}}</td>
<td>{{Transaction.timestamp}}</td>
<td>{{Transaction.amount}}</td>
</tr>
</tbody>
</table>
</ng-template>
</ngb-tab>
<ngb-tab>
// your code
</ngb-tab>
<ngb-tab>
// your code
</ngb-tab>
<ngb-tabset>
シンプルcssトリックこのように適用できます。 user1752112の回答を少し変更します。
<ngb-tab>
<ng-template ngbTabTitle>
<div style="padding: 8px 10px;" (click)="fetchNews('active')">Active</div>
</ng-template>
<ng-template ngbTabContent>
<table class="table table-sm table-striped" (click)="fetchNews('active')">
</table>
</ng-template>
<ngb-tab>
あなたのCSSファイルでこれを使用してください。
::ng-deep .nav-tabs .nav-link {
padding: 0 !important;
}