2
期待される動作:見出しのドロップダウンHTMLテーブル
クリックすると、その特定の見出しのためのサブコンテンツを開く必要があります。
現状:すべての見出しの見出しオープンサブコンテンツの
クリックします。
app.component.html
<ul *ngFor="let audience of mockAudiences | keysPipe">
<li (click)="toggleAudienceHeader(audience)" class="audience-type-th">
{{audience.key}}
</li>
<li>
<table *ngIf="showAudience" class="table">
<tbody>
<tr *ngFor="let data of audience.value">
<td></td>
<td>{{data.name}}</td>
<td>{{data.amount}}</td>
<td>
<input class="select-audience" type="checkbox" />
</td>
</tr>
</tbody>
</table>
</li>
</ul>
app.component.ts
import {Component} from '@angular/core';
import {bootstrap} from '@angular/platform-browser-dynamic';
@Component({
selector: 'material-app',
templateUrl: 'app.component.html'
})
export class AppComponent {
showAudience: boolean = false;
private version: any;
audience = { selected: false };
mockAudiences = [
{
'In-Market': [
{ 'name': 'Automobile Buyers', 'amount': '8392384' },
{ 'name': 'Automobile Buyers', 'amount': '8392384' },
{ 'name': 'Automobile Buyers', 'amount': '8392384' },
{ 'name': 'Automobile Buyers', 'amount': '8392384' },
{ 'name': 'Automobile Buyers', 'amount': '8392384' }
]
},
{
'Lifestyle': [
{ 'name': 'Automobile Buyers', 'amount': '8392384' },
{ 'name': 'Automobile Buyers', 'amount': '8392384' },
{ 'name': 'Automobile Buyers', 'amount': '8392384' },
{ 'name': 'Automobile Buyers', 'amount': '8392384' },
{ 'name': 'Automobile Buyers', 'amount': '8392384' }
]
}
];
constructor() {
}
toggleAudienceHeader(audience){
console.log("audience key:: ", audience.key);
this.showAudience = !this.showAudience;
}
}
keys.pipe.ts
import { Injectable, Pipe, PipeTransform } from "@angular/core";
@Pipe({name: 'keysPipe'})
@Injectable()
export class KeysPipe implements PipeTransform {
transform(array, args:string[]) : any {
let keys = [];
for (let obj in array) {
for (let key in array[obj]){
keys.push({key: key, value: array[obj][key]});
}
}
console.log("keys:: ", keys);
return keys;
}
}
main.ts
import {platformBrowserDynamic} from '@angular/platform-browser-dynamic';
import {BrowserModule} from '@angular/platform-browser';
import {BrowserAnimationsModule} from '@angular/platform-browser/animations';
import {NgModule} from '@angular/core';
import {CommonModule} from '@angular/common';
import {HttpModule} from '@angular/http';
import {AppComponent} from './app.component';
import {MaterialModule} from '@angular/material';
import { KeysPipe } from './keys.pipe';
@NgModule({
imports: [
BrowserModule,
CommonModule,
HttpModule,
MaterialModule,
BrowserAnimationsModule
],
declarations: [AppComponent, KeysPipe],
bootstrap: [AppComponent],
providers: []
})
export class PlunkerAppModule {}
platformBrowserDynamic().bootstrapModule(PlunkerAppModule);
Plunker:
http://plnkr.co/edit/U5Jk0sEpeKab4gv6J5nZ?p=info
ありがとうございます。これは私が探していたものに非常に近いものです。問題は、「In-Market」見出しが既に開いている間に(「Lifestyle」のために)をクリックすると、「In-Market」見出しが閉じられるということです。見出し1を開き、見出し1を閉じずに見出し2を開く方法はありますか? – absingharora
更新されたプランナーを確認してください。 – developer033
ありがとうございました。それはまさに私が必要としていたものです。 :) – absingharora