В моем приложении есть два компонента: «Добавить» и «Список».На странице добавления html есть mat-select, который загружает список из компонента ts, показывая «viewValue» и сохраняя в базе данных выбранное «значение».При перечислении сохраненных записей на странице «Список», мне нужно перезагрузить «viewValue» из сохраненного «значения», загруженного из базы данных.
В настоящее время мне это нужно для того, чтобы сделать мгновенный перевод показанного списка.
Вот код компонентов «Добавить» и «Список»:
// addArticle.component.ts:
export class AddArticleComponent implements OnInit {
public publicationsForm: FormGroup;
typePublications = [
{ value: 'report', viewValue: 'ADMIN.LAYOUT.ARTICLES.0.SELECT_OPTIONS.TYPE.REPORT' },
{ value: 'document', viewValue: 'ADMIN.LAYOUT.ARTICLES.0.SELECT_OPTIONS.TYPE.DOCUMENT' },
{ value: 'news', viewValue: 'ADMIN.LAYOUT.ARTICLES.0.SELECT_OPTIONS.TYPE.NEWS' },
{ value: 'tools', viewValue: 'ADMIN.LAYOUT.ARTICLES.0.SELECT_OPTIONS.TYPE.TOOLS' },
{ value: 'misc', viewValue: 'ADMIN.LAYOUT.ARTICLES.0.SELECT_OPTIONS.TYPE.MISC' },
];
}
// addArticle.component.html:
<mat-form-field class="full-width">
<mat-select name="type" [formControl]="publicationsForm.controls['type']" placeholder="{{ 'ADMIN.LAYOUT.ARTICLES.0.ADD_ARTICLES.TYPE' | translate }}" class="mb-1">
<mat-option *ngFor="let t of typePublications" [value]="t.value" ngDefaultControl>
{{ t.viewValue | translate }}
</mat-option>
</mat-select>
</mat-form-field>
// listArticles.component.ts
getItems() {
if (this.userData.type_user === "superAdmin {
this.api.getArticles().then(data => {
this.items = data;
});
} else if (this.userData.type_user === "admin") {
this.api.getArticlesByUser(this.idUser).then(data => {
this.items = data;
});
} else if (
this.userData.type_user !== "superAdmin" &&
this.userData.type_user !== "admin
) {
this.api.getArticlesByEntity(this.userData.entity.idEntity).then(data => {
let res: any = data;
let articles: any = [];
for (let i = 0; i < res.length; i++) {
if (res[i].status === true) articles.push(res[i]);
}
this.items = articles;
});
}
}
// listArticles.component.html:
<mat-card class="p-0" [@animate]="{value:'*',params:{y:'50px',delay:'300ms'}}" [dir]="translate.currentLang === 'ar' ? 'rtl' : 'ltr'">
<mat-card-content class="p-0">
<ngx-datatable class="material ml-0 mr-0" [rows]="items" [columnMode]="'flex'" [headerHeight]="50"
[footerHeight]="50" [limit]="10" [rowHeight]="'auto'" [messages]="{ emptyMessage: 'ADMIN.LAYOUT.ARTICLES.0.TABLE_FOOTER.NO_RESULTS' | translate, totalMessage: 'ADMIN.LAYOUT.ARTICLES.0.TABLE_FOOTER.RESULTS' | translate }">
<ngx-datatable-column [canAutoResize]="true" [flexGrow]="2">
<ng-template let-column="column" ngx-datatable-header-template>
<span>{{ 'ADMIN.LAYOUT.ARTICLES.0.TABLE_HEADER.TITLE' | translate }}</span>
</ng-template>
<ng-template let-row="row" ngx-datatable-cell-template>
{{ row?.title }}
</ng-template>
</ngx-datatable-column>
<ngx-datatable-column [canAutoResize]="true" [flexGrow]="1">
<ng-template let-column="column" ngx-datatable-header-template>
<span>{{ 'ADMIN.LAYOUT.ARTICLES.0.TABLE_HEADER.TYPE' | translate }}</span>
</ng-template>
<ng-template let-row="row" ngx-datatable-cell-template>
{{ row?.type }}
</ng-template>
</ngx-datatable-column>
Что я хотел бы сделать,в столбце типа что-то вроде (сохранение массива выбранной опции с ее значением и ViewValue в базе данных):
<ngx-datatable-column [canAutoResize]="true" [flexGrow]="1">
<ng-template let-column="column" ngx-datatable-header-template>
<span>{{ 'ADMIN.LAYOUT.ARTICLES.0.TABLE_HEADER.TYPE' | translate }}</span>
</ng-template>
<ng-template let-row="row" ngx-datatable-cell-template>
{{ row?.type.viewValue | translate }}
<!-- so i can show viewValue and then apply the translate pipe to it. I can't change the module to have a new table storing the selected object -->
</ng-template>
</ngx-datatable-column>