【问题标题】:Angular custom select component: binding selected optionAngular自定义选择组件:绑定选择的选项
【发布时间】:2020-09-30 15:19:37
【问题描述】:

我做了一个自定义选择,它隐藏了选择并在下拉菜单中选择一个项目。

但我无法将从下拉列表中选择的项目绑定到我选择的 html 元素。

自定义组件html

<div class="select">
  <select class="select-hidden" [(ngModel)]="selectedOption">
    <option *ngFor="let option of data" [value]="option.key">{{option.value}}</option>
  </select>

  <div class="select-styled" (click)="enableToggle()" [ngClass]="{'active' : toggle}">
    {{selectedOption.value}}
  </div>

  <ul class="select-options" [ngClass]="{'block' : toggle}">
    <li (click)="select(option)" *ngFor="let option of data" >{{option.value}}</li>
  </ul>
</div>

自定义组件 TS

import {Component, OnInit, Input} from '@angular/core';

export interface Option {
  key: number;
  value: string;
}

@Component({
  selector: 'alta-select',
  templateUrl: './alta-select.component.html',
  styleUrls: ['./alta-select.component.scss'],
  host: { 'class': 'alta-select' },
})
export class AltaSelectComponent implements OnInit {

  @Input() data: Option[] = [];
  toggle = false;
  selectedOption: Option;

  enableToggle = () => this.toggle = !this.toggle;

  select = (actualOption) => {
    this.enableToggle();
    this.selectedOption = actualOption;
  }

  ngOnInit(): void{
    this.selectedOption = this.data[0];
  }
}

您如何调用该组件((更改)不起作用,因为选择永远不会改变值,只有下拉列表会改变,这就是我要绑定的值

<alta-select [data]="options" (change)="changeTest($event)"></alta-select>

【问题讨论】:

    标签: angular data-binding selectedvalue


    【解决方案1】:

    将您的selectedOption 声明为输入和输出属性以便绑定到它。

    @Input() selectedOption: Option;
    @Output() selectedOptionChange = new EventEmitter<Option>();
    
    ...
    
    select = (actualOption) => {
        this.enableToggle();
        this.selectedOption = actualOption;
        this.selectedOptionChange.emit(this.selectedOption);
      }
    

    你可以通过双向绑定

    <alta-select [data]="options" [(selectedOption)]="mySelection"></alta-select>
    

    或者如果您只对更改事件感兴趣

    <alta-select [data]="options" (selectedOptionChange)="changeTest($event)"></alta-select>
    

    您可能还必须更改自定义选择中的值绑定。选项应该是值而不是键。

    [value]="option"
    

    【讨论】:

    • 非常感谢您的帮助,仍在尝试找出角度哈哈。您是否有额外的信息:“如果我做一个表格,如何获取该选择数据”? (获取表单提交上的选择数据)。
    • 我建议您阅读官方 Angular 教程angular.io/tutorial 只需几个小时,基本上涵盖了您入门所需了解的所有内容
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-01-20
    • 2018-09-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-07-12
    相关资源
    最近更新 更多