国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > JavaScript > 正文

angular基于ng-alain定義自己的select組件示例

2019-11-19 14:19:18
字體:
供稿:網(wǎng)友

1、首先是my-select2.component.html頁面,這里是在ng-alain的select基礎(chǔ)上根據(jù)業(yè)務(wù)需求添加新的功能;代碼如下:

<nz-select #select style="width:100%;" [(ngModel)]="selectedOption" [nzPlaceHolder]="myPlaceHolder" nzAllowClear [nzShowSearch]="true" [nzNotFoundContent]="'無匹配'">  <nz-option    *ngFor="let option of options"    [nzLabel]="option.label"    [nzValue]="option"    [nzDisabled]="option.disabled">  </nz-option></nz-select>

2、再者是my-select2.component.ts頁面,代碼里面有注釋;代碼如下:

import { ControlValueAccessor } from '@angular/forms/src/directives';import { Component, forwardRef, Input,OnInit,ElementRef,Output,EventEmitter} from '@angular/core';import { NG_VALUE_ACCESSOR } from '@angular/forms';import { Router, NavigationEnd } from '@angular/router';import { FormGroup, FormBuilder, Validators } from '@angular/forms';import { SelectService } from './my-select2.service';declare var $: any;@Component({ selector: 'nz-select2', templateUrl: './my-select2.component.html', providers: [      {      provide: NG_VALUE_ACCESSOR,      useExisting: forwardRef(() => NzSelect2Component),//注入表單控件      multi: true     }]})export class NzSelect2Component implements OnInit{  constructor(private selectService:SelectService) {   } innerValue: any = '';  //監(jiān)聽綁定的值,與外岑的ngModel相互綁定 set selectedOption(val:any){   if (val !== this.innerValue) {      this.innerValue = val;      this.onChangeCallback(val.value);      this.dataBack.emit(val.value); // 事件    } } get selectedOption():any{    return this.innerValue; } options = [];//接收select的數(shù)組  _dataSource:any;//接收本地的自定義數(shù)組或者請求返回的數(shù)組 @Input() url:any;//請求的url @Input() myPlaceHolder:any;//自定義的PlaceHolder @Input() //下拉框的數(shù)據(jù)格式  fieldKey:any = {    text: 'text',     value: 'value'  }; @Input()  set dataSource(val: any) {    this._dataSource = val;    if ($.isArray(this._dataSource)) {       this.options=this._dataTransform(this._dataSource);//如果是本地數(shù)組或直接請求的數(shù)組直接復(fù)制    }  }  get dataSource(): any {    return this._dataSource;  } @Output() dataBack = new EventEmitter<any>(); registerOnChange(fn: (value: any) => void) {    this.onChangeCallback = fn; } registerOnTouched(fn: any) {   this.onTouchedCallback = fn; }  writeValue(value: string) {  } onChangeCallback = (value: any) => {}; onTouchedCallback = (value: any) => {}; ngOnInit() {     //如果url存在則直接請求    if(this.url){      this.selectService.getValue(this.url).subscribe(data => {         data = data.rows || data.data;            this.options=this._dataTransform(data);      });    }    } //轉(zhuǎn)換下拉框下的字段  _dataTransform(data: Array<any>){    let _data = [];    for (let i = 0; i < data.length; i++) {     _data[i] = {};     _data[i].label = data[i][this.fieldKey.text];     _data[i].value = data[i][this.fieldKey.value];    }    return _data; }}

3、然后是my-select2.service.ts頁面,這里主要是請求后臺接口返回的下拉數(shù)組,url為父組件傳過來的鏈接,代碼如下:

import { Injectable } from '@angular/core';import { Headers, Http, URLSearchParams,RequestOptions } from '@angular/http';import { HttpClient, HttpErrorResponse } from '@angular/common/http';import 'rxjs/add/operator/toPromise';// import { environment } from '../../environments/environment';@Injectable()export class SelectService {  constructor(private http: HttpClient) {}  getValue(url: any):any{    return this.http      .get(url);     }}

4、然后是myselect.module.ts頁面,這里,使用該組件的前提是要引入 import { NzSelectModule } from 'ng-zorro-antd',代碼如下:

import { NgModule, ModuleWithProviders }    from '@angular/core';import { CommonModule }  from '@angular/common';import { FormsModule,ReactiveFormsModule } from '@angular/forms';import { NzSelect2Component } from './my-select2.component';import { SelectService } from './my-select2.service';import { NzSelectModule } from 'ng-zorro-antd';@NgModule({  imports: [    CommonModule,    FormsModule,    NzSelectModule,    ReactiveFormsModule  ],  exports:[    NzSelect2Component  ],  declarations: [    NzSelect2Component  ],  providers: [     SelectService  ]}) export class MySelectModule {  constructor() {  }}

5、使用方法,在你需要的模塊引入:MySelectModule

import { MySelectModule } from 'bizapp/base/components/myselect/myselect.module';

6、如何調(diào)用:url為請求后臺的接口,fieldKey為數(shù)組的格式,這里可以根據(jù)后臺返回來的格式定義這里的字段,如:后臺返回格式為[{dmsm1:5,dmz:5}]則fieldKey的定義如下,myPlaceHolder為初始化時顯示的內(nèi)容,如果是本地數(shù)組,則只需要加上[dataSource]="peer",這里的peer為本地數(shù)組

復(fù)制代碼 代碼如下:

<nz-select2  [url]="'analysis/api/data/code/list/030107'" [(ngModel)]="search2.hpzl" [fieldKey]="{text:'dmsm1',value:'dmz'}" [myPlaceHolder]="'號牌種類'"></nz-select2>

7、總結(jié):通過這個組件,我們只需要修改url和fieldKey就可以在任意模塊引入然后使用,減少代碼的使用,方便維護(hù)

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持武林網(wǎng)。

發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 靖州| 尼木县| 炉霍县| 乌鲁木齐县| 阳东县| 贺兰县| 信宜市| 江孜县| 商城县| 名山县| 萨迦县| 邵东县| 紫金县| 宁德市| 萝北县| 建德市| 洮南市| 孝义市| 仙居县| 淮南市| 黔西县| 将乐县| 田阳县| 大港区| 柘城县| 三明市| 苏尼特右旗| 天柱县| 固始县| 历史| 图木舒克市| 贡山| 通化县| 高台县| 金塔县| 平潭县| 海口市| 山东| 濉溪县| 林州市| 合作市|