首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用Angular10获取多个复选框值

使用Angular10获取多个复选框值
EN

Stack Overflow用户
提问于 2020-10-08 19:20:40
回答 2查看 100关注 0票数 0

app.component.html

代码语言:javascript
复制
<form #x="ngForm" (ngSubmit)="submit()">
    <div class="form-check form-check-inline">
            <input [(ngModel)]="details.a" #a="ngModel" type="checkbox" value="1">
            <label class="form-check-label" for="inlineCheckbox1">HELLO A</label>
        </div>
    <div class="form-check form-check-inline">
            <input [(ngModel)]="details.b" #b="ngModel" type="checkbox" value="2">
            <label class="form-check-label" for="inlineCheckbox1">HELLO B</label>
        </div>
    <div class="form-check form-check-inline">
            <input [(ngModel)]="details.c" #c="ngModel" type="checkbox" value="3">
            <label class="form-check-label" for="inlineCheckbox1">HELLO C</label>
        </div>

<button [disabled]="!x.valid" >Submit</button>

</form>

App.Component.ts

代码语言:javascript
复制
export class AppComponent implements OnInit {
details:{
    a:boolean,
    b:boolean,
    c:boolean
} = {
    a:null,
    b:null,
    c:null
}
constructor(){
}
submit(){
    console.log(this.details) //to get true or false if checked
 }  

我正在尝试获取状态和复选框的值,如果选中,我需要将值赋值给变量

示例:

如果检查1和3,变量x=1+3x=4

EN

回答 2

Stack Overflow用户

发布于 2020-10-08 19:31:30

在这里,Object.keys(详细信息)将给出对象中的键名为数组(作为"a“、"b”、“c”);

所以我们有一个数组,现在我们使用一个与for循环相同的map函数(i表示索引),x表示数组的第一项,因此在第一次运行时x将等于“a”(a是Object.keys(details)的第一个值)。现在,我们将检查对象中的第一个键是否包含与details"a“相同的值,因此如果值为true,则将i+1添加到总数中(从0开始)。

代码语言:javascript
复制
 let total = 0
    Object.keys(details).map((x,i)=>{
    if(details[x]){
     total = total + (i+1)
    
    }
    
    })
票数 0
EN

Stack Overflow用户

发布于 2020-10-08 19:46:48

构成部分:

代码语言:javascript
复制
export class AppComponent {
  details: Record<'a' | 'b' | 'c', boolean> = {
    a: false,
    b: false,
    c: false
  };

  public get xNumber(): number {
    const numbermap = { a: 1, b: 2, c: 3 };
    return Object.entries(this.details)
      // get only the entries with true value
      .filter(([_key, value]) => value)
      // map the keys having true to an array of numbers
      .map(([key]) => numbermap[key])
      // requred for preventing error from reduce if none selected `[].reduce()`
      .concat(0)
      // sum the numbers with reduce
      .reduce((prev = 0, curr) => prev + curr)
  }

  submit() {
    console.log(this.xNumber);
  }
}

模板:

代码语言:javascript
复制
<form #x="ngForm" (ngSubmit)="submit()">
    <div class="form-check form-check-inline">
        <input
          id="detailsA"
          name="a"
          [(ngModel)]="details.a"
          type="checkbox" />
        <label class="form-check-label" for="detailsA">HELLO A</label>
    </div>
    <div class="form-check form-check-inline">
        <input
          id="detailsB"
          name="b"
          [(ngModel)]="details.b"
          type="checkbox" />
        <label class="form-check-label" for="detailsB">HELLO B</label>
    </div>
    <div class="form-check form-check-inline">
        <input
          id="detailsC"
          name="c"
          [(ngModel)]="details.c"
          type="checkbox" />
        <label class="form-check-label" for="detailsC">HELLO C</label>
    </div>

    <button [disabled]="x.invalid" >
    Submit
  </button>
</form>

这个关于Stackblitz的例子

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64269297

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档