angular - 如何访问 PrimeNG 自动完成的“字段”属性内的数组元素
问题描述
我有一个 JSON 对象列表,其中 1 个示例如下
[
{
id: 'cont-609',
contactMedium: [
{
characteristic: {
emailAddress: 'test@gmail.com'
}
}
]
}]
我的目标是访问 PrimeNG 自动完成属性“字段”中的电子邮件地址(contactMedium[0].characteristic.emailAddress),以便我可以在下拉列表中显示电子邮件列表。
在contactMedium中总会有1个元素
下面是我的打字稿代码
import { Component, ViewChild } from '@angular/core';
import { MenuItem } from 'primeng/api';
import { SelectItem } from 'primeng/api';
import { SelectItemGroup } from 'primeng/api';
import { FilterService } from 'primeng/api';
import { AutoComplete } from 'primeng/autocomplete';
import { CountryService } from './countryservice';
@Component({
selector: 'app-root',
templateUrl: './app.component.html',
providers: [CountryService, FilterService]
})
export class AppComponent {
userDetails: any[];
selectedUserDetails: any[];
selectedValue: any;
selectedUserDetail: any;
constructor() {}
ngOnInit() {
this.userDetails = [
{
id: 'cont-609',
contactMedium: [
{
characteristic: {
emailAddress: 'test@gmail.com'
}
}
]
},
{
id: 'cont-610',
contactMedium: [
{
characteristic: {
emailAddress: 'test@gmail.com'
}
}
]
},
{
id: 'cont-611',
contactMedium: [
{
characteristic: {
emailAddress: 'test@gmail.com'
}
}
]
},
{
id: 'cont-612',
contactMedium: [
{
characteristic: {
emailAddress: 'test@gmail.com'
}
}
]
},
{
id: 'cont-614',
contactMedium: [
{
characteristic: {
emailAddress: 'test@gmail.com'
}
}
]
}
];
}
filterUserDetails(event) {
let filtered: any[] = [];
for (let val of this.userDetails) {
filtered.push(val);
}
this.selectedUserDetails = filtered;
}
getUserDetails(): Promise<any[]> {
return Promise.resolve(this.userDetails);
}
chooseItem(event) {
this.selectedUserDetail =
event.contactMedium[0].characteristic.emailAddress;
}
}
下面是我的 HTML 代码
<h5>Dropdown Testing</h5>
<p>selectedUserDetail : {{selectedUserDetail}}</p>
<p>TestVal : {{testVal}}</p>
<p-autoComplete [(ngModel)]="selectedUserDetail" [suggestions]="selectedUserDetails"
(completeMethod)="filterUserDetails($event)" [dropdown]="true" field="contactMedium">
<!--<ng-template let-userDetails pTemplate=" item">
<div>{{userDetails.contactMedium[0].characteristic.emailAddress}}</div>
</ng-template> -->
</p-autoComplete>
这部分属性不起作用,field="contactMedium[0].characteristic.emailAddress" 但如果我从不是数组的 json 中放置“id”,它可以工作field="id",但这里的目标是显示电子邮件。
如果您想访问实验,下面是代码的链接:
https://stackblitz.com/edit/primeng-autocomplete-demo-dyihrs?file=src%2Fapp%2Fapp.component.html
解决方案
更新
这是不可能的,因为primeng 不接受字段作为数组的一部分。您可以在自动完成组件和此处的用于解析字段的函数中检查代码
---
Primeng 没有捕捉到 contactMedium 中的数组:
contactMedium[0].characteristic.emailAddress
我想文档是指没有数组的对象。
AutoComplete 还可以使用定义标签显示为建议的字段属性来处理对象。
作为替代方案,您可以操作对象以删除数组。
这是一个示例,您可以确认使用contactMedium 作为数组不起作用。
推荐阅读
- javascript - 从 JSON 映射数据不能很好地解析
- java - 应用程序设置页面打开两次Android
- java - “mousePressed/mouseClicked”因任何原因无法正常工作
- c# - Jenkins NuGet 恢复 - 响应代码 500
- python - 如何在训练前解决不平衡的数据?
- r - 如何在 ggplot 图中嵌入图像并控制边距?
- sql - 从 Presto 中的 JSON 数组中提取值
- oracle - 计算一条语句或忽略它 PLSQL
- python - 如何比较列子集上两个数据帧之间的所有行匹配?
- django - Django,谷歌应用引擎,存储桶没有“访问控制允许来源”