Я использую директиву [displayWith] в моем автозаполнении mat. Это прекрасно работает, когда я вручную выбираю значения, но когда я перезагружаю страницу, я не получаю перевод. Параметр, необходимый для перевода, асинхронно загружается из параметров запроса в ngOnInit. Поэтому я полагаюсь на параметр async, но мой displayFunction () - это функция синхронизации. Как решить это?
Без функции [displayWith] все работает нормально, но без перевода (это просто отображение чистых значений, чего я не хочу). Поэтому я уверен, что остальная часть кода правильная.
Мой коврик-автозаполнение:
<mat-form-field [formGroup]="cityForm"
appearance="outline"
floatLabel="never"
color="primary">
<mat-icon matPrefix>location_on</mat-icon>
<input type="text" placeholder="{{ 'job_offer_search_bar.job-offer-search-bar-city-form.placeholder' | translate }}"
aria-label="Number" matInput
formControlName="cityControl" [matAutocomplete]="auto">
<mat-autocomplete #auto="matAutocomplete" (optionSelected)="onSelectionChanged($event.option.value)"
[displayWith]="displayFn.bind(this)">
<mat-option>
{{ 'job_offer_search_bar.job-offer-search-bar-city-form.all' | translate }}
</mat-option>
<mat-option *ngFor="let city of filtredCities | async" [value]="city">
{{ 'job_offer_search_bar.job-offer-search-bar-city-form.city' | translate:"{ city: '" + city +"' }"}}
</mat-option>
</mat-autocomplete>
</mat-form-field>
Мой дисплей с функцией ниже:
displayFn(val: string){
if (!val) return '';
let stringToReturn;
this.translate.get('job_offer_search_bar.job-offer-search-bar-city-form.city', {city: val}).subscribe(value => {
console.log('inside subscribe', value);
stringToReturn = value;
});
console.log('after sub', stringToReturn);
if (stringToReturn != undefined) {
return stringToReturn;
} else {
return 'Sorry, value has not been translated';
}
Console.log in subscribe
вызывается после console.log after subscribe
. Так что подписка производится после того, как я получу свой параметр для перевода, поэтому после моего возвращения
Мне нужен какой-то трюк или совет, чтобы передать переведенную строку в качестве возврата.
Я предполагаю, что есть способ сделать это. Любая помощь будет оценена.