`
徜徉の小溪
  • 浏览: 447969 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

Angular 5 multiple checkbox 多项复选框 加载以及传值解决方案

阅读更多

Angular 5 multiple checkbox 多项复选框 加载以及传值解决方案

 

我们碰到FormControl 响应式表单中有多选列表的Checkboxs时,在加载和选中或不选中想动态双向绑定值以及页面显示会遇到一些问题。下面我们来深究一下解决方案。

 

接下来这段代码需要贴到在线js 调试工具 中去运行结果

将以下代码贴到这个地址 js调试工具的src/app.ts 文件中去

 

代码如下:

 

//our root app component
import {Component, NgModule} from '@angular/core'
import {BrowserModule} from '@angular/platform-browser'
import { Component } from '@angular/core';
import { FormControl, FormGroup, FormArray, FormBuilder, Validators } from '@angular/forms';
import { FormsModule, ReactiveFormsModule } from '@angular/forms';

@Component({
  selector: 'my-app',
  template: `

  <form [formGroup]="myForm" (ngSubmit)="save($event,myForm.value)">
      <div *ngFor="let data of emails">
          <input type="checkbox"  (change)="onChange(data.email, $event.target.checked)" [checked]="isChecked(data)"> {{data.email}}<br>
      </div>
      <span class="text-danger" *ngIf="useremail.invalid && (useremail.dirty || useremail.touched)">API类型至少选择一项! </span>
      <input type="text" formControlName="appkey">
       <span class="text-danger" *ngIf="appkey.invalid && (appkey.dirty || appkey.touched)">API类型至少选择一项! </span>
      <input type="text" formControlName="secret">
      <span class="text-danger" *ngIf="secret.invalid && (secret.dirty || secret.touched)">API类型至少选择一项! </span>
     <button type="submit" [disabled]="myForm.invalid">提交 </button>
  </form>

  <pre>Form values: {{myForm.value | json}}</pre>
    <pre>Form values: {{useremail.invalid | json}}</pre>
    <pre>Form values: {{useremail.status | json}}</pre>
    <pre>Form values: {{myForm.status | json}}</pre>
  `,
})
export class App {
    emails = [{email:"email1"},{email:"email2"},{email:"email3"},{email:'email4'}]
    myForm: FormGroup;
    selectEmails:Array<any>=[{email:"email1"},{email:"email2"}];
    constructor(private fb: FormBuilder) { }
  
    ngOnInit() {
      
      this.myForm = this.fb.group({
        useremail: this.fb.array([],[Validators.required,Validators.minLength(1)]),
        appkey:['',Validators.required],
        secret:['',Validators.required]
      });
      
      
     const emailFormArray = <FormArray>this.myForm.controls.useremail;
     this.selectEmails.forEach((em)=> {
        let index= emailFormArray.controls.findIndex(x=>x.value==em.email);
        if(index==-1){
           emailFormArray.push(new FormControl(em.email));
        }
     });
     this.myForm.patchValue({appkey:"sdfasdf",secret:"wwwww"});
    }
    
    isChecked(data:any):Boolean{
      return   this.selectEmails.find((item)=>{
         return  item.email==data.email
         
        });
    } 
    get useremail(){return this.myForm.get('useremail');}
    get appkey(){return this.myForm.get('appkey');}
     get secret(){return this.myForm.get('secret');}
    
    save($event,values){
      console.log("form values: %o",values);
    }
    
  
    onChange(email:string, isChecked: boolean) {
      const emailFormArray = <FormArray>this.myForm.controls.useremail;

      if(isChecked) {
        let index = emailFormArray.controls.findIndex(x => x.value == email);
        if(index==-1){
          emailFormArray.push(new FormControl(email));        
        }
        
      } else {
        let index = emailFormArray.controls.findIndex(x => x.value == email)
        emailFormArray.removeAt(index);
      }
  }

}

@NgModule({
  imports: [ BrowserModule, FormsModule, ReactiveFormsModule ],
  declarations: [ App ],
  bootstrap: [ App ]
})
export class AppModule {}

 

分享到:
评论

相关推荐

    CheckBox分级选中 复选框 上下级 联动

    通过`&lt;input type="checkbox"&gt;`创建一个复选框,用户可以勾选或取消以表示对某项内容的选择。我们可以为每个复选框设置一个`value`属性来标识其唯一性,以及一个`checked`属性来控制初始状态。 接下来,我们考虑...

    带复选框JS树,JS带复选框的列表,很好用

    在构建"带复选框的JS树"时,开发者通常会利用JavaScript来实现树的展开/折叠、复选框状态的同步以及与其他组件的交互等功能。 为了实现这个功能,开发者通常会使用现有的JavaScript库,如jQuery、Angular、React等...

    checkbox选中 全选 传值

    1. **Checkbox(复选框)**: 复选框是HTML中的一个表单元素,允许用户从多个选项中选择一个或多个。在HTML中,我们使用`&lt;input&gt;`标签来创建复选框,类型设置为"checkbox"。例如: ```html &lt;input type="checkbox...

    带有复选框的JS树状菜单

    4. **状态管理**:维护复选框的状态,通常采用递归或使用数据绑定库(如React、Vue或Angular)来实现父节点与子节点复选状态的联动。 5. **动画效果**:为了提升用户体验,可以添加展开/折叠节点的动画效果,这可以...

    带复选框的多级目录树,复选框的选择控制子节点父节点 全选和反选

    复选框是用户界面中常用的一种控件,它允许用户在多个选项中进行多选。在HTML中,`&lt;input type="checkbox"&gt;`元素用来创建一个复选框,用户可以勾选或取消勾选,通常配合`&lt;label&gt;`元素来提供描述文本。在JavaScript...

    angularjs实现的checkbox多选、全选、反选

    在本文中,我们将深入探讨如何使用AngularJS实现一个功能完备的复选框(checkbox)系统,包括多选、全选和反选功能。这个系统的一个关键特性是它完全基于AngularJS,无需依赖其他源数据,因此可以确保原始数据的完整...

    checkbox复选框状态保持

    在实际项目中,这个功能可能会结合React、Vue、Angular等前端框架实现,利用组件状态管理和生命周期钩子来处理复选框状态的保存和恢复,以及日期的验证。 对于提供的文件"checkbox",可能包含的是实现这一功能的...

    带复选框checkbox的tree

    在IT领域,尤其是在前端开发中,"带复选框checkbox的tree"是一种常见的用户界面元素,用于展示层次结构数据,并允许用户进行多级选择。这种组件通常被用于权限管理、目录浏览、数据分类等场景。下面我们将深入探讨与...

    checkbox的应用示例

    在IT领域,Checkbox(复选框)是一种常见的用户界面元素,广泛应用于网页、桌面应用程序以及移动应用中。Checkbox允许用户从多个选项中选择一个或多个,以表达他们的选择或者设置状态。本示例将深入探讨Checkbox的...

    js获取复选框选中项的值

    在探讨如何使用JavaScript(简称JS)来获取复选框(checkbox)选中项的值之前,我们首先需要理解复选框的基本概念以及它在网页表单中的作用。复选框是一种常用的HTML元素,用于允许用户从多个选项中选择一个或多个...

    easyui checkbox +全选

    标题 "easyui checkbox +全选" 指的是在网页界面设计中使用 EasyUI 框架实现复选框(checkbox)以及全选功能。EasyUI 是一个基于 jQuery 的前端框架,它提供了一系列预定义的 CSS 样式和 JavaScript 组件,帮助...

    复选框选中表格中的行进行删除行操作

    在IT领域,尤其是在Web开发和用户界面设计中,"复选框选中表格中的行进行删除行操作"是一项常见的功能需求。这个功能主要用于提供用户友好的数据管理方式,让用户能够批量选择并处理表格中的数据。下面我们将详细...

    上移下移及表格复选框获取

    这个标题和描述暗示了我们正在讨论一个Web应用程序,它具有用户界面元素,如表格、复选框以及上下移动功能。下面将详细阐述这些知识点。 1. **表格(Table)**: 表格是数据展示的常用方式,它由行(Row)和列...

    AngularJS单选、复选框

    复选框用于选取一个或多个选项。与单选按钮类似,复选框也可以通过`ngModel`指令进行双向数据绑定,`ngChecked`控制其选中状态。`ngTrueValue`和`ngFalseValue`可以自定义选中和未选中时对应的值。下面是一个复选框...

    angular-bootstrap-checkbox:AngularJS的复选框,其样式适合Twitter Bootstrap标准设计

    angular-bootstrap-复选框 AngularJS的复选框的样式适合Twitter Bootstrap标准设计 屏幕截图: 描述: 使用输入HTML元素的标准复选框与Bootstrap结合使用时看起来并不好。 令人惊讶的是,我找不到任何漂亮的,简单...

    js限制复选框选择个数

    本文将深入探讨如何使用JS限制复选框(checkbox)的选择个数,这是一个实用的功能,允许开发者自由定义用户最多可以选择多少个选项。 ### 核心知识点 #### 1. JS限制复选框选择个数的实现原理 在提供的代码片段中...

    dtree 带复选框

    在源码实现上,"dtree 带复选框"可能采用了JavaScript或者相关的前端框架(如React、Vue或Angular)来构建。它可能包括以下几个核心部分: 1. **数据模型**:定义树结构的数据对象,通常包括节点ID、文本、子节点...

    angular-sofa-checkbox:角沙发复选框组件

    角沙发复选框角沙发复选框组件安装通过 npm: $ npm install angular-sofa-checkbox 通过鲍尔: $ bower install angular-sofa-checkbox

    Angular实现一个简单的多选复选框的弹出框指令实例

    综上所述,这个实例展示了如何在Angular中创建一个复杂的交互式组件,结合了指令、数据绑定、事件处理以及CSS样式,实现了多选复选框的弹出框。这样的组件在实际开发中非常实用,能够为用户提供灵活且直观的界面。

    带复选框的TreeGrid

    综上所述,"带复选框的TreeGrid"是一种强大的数据展示工具,它结合了树形结构和表格的特性,并通过复选框增强了交互性。在实际应用中,开发者需要考虑数据绑定、事件处理、性能优化等多个方面,以构建出高效且用户...

Global site tag (gtag.js) - Google Analytics