【问题标题】:Angular 2: CheckBox/Radio select deselect operationAngular 2:复选框/单选取消选择操作
【发布时间】:2016-09-23 18:16:11
【问题描述】:

我有一个年龄列表,我在其中迭代并创建无线电输入列表。然后,我选择其中一个并希望通过单击清除按钮取消选择它。如何使用 typescript 在 angular2 上实现。

<span *ngFor="let ageItem of ageList;">
    <input type="radio" name="age" value="{{ageItem}}"
           (click)="filter($event.target.value)">
        <span>{{ageItem}} years</span><br>
    </span>
<button md-button="" (click)="clearFilter()">Clear</button>

P.S:列表包含 100 个元素,因此将有 100 个复选框/单选框输入。请相应地提出建议。

【问题讨论】:

    标签: html angular


    【解决方案1】:

    您应该使用ngModel 进行双向数据绑定。

    变化检测可以通过(ngModelChange)..

    查看此工作演示:https://plnkr.co/edit/smMSiJnSXJQHOxW5Pi45?p=preview

    import {Component, NgModule} from '@angular/core'
    import {BrowserModule} from '@angular/platform-browser'
    import {FormsModule} from '@angular/forms'
    
    @Component({
      selector: 'my-app',
      template: `
        <div>
          <h2>Hello {{name}}</h2>
          <br />
          <div *ngFor="let radiobtn of options.radiobuttons">
            <h4>{{radiobtn.name}}</h4>
            <div *ngFor="let val of radiobtn.values">
              <input [name]="radiobtn.name" type="radio" [value]="val" [(ngModel)]="radiobtn.selection" (ngModelChange)="onChange()" />
              <label>{{val}} years</label>
            </div>
            <br />
            Selected: {{radiobtn.selection ? radiobtn.selection : 'none'}}
            <br />
          </div>
    
          <br />
          <br />
    
          <div *ngFor="let chkbx of options.checkboxes">
            <input type="checkbox" [(ngModel)]="chkbx.val" (ngModelChange)="onChange()" />
            <label>{{chkbx.name}}</label>
          </div>
          <br />
          <br />
    
          <div *ngFor="let inpt of options.inputs">
            <label>{{inpt.name}}</label>
            <input type="text" [(ngModel)]="inpt.val" (ngModelChange)="onChange()" />
          </div>
    
          <br />
          <br />
          <button (click)="reset()">reset!</button>
        </div>
      `,
    })
    export class App {
    
      options = {
    
        radiobuttons: [
          { name: 'ages1', values: [1,2,3,4,5,6,7,8,9], selection: undefined },
          { name: 'ages2', values: [65,66,68,90], selection: undefined }
        ]
    
        checkboxes: [
          { name: 'checkbox1', val: false },
          { name: 'checkbox2', val: false },
          { name: 'checkbox3', val: true },
          { name: 'checkbox4', val: false }
        ],
    
        inputs: [
          { name: 'input 1', val: '' },
          { name: 'input 2', val: 'aksjd' },
          { name: 'input 3', val: '' },
          { name: 'input 4', val: '' },
          { name: 'input 5', val: '123' }
        ]
      }
    
      name:string;
      constructor() {
        this.name = 'Angular2'
      }
    
      onChange() {
        // .. call filter(this.selectedAge)
    
        console.log(this.options);
      }
    
      reset() {
        this.options.radiobuttons.forEach(r => r.selection = false);
        this.options.checkboxes.forEach(c => c.val = false);
        this.options.inputs.forEach(i => i.val = '';
    
        this.onChange();
      }
    }
    
    @NgModule({
      imports: [ BrowserModule, FormsModule ],
      declarations: [ App ],
      bootstrap: [ App ]
    })
    export class AppModule {}
    

    【讨论】:

    • 那么复选框呢? onchange 将记录检查和取消检查事件。我如何跟踪用户是否选中或未选中。假设我在屏幕上有 100 个复选框/无线电输入。
    • 如前所述,我不能为 100 个复选框添加 100 个变量,也不能使用数组,因为我的值也是字符串。
    • 所以请更新您的问题,只有单选按钮的示例。解释您的用例以及您想要实现的目标。strings as well 如此正常的输入是什么意思?
    • 无法为您提供完整的、可复制/粘贴就绪的解决方案……只是为了让您了解如何操作。 :)
    • 再次查看我的更新答案,现在它包括收音机、复选框和文本输入。剩下的由你决定。 ;)
    猜你喜欢
    • 2023-04-04
    • 2017-05-20
    • 2018-04-11
    • 2021-03-22
    • 1970-01-01
    • 2020-07-14
    • 2018-08-29
    • 1970-01-01
    • 2019-05-13
    相关资源
    最近更新 更多