typescript - Angular string enum parametre olarak nasıl çağrılır, görünümde
Bileşenimde bir string enum ve bir metodum var:
export enum Language {
de = 'de',
en = 'en'
}
setLang(lang: Language.en | Language.de) {
const curent = Language[lang]
}
Sonra bunu görünümde çağırmak istiyorum:
<button (click)="setLang('en')">
ama ng build --prod çalıştırdığımda bu hatayı alıyorum
Type '"en"' türündeki argüman, 'Language' türündeki parametreye atanamaz.
Bileşeni çağırmam gerekip gerekmediğini biliyorum, çağırmam gerekir.
setLang( Language.en) fakat
görünümde setLang'i nasıl çağırabilirim?
GÜNCELLE
Her şey bir yana, enum'umu bir özellik sınıfına referans olarak geçirmekten pek hoşlanmıyorum, bu yüzden belki bu daha iyi bir yaklaşım olabilir.
type LangKeys = keyof typeof Language;
function foo(lang:LangKeys) {
const curent = Language[lang]
}
foo('en')
Cevap #1
Böyle bir şey yapabilirsiniz:
Bileşen TS
import { Component } from '@angular/core';
export enum Language {
de = 'de',
en = 'en'
}
@Component({
selector: 'my-app',
templateUrl: './app.component.html',
styleUrls: ['./app.component.css']
})
export class AppComponent {
// Store a reference to the enum
language = Language;
setLang(lang: Language) {
const current = Language[lang];
console.log(current);
}
}
HTML dosyası
<button (click)="setLang(language.en)">click</button>
Umarım yardımcı olur!
Cevap #2
Sadece Bileşen Sınıfınızda bir özellik oluşturun:
import { Language } from './path-to-enum-file';
...
languageEnum = Language
setLang(lang: Language.en | Language.de) {
const curent = Language[lang]
}
Ve sonra şablonda bunu yapmayı dene:
<button (click)="setLang(languageEnum.en)">
