Прежде всего я хочу показать страны с этим каналом и отфильтровать их со вставленными символами, и мне нужны коды ISO, чтобы показать флаги стран.Проблема в том, что я хочу использовать библиотеку, в которой есть все страны с кодами ISO и прочим.Это имеет форму значения ключа.
Прежде всего я экспортирую эти данные в var, чтобы иметь возможность использовать эти данные.
export var indexedArray: { [key: string]: string }
countryStuff: Country; //currently not used
countries = [] as Array<string>
filteredCountries: Observable<string[]>;
export interface Country { //currently not used
[key: string]: string
}
ngOnInit() {
this.startDate.setFullYear(this.startDate.getFullYear() - 18);
this.buildForm();
this.filteredCountries = this.personalForm.controls['country'].valueChanges
.pipe(
startWith(''),
map(value => this._filter(value))
);
i18nIsoCountries.registerLocale(require("i18n-iso-countries/langs/en.json"));
i18nIsoCountries.registerLocale(require("i18n-iso-countries/langs/de.json"));
this.currentLanguage = this.translateService.currentLang;
indexedArray = i18nIsoCountries.getNames(this.currentLanguage);
for (let key in indexedArray) {
let value = indexedArray[key];
this.countries.push(value);
}
}
В html я могу использовать это так:
<mat-option *ngFor="let item of countryStuff | keyvalue:keepOriginalOrder" [value]="item.key">
Key: <b>{{item.key}}</b> and Value: <b>{{item.value}}</b>
</mat-option>
Нормальный способ, которым я также могу пользоваться, но полностью без ключевого значения и точно так же, как в примерах Angular (без логики TS):
<mat-option *ngFor="let option of filteredCountries | async" [value]="option">
<span class="flag-icon flag-icon-de flag-icon-squared"></span>
{{option}}
</mat-option>
Это просто дает мнеполное название страны, например, Алжир или что-то в этом роде.
Я нашел здесь идею https://long2know.com/2017/04/angular-pipes-filtering-on-multiple-keys/, но не смог ее изменить для своих целей.Это было бы еще лучше, если бы я мог фильтровать для ключ и значение , так что, возможно, "DE" для ключа и "Ger" для значения Германии.Это представляется невозможным для существующих каналов.
Редактировать по запросу (фильтрация):
private _filter(value: string): string[] {
var filterValue;
if (value) {
filterValue = value.toLowerCase();
} else {
filterValue = "";
}
return this.countries.filter(option => option.toLowerCase().startsWith(filterValue));
}
Также обновлено ngOnInit()