Я рассмотрел практически все другие проблемы, возникающие на этом сайте и на других сайтах, и ни одна из них не охватывает попытки установить по умолчанию нечто более сложное, чем одно значение.
У меня есть мульти-выбор, который я хочу показать выбранным для загрузки, через запятую.
this.settingControls = new FormGroup({
idsSelection: new FormControl(this.contentSettings.Ids)
});
<mat-option *ngFor="let item of availIds" [value]="item.id">
{{item | json}}
</mat-option>
В списке для выбора есть несколько полей, в то время как информация, которую я храню и извлекаю, имеет только идентификаторы для уменьшения вызовов API.
Список, сохраненный как availIds
, выглядит так:
const availIds = [
{id: 1, name : "somename", childId: 1, childName: "somechildname"},
{id: 1, name : "somename", childId: 2, childName: "somechildname"},
{id: 2, name : "somename", childId: 1, childName: "somechildname"},
{id: 2, name : "somename", childId: 2, childName: "somechildname"}
Итак, раньше я мог передать один массив чисел в new FormControl()
(см. Код для машинописи выше) и иметь значение в html, равное [value]="item.id"
. При загрузке будет показано выбранное значение, а не текст заполнителя. Загруженные идентификаторы будут содержать что-то вроде следующего:
this.contentSettings.Ids = [1, 2, 3];
Все как положено.
Теперь я хочу сохранить {id: 1, childId: 1}
или {'id': 1, 'childId': 1}
(это будет просто json на БД) и загрузить это в FormControl следующим образом:
this.settingControls = new FormGroup({
idsSelection: new FormControl(this.contentSettings.Ids)
});
<mat-form-field fxFlex>
<mat-select multiple placeholder="Ids" formControlName="idsSelection">
<!-- to check what value is actually being retrieved before it gets to typescript -->
<!-- <mat-select-trigger *ngIf="idsSelection; let value">
{{value | json}}
</mat-select-trigger> -->
<mat-option *ngFor="let item of availIds"
[value]="{id: +item.id, childId: +item.childId}">
{{item | json}}
</mat-option>
</mat-select>
</mat-form-field>
Загрузка в объекте {id: 1, childId: 1}
, который является именно тем значением, которое содержится при выборе опции, не делает значение по умолчанию {id: 1, name : "somename", childId: 1, childName: "somechildname"}
, которое мне нужно.
Может ли кто-нибудь пролить свет на то, как это будет сделано? Если он знает, что один числовой массив, который вводится, каким-то образом отображается на id, то как я могу получить его для сопоставления более сложного объекта? Это определенно не сделано по ссылке, потому что я ранее просто сохранил идентификаторы в число [].
Примечание. Чтобы все могли видеть, я добавил каналы json, чтобы показать, что я смотрю содержание того, что, по мнению html, спасло меня в предыдущих сеансах отладки, где я мог иметь пропущенный + или кавычки.