angular - Angular 8 + PrimeNG PanelMenu - 如何动态添加菜单项
问题描述
是否可以根据从数据库中获取的数据设置菜单项?
从“@angular/core”导入 {Component, OnInit};从'primeng/api'导入{MenuItem};
@Component({
selector: 'app-questionnaire',
templateUrl: './questionnaire.component.html',
styleUrls: ['./questionnaire.component.scss'],
})
export class QuestionnaireComponent implements OnInit {
items: MenuItem[];
constructor() {
}
ngOnInit() {
this.items = [
{
label: 'Environmental',
items: [
{
label: 'Question 1',
icon: 'pi pi-circle-on',
},
{
label: 'Question 2',
icon: 'pi pi-circle-on',
},
{
label: 'Question 3',
icon: 'pi pi-circle-on',
},
],
}, {
label: 'Social',
items: [
{
label: 'Question 4',
icon: 'pi pi-circle-on',
},
{
label: 'Question 5',
icon: 'pi pi-circle-on',
},
{
label: 'Question 6',
icon: 'pi pi-circle-on',
},
],
},
{
label: 'Governance',
items: [
{
label: 'Question 7',
icon: 'pi pi-circle-on',
},
{
label: 'Question 8',
icon: 'pi pi-circle-on',
},
{
label: 'Question 9',
icon: 'pi pi-circle-on',
}, {
label: 'Question 10',
icon: 'pi pi-circle-on',
},
],
},
];
}
}
和我的模板:
<div class="questionnaire questionnaire-container">
<div class="intro"></div>
<div class="content">
<div class="progress-bar">
PROGRESS BAR
</div>
<div class="side-menu">
<p-panelMenu [model]="items" [style]="{'width':'300px'}"></p-panelMenu>
</div>
<div class="questionnaire-content">
QUESTIONNAIRE CONTENT
</div>
</div>
</div>
我问你是因为我不知道是否可以在组件中做到这一点,而不是在我可以使用 *ngFor= 然后生成菜单项的模板中......如果不可能,那么我会找到其他一些库对于菜单...
解决方案
是的,有可能。
你只需要使用 Angular 的 http 客户端来请求你想要的数据,然后订阅它并将结果分配给this.items
.
最棘手的部分是将 API 中的数据格式化为 PrimeNG 菜单面板可以理解的格式。在下面的示例中,我调用了一个 API,该 API 返回给我一个可以直接分配给我的格式化项目this.items
:
ngOnInit() {
this.http
.get("https://express-demo-feat-test2-s8pihd.herokuapp.com/api/items")
.subscribe(data => (this.items = data as MenuItem[]));
}
这是stackblitz 演示
的链接
如果您需要在使用数据之前对其进行格式化,您可以执行以下操作:
ngOnInit() {
this.http
.get("https://express-demo-feat-test2-s8pihd.herokuapp.com/api/items")
.pipe(
map(data => {
// do some formatting
})
)
.subscribe(data => (this.items = data as MenuItem[]));
}
推荐阅读
- apache - 无法找到适当类型的密钥来解密 AP REP - 使用 HMAC SHA1-96 的 AES256 CTS 模式
- solidity - 如果 for 循环中的语句没有过滤掉可靠的项目
- google-cloud-platform - 使用数据流 JdbcIO api 写入云 sql
- php - 无法在 Android 中将 Json 数组转换为 Json 对象?
- javascript - 带 PHP 的 Stripe API 必须提供源代码或客户
- excel - Excel VBA - 运行宏时向每个引用的单元格添加一个
- php - 使用 Laravel 5.4 从 MySql 获取随机元素
- makefile - 是什么导致错误`make:Nothing to be done for 'xo'.`对于某些x?
- lambda - 使用lamda表达式java比较两个地图
- jquery - jQuery与移动菜单冲突