Angular 让我的手风琴动态响应?
我创建了一个accordion组件,它动态地填充父组件提供的值。我无法做到的是,每个手风琴都应该对各自的咔嗒声做出反应。目前,无论我点击哪个手风琴,它只会折叠并展开第一个。这是我的密码: 数组父.component.tsAngular 让我的手风琴动态响应?,angular,twitter-bootstrap,typescript,accordion,Angular,Twitter Bootstrap,Typescript,Accordion,我创建了一个accordion组件,它动态地填充父组件提供的值。我无法做到的是,每个手风琴都应该对各自的咔嗒声做出反应。目前,无论我点击哪个手风琴,它只会折叠并展开第一个。这是我的密码: 数组父.component.ts import { Component, AfterViewInit, OnInit } from '@angular/core'; @Component({ selector: 'my-array-parent', templateUrl: './array-
import { Component, AfterViewInit, OnInit } from '@angular/core';
@Component({
selector: 'my-array-parent',
templateUrl: './array-parent.component.html',
})
export class ArrayParentComponent implements OnInit {
private content: Test[];
ngOnInit(): void {
this.content = [{
heading: 'header1',
testData: [{
title: 'title1',
content: 'content1'
}, {
title: 'title2',
content: 'content2'
}]
}, {
heading: 'header2',
testData: [{
title: 'title1',
content: 'content1'
}, {
title: 'title2',
content: 'content2'
}]
}]
}
}
export class Test {
heading: string;
testData: TestItem[];
}
export class TestItem {
title: string;
content: string;
}
import { Component, Input, OnInit, AfterViewInit } from '@angular/core';
@Component({
selector: 'my-array',
templateUrl: './array.component.html'
})
export class ArrayComponent implements OnInit {
@Input() data: any;
private contentObj: any;
constructor() { }
ngOnInit(): void {
this.contentObj = this.data;
}
}
数组parent.component.html
<ng-container *ngFor="let item of content">
<my-array [data]="item"></my-array>
</ng-container>
<h2>{{contentObj.heading}}</h2>
<div class="columnOne" id="accordion" role="tablist" aria-multiselectable="true">
<div *ngFor="let item of contentObj.testData;">
<div role="tab" id="headingone">
<h4>
<a role="button" data-toggle="collapse" data-parent="#accordion" href="#collapseone" aria-expanded="true" aria-controls="collapseone">
{{item.title}}
</a>
</h4>
<div id="collapseone" class="panel-collapse collapse in" role="tabpanel" aria-labelledby="headingone">
<div class="panel-body">
{{item.content}}
</div>
</div>
</div>
</div>
</div>
array.component.html
<ng-container *ngFor="let item of content">
<my-array [data]="item"></my-array>
</ng-container>
<h2>{{contentObj.heading}}</h2>
<div class="columnOne" id="accordion" role="tablist" aria-multiselectable="true">
<div *ngFor="let item of contentObj.testData;">
<div role="tab" id="headingone">
<h4>
<a role="button" data-toggle="collapse" data-parent="#accordion" href="#collapseone" aria-expanded="true" aria-controls="collapseone">
{{item.title}}
</a>
</h4>
<div id="collapseone" class="panel-collapse collapse in" role="tabpanel" aria-labelledby="headingone">
<div class="panel-body">
{{item.content}}
</div>
</div>
</div>
</div>
</div>
{{contentObj.heading}
{{item.content}
我真正想做的是,每个手风琴只有在被点击时才会展开和折叠。目前,无论我点击哪个手风琴,只有第一个手风琴会展开和折叠。我知道这是因为它获得了一个静态ID。我尝试了一些可能的选项来为所有字段分配一个动态ID,但没有成功。非常感谢您的帮助。在数组组件中,您希望输入数组类型,但实际上您传递的是元素而不是数组:
<ng-container *ngFor="let item of content">
<my-array [data]="item" //Here the item is an object></my-array>
</ng-container>
尝试传递您的阵列:
<ng-container>
<my-array [data]="content" //Here the item is an object></my-array>
</ng-container>
您需要绑定引导依赖的属性以相应地切换div: 是:
- 面板标题:
,id
,href
aria控件
- 面板折叠:
,id
aria-labeledby
<div class="panel-heading" role="tab" [id]="'heading'+data.id">
<h4 class="panel-title">
<a role="button" data-toggle="collapse" data-parent="#accordion" [href]="'#collapse'+data.id" aria-expanded="true" [attr.aria-controls]="'collapse'+data.id">
{{data.header}}
</a>
</h4>
</div>
<div [id]="'collapse'+data.id" class="panel-collapse collapse" role="tabpanel" [attr.aria-labelledby]="'heading'+data.id">
<div class="panel-body">
{{data.content}}
</div>
</div>
{{data.content}
请注意,我们必须在aria属性前面加前缀,因为它们不是
&
的本机属性,谢谢大家的帮助@Zze我进一步利用了你的想法,得到了我想要的东西。这是我的代码,按照我的要求运行。在我的例子中,我有多个标题和多个手风琴对象
this.content = [{
heading: 'header1ds kfgdskg',
id: 1,
testData: [{
title: 'title1 ds;olfhsdjkl',
content: 'content1 sdkjfhdskj'
}, {
title: 'title2 asdlkgkf',
content: 'content2 dsaghfdsf'
}]
}, {
heading: 'header2 sdfdsfds',
id: 2,
testData: [{
title: 'title1 sdfdsfs',
content: 'content1 sdygfsdgf'
}, {
title: 'title2 bsdfdudtfsd',
content: 'content2 sdk;fgdsugkft'
}]
}]
}
将我的html代码更改为
<h2>{{contentObj.heading}}</h2>
<div class="columnOne" [id]="'accordion' + contentObj.id" role="tablist" aria-multiselectable="true">
<div *ngFor="let item of contentObj.testData; let i = index;">
<div role="tab" [id]="'heading' + contentObj.id">
<h4>
<a role="button" data-toggle="collapse" [attr.data-parent]="'#accordion' + contentObj.id"
[href]="'#collapse' + contentObj.id + i" aria-expanded="true" [attr.aria-controls]="'collapse' + contentObj.id + i">
{{item.title}}
</a>
</h4>
<div [id]="'collapse' + contentObj.id + i" class="panel-collapse collapse in" role="tabpanel" [attr.aria-labelledby]="'heading' + contentObj.id">
<div class="panel-body">
{{item.content}}
</div>
</div>
</div>
</div>
</div>
{{contentObj.heading}
{{item.content}
您使用的是正确的吗?您可能应该将其添加为标记(与您正在使用的版本相同的标记),并使其在您的问题中更加明显。请查看以下链接,这是我想要的方式,但如果其中任何项目有多个单词或有一个空格,我希望它们位于单独的标题下,则无法使用headings@CodeWarrior#折叠{{contentObj.heading}{{item.title}
所有这样的操作都是错误的。它需要#折叠为字符串。'#折叠'+{{contentObj.heading}}{{item.title}}