【发布时间】:2019-07-29 05:36:27
【问题描述】:
我在我的垫子自动完成中使用 [displayWith] 指令。当我手动选择值时它工作正常,但是当我重新加载页面时我没有得到翻译。翻译所需的参数从 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>
我的 displayWith 函数如下:
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 之后调用。所以订阅是在我得到我的翻译参数之后进行的,所以在我回来之后......
我需要一些技巧或技巧来将翻译后的字符串作为返回值传递。
我认为有办法做到这一点。任何帮助将不胜感激。
【问题讨论】:
标签: javascript angular typescript rxjs ngx-translate