У меня есть раскрывающийся список «Выбор матов» со следующими значениями из списка объектов.
export class Product {
productId: number;
productCode: string;
productDescription: string;
}
Список выбора матов предназначен для излучения всего объекта следующим образом:
<mat-form-field>
<mat-select formControlName="productData" [compareWith]="compareProductObjects"
<mat-option>Select</mat-option>
<mat-option *ngFor="let productItem of ProductList" [value]="productItem">
{{productItem.productDescription}}
</mat-option>
<mat-select>
</mat-form-field>
Также есть функция CompareWith; иногда код и описание могут незначительно отличаться в зависимости от различных систем ERP в компании, однако ID всегда одинаков, поэтому мы сравним это.
compareProductObjects(object1:any, object2:any) {
if (typeof object2 === 'object') {
return object1 && object2 && object1.productId === object2.productId;
}
В ProductList есть все реальные данные списка. Когда я исправляю форму, где у меня есть Класс продукта (где 2 - Мебель), я делаю Код и Описание пустыми для тестирования.
as
productTest.productId = 2;
productTest.productCode = null;
productTest.productDescription = null;
this.customer.form.patchValue({ productData: productTest});
Запустив это, вы исправите форму и успешно измените выпадающий элемент! Однако значение в поле выбора вывода из формы консоли отображается только как
{productData: {productId = 2}}
Не отображается ни Код, ни Описание; однако он успешно изменил элемент выбора мата без кода и описания.
Как мне сделать так, чтобы при исправлении формы только с идентификатором он изменял и выдавал реальный объект в списке?
Примечание:
Есть 30 других предметов в этой форме. Все остальное исправляется, текстовые поля, флажки, пытаясь предотвратить написание особых исключений для выпадающего списка, и хотят написать один свободный метод для других пользователей, если это возможно
this.customer.form.get('productData').setValue(this.ProductList.find(x=>x.id==2)