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)">

İlgili makaleler