【问题标题】:How do I turn input type radio into select with options?如何将输入类型单选变成带选项的选择?
【发布时间】:2021-03-13 10:07:23
【问题描述】:

我有这个输入类型收音机:

<div *ngFor="let status of statuses; let i = index">
    <input (click)="editStatus(order, status)" type="radio" [checked]="order.status == status" 
         name="status" [value]="status">{{orderStatuses[status]}}
</div>

我把它变成了这个选择:

<select>
    <option *ngFor="let status of statuses; let i = index" name="status" [value]="status.value"
        [selected]="order.status == status" (change)="editStatus(order, status)">
        {{orderStatuses[status]}}
    </option>
</select>

但在那之后,函数“editStatus(订单,状态)”停止工作 - 没有做任何事情。我认为这是因为它没有在参数中获得正确的“状态”。如何解决?

ts 文件:

order: Order;
statuses = Object.keys(OrderStatus);
orderStatuses = OrderStatus;

ngOnInit() {
    this.subscribe = this.route.params.pipe(
      map(({ id }) => id),
      switchMap((id: string) => this.orderService.getOrderById(id)))
      .subscribe((res) => {
        this.order = res;
      });
  }
editStatus(order, status) {
    this.orderEdited = { order, status };
    this.orderService.editStatus(this.orderEdited).subscribe(
      res => {
        console.log(res);
      },
      err => console.log(err)
    );
  }

订单接口和枚举OrderStatus:

export interface Order {
  sum: number;
  items: {};
  status: string;
}

export enum OrderStatus {
  order_placed = 'placed',
  order_confirmed = 'confirmed',
  order_shipped = 'shipped',
  order_completed = 'completed',
  order_canceled = 'canceled',
}

【问题讨论】:

    标签: html angular typescript select


    【解决方案1】:

    您应该在选择元素上放置更改事件。

    <select (change)="editStatus($event.target.value,order)">
        <option *ngFor="let status of statuses; let i = index" name="status" [value]="status.value"
            [selected]="order.status == status" >
            {{orderStatuses[status]}}
        </option>
    </select>
    

    【讨论】:

    • 使用此解决方案,状态采用未定义的值:(
    • 您无法访问 ngFor 值外站选项标签
    • 那么如何解决呢?当我在里面移动“(更改)”时,它也不起作用。
    • 为什么要传递状态属性来改变事件?如果您试图获取选定的值,那么您可以使用 $event 对象来获取选定的值
    • 检查是否分配了正确的值属性==> [value]="status.value"
    猜你喜欢
    • 2016-11-30
    • 2020-07-05
    • 1970-01-01
    • 1970-01-01
    • 2022-01-24
    • 2018-11-03
    • 2013-04-22
    • 1970-01-01
    • 2019-01-06
    相关资源
    最近更新 更多