簡體   English   中英

從html發送時TypeScript 2+中的枚舉值丟失

[英]Enums in TypeScript 2+ lost value when send from html

我有一個這樣定義的對象和枚舉:

export interface Character {
  name: string;
  side: Side;
}

export enum Side {
  All,
  Light,
  Dark
}

我在組件中使用此枚舉:

import { Component, OnInit } from '@angular/core';
import { Character, Side } from '../core';

@Component({
  selector: 'app-tabs',
  templateUrl: './tabs.component.html'
})
export class TabsComponent {
  chosenList = Side.All; // initial value set to 0

  characters = [
    { name: 'Luke Skywalker', side: Side.All }, // side is set to 0
    { name: 'Darth Vader', side: Side.All } // side is set to 0
  ];

  onChoose(side: Side): void {
    this.chosenList = side; // this line goes wrong set chosenList to string 'Side.All'
  }

  getCharacters(): Character[] {
    if (this.chosenList === Side.All) {
      return this.characters.slice();
    }
    return this.characters.filter((character) => {
      return character.side === this.chosenList;
    });
  }

  onSideChosen(charInfo: Character): void {
    const pos = this.characters.findIndex((char) => {
      return char.name === charInfo.name;
    });
    this.characters[pos].side = charInfo.side;
  }
}

我的html看起來像這樣。 問題出在(單擊)事件。 我將這樣的枚舉傳遞給我的組件,不幸的是我的組件將其解析為字符串。

<div id="tab-main" class="container">
  <ul class="nav nav-tabs">
    <li class="nav-item">
      <a [ngClass]="{active: chosenList === 'Side.All'}" class="nav-link" (click)="onChoose('Side.All')" style="cursor: pointer">All</a>
    </li>
    <li class="nav-item">
      <a [ngClass]="{active: chosenList === 'Side.Light'}" class="nav-link" (click)="onChoose('Side.Light')" style="cursor: pointer">Light</a>
    </li>
    <li class="nav-item">
      <a [ngClass]="{active: chosenList === 'Side.Dark'}" class="nav-link" (click)="onChoose('Side.Dark')" style="cursor: pointer">Dark</a>
    </li>
  </ul>
  <app-list [characters]="getCharacters()" (sideAssigned)="onSideChosen($event)"></app-list>
</div>

問題是,當我單擊按鈕“所有按鈕”時,將調用此行代碼

onChoose(side: Side): void {
    this.chosenList = side; // this line goes wrong set chosenList to string 'Side.All'
  }

但是當我比較這樣的價值

if (this.chosenList === Side.All)

它始終返回false,因為selectedList不再是枚舉,而是字符串。

我的問題是如何將枚舉從.html文件傳遞給.ts我知道我可以通過在html中發送0/1/2來解決此問題,但是這樣會使我失去可讀性...

  1. 聲明字段變量public Side = Side; 在組件中
  2. 從定義的文件導入Side
  3. 將模板引用更改為"{active: chosenList === Side.All}"

問題基本上是,在模板中,您無權訪問在組件外部定義的內容,尤其是如果必須先對其進行編譯的話

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM