Angular5中提取公共组件之checkbox list
因为工作原因,需要使用到checkbox list多选项功能。
一直在尝试在checkbox组件中添加NgModel的属性,但是只能在单个checkbox复选框上使用,checkbox list就没办法了。
好吧,其实是想差了。
因为是对checkbox的div添加ngFor的循环,所以每个checkbox都相当于list中的item,直接在item的属性,多加一个checked就好了,然后使用选中的list时filter checked==true就好了。
checkbox-list.component.html
- 1 <div *ngIf="list" class="form-row">
- 2 <div class="col-{{colNum}} mb-2" *ngFor="let item of list">
- 3 <div class="form-check abc-checkbox abc-checkbox-primary">
- 4 <input class="form-check-input" type="checkbox" [value]="item.id" [(ngModel)]="item.checked" (change)="changeSelected()" id="{{name}}_{{item.id}}">
- 5 <label class="form-check-label" for="{{name}}_{{item.id}}">
- 6 {{item.name}}
- 7 </label>
- 8 </div>
- 9 </div>
- 10 </div>
checkbox-list.component.ts
- 1 import { Component, OnInit, Input, Output, EventEmitter } from '@angular/core';
- 2 import { CheckboxItem } from '../../model/checkbox';
- 3 import { NgModel } from '@angular/forms';
- 4 import { filter } from 'rxjs/operator/filter';
- 5
- 6 @Component({
- 7 selector: 'app-checkbox-list',
- 8 templateUrl: './checkbox-list.component.html',
- 9 styleUrls: ['./checkbox-list.component.css']
- 10 })
- 11 export class CheckboxListComponent implements OnInit {
- 12 @Input() list: CheckboxItem[];
- 13 @Input() name: string;
- 14 @Input() colNum: number = 6;
- 15 @Output("selectChange") onChange: EventEmitter<any> = new EventEmitter<any>();
- 16
- 17 constructor() { }
- 18
- 19 ngOnInit() {
- 20 }
- 21 changeSelected() {
- 22 let filters = this.list.filter(x => x.checked);
- 23 let ids = [] as any[];
- 24 for (var i = 0; i < filters.length; i++) {
- 25 ids.push(filters[i].id);
- 26 }
- 27
- 28 this.onChange.emit({ value: ids, name: this.name });
- 29 }
- 30 }
使用的时候,直接在module中添加引用:
- 1 import { NgModule } from '@angular/core';
- 2 import { CommonModule } from '@angular/common';
- 3 import { FormsModule } from '@angular/forms';
- 4
- 5 import { CheckboxListComponent } from '../components/checkbox-list/checkbox-list.component';
- 6 ......
- 7 export const routes = [
- 8 { path: '', component: OrderBuyDataComponent, pathMatch: 'full' }
- 9 ];
- 10
- 11
- 12 @NgModule({
- 13 imports: [FormsModule
- 14 , CommonModule
- 15 , ...],
- 16 declarations: [CheckboxListComponent
- 17 , ...],
- 18 providers: []
- 19 })
- 20 export class OrderModule {
- 21 static routes = routes;
- 22 }
因为写的比较仓促,所以一些代码还没整理好。