如何访问 PrimeNG autoComplete 的 'field' 属性内的数组元素
How to access array element inside 'field' attribute of PrimeNG autoComplete
我有一个 JSON 对象的列表,示例 1 在下面
[
{
id: 'cont-609',
contactMedium: [
{
characteristic: {
emailAddress: 'test@gmail.com'
}
}
]
}]
我的目标是在 PrimeNG autoComplete 属性 'field' 中访问 emailAddress (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" ,但这里的目标是显示电子邮件。
下面是link代码,如果你想访问实验:
https://stackblitz.com/edit/primeng-autocomplete-demo-dyihrs?file=src%2Fapp%2Fapp.component.html
更新
这是不可能的,因为 primeng 不接受字段作为数组的一部分。您可以在 autocomplete component and here, in the function used to resolve field
中查看此处的代码
---
Primeng 没有捕获 contactMedium 中的数组:
contactMedium[0].characteristic.emailAddress
我想 documentation 指的是一个没有数组的对象。
AutoComplete can also work with objects using the field property that defines the label to display as a suggestion.
作为替代方法,您可以操作对象以删除数组。
这是一个example,您可以确认使用 contactMedium 作为数组是行不通的。
我有一个 JSON 对象的列表,示例 1 在下面
[
{
id: 'cont-609',
contactMedium: [
{
characteristic: {
emailAddress: 'test@gmail.com'
}
}
]
}]
我的目标是在 PrimeNG autoComplete 属性 'field' 中访问 emailAddress (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" ,但这里的目标是显示电子邮件。
下面是link代码,如果你想访问实验:
https://stackblitz.com/edit/primeng-autocomplete-demo-dyihrs?file=src%2Fapp%2Fapp.component.html
更新
这是不可能的,因为 primeng 不接受字段作为数组的一部分。您可以在 autocomplete component and here, in the function used to resolve field
中查看此处的代码---
Primeng 没有捕获 contactMedium 中的数组:
contactMedium[0].characteristic.emailAddress
我想 documentation 指的是一个没有数组的对象。
AutoComplete can also work with objects using the field property that defines the label to display as a suggestion.
作为替代方法,您可以操作对象以删除数组。
这是一个example,您可以确认使用 contactMedium 作为数组是行不通的。