У меня есть выпадающий список, в котором я хочу обновить значение, точнее, у меня есть два языка, и для каждого из них у меня есть эти элементы [name-for English и namecz для Czech], и если значение равно «English«для английского языка для чешского языка будет чешский, пока мне удалось показать список на каждом языке, даже чтобы выбрать правильное значение, моя проблема в том, что если я меняю язык, то выбранное значение остается прежним, не меняется.
Это похожий пример того, что я хочу получить.https://stackblitz.com/edit/angular-jfetuh?file=app%2Fselect-value-binding-example.html
это моя полезная нагрузка:
[{id: 19, name: "Travel Recreation and Leisure", nameCZ: "test19"},…]
0: {id: 19, name: "Travel Recreation and Leisure", nameCZ: "test19"}
1: {id: 20, name: "Wholesale and Distribution", nameCZ: "test20"}
2: {id: 1, name: "Agriculture and Mining", nameCZ: "test1", description: "hello"}
3: {id: 2, name: "Business Services", nameCZ: "test2"}
4: {id: 3, name: "Computer and Electronics", nameCZ: "test3"}
5: {id: 4, name: "Consumer Services", nameCZ: "test4"}
6: {id: 5, name: "Education", nameCZ: "test5"}
7: {id: 6, name: "Energy and Utilities", nameCZ: "test 6"}
8: {id: 7, name: "Financial Services", nameCZ: "test 7"}
9: {id: 8, name: "Government", nameCZ: "test 8"}
10: {id: 9, name: "Health, Pharmaceuticals, and Biotech", nameCZ: "test9"}
11: {id: 10, name: "Manufacturing", nameCZ: "test10"}
12: {id: 11, name: "Media and Entertainment", nameCZ: "test11"}
13: {id: 12, name: "Non-profit", nameCZ: "test12"}
14: {id: 13, name: "Other", nameCZ: "test13"}
15: {id: 14, name: "Real Estate and Construction", nameCZ: "test14"}
16: {id: 15, name: "Retail", nameCZ: "test15"}
17: {id: 16, name: "Software and Internet", nameCZ: "test16"}
18: {id: 17, name: "Telecommunications", nameCZ: "test17"}
19: {id: 18, name: "Transportation and Storage", nameCZ: "test18"}
ожидаемый результат : 19: {id: 18, name: "Transportation and Storage", nameCZ: "test18"}
, если язык английский, и у нас выбрано значение «Транспортировка и хранение»", и если я изменю язык, я хочу, чтобы выбранное значение было как-то переведено / выбрано" test18 "
В HTML у меня есть:
<div class="field-box">
<mat-form-field formGroupName="industry" *ngIf="language">
<input type="text" placeholder="Search for Industries " aria-label="Number" matInput
formControlName="searchIndustriesInput" [matAutocomplete]="industryAutoComplete">
<mat-autocomplete #industryAutoComplete="matAutocomplete" [displayWith]="displayIndustries.bind(this)"
(optionSelected)="industrySelected($event)">
<div *ngIf="showCurrentLang">
<mat-option *ngFor="let item of filteredIndustries | async" [value]="item">
{{item.name}}
</mat-option>
</div>
<div *ngIf="!showCurrentLang">
<mat-option *ngFor="let item of filteredIndustries | async" [value]="item">
{{item.nameCZ}}
</mat-option>
</div>
</mat-autocomplete>
<div
*ngIf="industryForm.controls.id.invalid && (industryForm.controls.id.dirty || industryForm.controls.id.touched)"
class="alert alert-danger">
<mat-error *ngIf="industryForm.controls.id.errors.required">Must fill this field</mat-error>
</div>
</mat-form-field>
</div>
</div>
и TS У меня есть
export class CustomerQuestionnaireComponent implements OnInit {
selectedValueEmployeeValue: string;
selectedValueIndustryValue: string;
selectedValueLanguageValue: string;
selectedValueAppsValue: string;
show: boolean;
showCurrentLang: boolean;
private language: string;
afterDisplayIndustries: boolean;
filteredIndustries: Observable<IIndustry[]>;
selectedApps: IAppIntegratedApp[] = [];
@ViewChildren(MatChip) children: QueryList<MatChip>;
form: FormGroup;
@Input() isLoading: boolean;
@Input() industries: IIndustry[];
@Input() errMsg: string;
@Input() updateMsg: string;
@Input() customerPreference: CustomerPreference;
@Input() avaliableLanguages: ILanguage[];
@Input() filteredApps: IAppIntegratedApp[];
@Output() searchApps: EventEmitter<string> = new EventEmitter<string>();
@ViewChild('auto') matAutocomplete: MatAutocomplete;
@ViewChild('searchAppInput') searchAppInput: ElementRef;
companySizeValues: IDataSourceOne[] = [
{ key: 'INDIVIDUAL', value: 'Individual(1)' },
{ key: 'MICRO', value: 'Micro(2-9)' },
{ key: 'SMALL', value: 'Small(10-49)' },
{ key: 'MEDIUM', value: 'Medium-sized(49-249)' },
{ key: 'BIG', value: 'Big(250+)' },
];
separatorKeysCodes: number[] = [ENTER, COMMA];
constructor(private fb: FormBuilder, private langService: LangService ,
private translate: TranslateService) {
this.langService.currentLang.subscribe((lang) => {
this.language = lang;
if (this.language === 'en') {
this.showCurrentLang = true ;
} else {
this.showCurrentLang = false ;
}
if (this.afterDisplayIndustries) {
this.displayIndustries((<FormGroup>this.form.controls.industry).value.searchIndustriesInput);
this.industrySelected();
}
});
}
get isFormReady() {
return this.avaliableLanguages !== undefined;
}
ngOnInit() {
this.buildForm();
this.toggleOtherIndustryField();
this.filteredIndustries = (<FormGroup>this.form.controls.industry).controls.searchIndustriesInput.valueChanges
.pipe(
startWith(''),
map(value => this.filter(value)),
);
}
private filter (value: string | IIndustry): IIndustry[] {
if (this.language === 'en') {
console.log(this.language);
if (value && (<IIndustry>value).name) {
return this.industries;
}
const filterValue = (<string>value).toLowerCase();
return this.industries.filter(option => option.name.toLowerCase().includes(filterValue));
}
if (value && (<IIndustry>value).nameCZ) {
return this.industries;
}
const filterValue = (<string>value).toLowerCase();
return this.industries.filter(option => option.nameCZ.toLowerCase().includes(filterValue));
}
displayIndustries (industry: IIndustry) {
if (industry) {
this.afterDisplayIndustries = true;
console.log((this.language === 'en') ? industry.name : industry.nameCZ);
return (this.language === 'en') ? industry.name : industry.nameCZ;
}
return undefined;
}
buildForm(): void {
this.form = this.fb.group({
industry: this.fb.group({
searchIndustriesInput: this.customerPreference.industry,
id: [this.customerPreference.industry.id, [
Validators.required,
]],
});
}
get industryForm(): FormGroup {
return this.f.industry as FormGroup;
}
get f() {
return this.form.controls;
}
industrySelected(e?) {
const industryForm = <FormGroup>this.form.controls.industry;
industryForm.controls.id.setValue(industryForm.controls.searchIndustriesInput.value.id);
this.toggleOtherIndustryField();
}
}
Есть ли кто-нибудь, как мне помочь, пожалуйста .. заранее спасибо.