Angular5中提取公共组件之radio list

上一篇说到了Checkbox List的公共组件提取,现在说一下Radio List的公共组件提取。

Radio List组件提取起来很方便,不想Checkbox那么复杂。

radio-list.component.ts

 1 import { Component, OnInit, Input, Output, EventEmitter } from '@angular/core';
 2 import { RadioItem } from '../../model/radio';
 3 import { NgModel } from '@angular/forms';
 4 
 5 @Component({
 6     selector: 'app-radio-list',
 7     templateUrl: './radio-list.component.html',
 8     styleUrls: ['./radio-list.component.css']
 9 })
10 export class RadioListComponent implements OnInit {
11     @Input() list: RadioItem[];
12     @Input() name: string;
13     @Input() colNum: number = 6;
14     @Input("selectModel") model: string;
15     @Output("selectChange") onChange: EventEmitter<any> = new EventEmitter<any>();
16 
17     constructor() { }
18 
19     ngOnInit() {
20 
21     }
22     changeSelected() {
23         let data = { value: this.model, name: this.name };
24         this.onChange.emit(data);
25     }
26 }

radio-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-radio abc-radio-primary">
 4             <input class="form-check-input" type="radio" [value]="item.id" [(ngModel)]="model" (change)="changeSelected()" name="{{name}}" 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>

在相关引用的module中注册

 1 import { RadioListComponent } from '../components/radio-list/radio-list.component';
 2 export const routes = [
 3     { path: '', component: xxxComponent, pathMatch: 'full' }
 4 ];
 5 
 6 
 7 @NgModule({
 8     imports: [...],
 9     declarations: [...
10         , RadioListComponent
11         , ...],
12     providers: []
13 })
14 export class xxxModule {
15     static routes = routes;
16 }

对应的html中引用如下:

1 <app-radio-list [list]="sourceArr"
2                 [name]="'selectedSource'"
3                 [colNum]="12"
4                 [(selectModel)]="selectedSource"
5                 (selectChange)="selectChange($event)">
6 </app-radio-list>

按照如上步骤,还缺少对应的selectChange($event):

1 selectChange(model: any) {
2     this[model.name] = model.value;
3 }

 

posted @ 2018-07-10 10:52  Jnetart  阅读(916)  评论(0编辑  收藏  举报