zoukankan      html  css  js  c++  java
  • [ngx-formly] Use 3rd party Form Controls with Angular Formly / Custom type

    In a real form you'll most likely want to add some 3rd party form controls. For example autocomplete fields, date-time pickers etc. In this lesson we're going to see how to use ng-select and configure it s.t. it can be used within our Formly form.

    customs/ng-select.typs.ts:

    import { Component } from '@angular/core';
    import { FieldType } from '@ngx-formly/core';
    
    @Component({
      selector: 'formly-ng-select',
      template: `
        <div class="mat-input-infix mat-form-field-infix">
          <ng-select
            [items]="to.options | async"
            [placeholder]="to.label"
            [bindValue]="to.bindValue || 'value'"
            [formControl]="formControl"
            [class.is-invalid]="showError"
          >
          </ng-select>
        </div>
      `,
    })
    export class NgSelectFormlyComponent extends FieldType {}

    app.module.ts:

    import { BrowserModule } from '@angular/platform-browser';
    import { NgModule } from '@angular/core';
    
    import { AppComponent } from './app.component';
    import { ReactiveFormsModule, FormControl, ValidationErrors } from '@angular/forms';
    import { FormlyModule, FormlyFieldConfig } from '@ngx-formly/core';
    import { FormlyMaterialModule } from '@ngx-formly/material';
    import { BrowserAnimationsModule } from '@angular/platform-browser/animations';
    import { NgSelectModule } from '@ng-select/ng-select';
    
    import { SharedModule } from './shared/shared.module';
    import { NgSelectFormlyComponent } from './customs/ng-select.type';
    
    // global min error message, you can override by validation.messages.min in field
    export function minValidationMessage(err, field: FormlyFieldConfig) {
      return `Please provide a value bigger than ${err.min}. You provided ${err.actual}`;
    }
    
    export function ipValidationMessage(err, field: FormlyFieldConfig) {
      return `"${field.formControl.value}" is not a valid IP address`;
    }
    
    export function IpValidator(control: FormControl): ValidationErrors {
      return !control.value || /(d{1,3}.){3}d{1,3}/.test(control.value) ? null : { ip: true };
    }
    
    @NgModule({
      declarations: [AppComponent, NgSelectFormlyComponent],
      imports: [
        BrowserModule,
        SharedModule,
        NgSelectModule,
        ReactiveFormsModule,
        FormlyModule.forRoot({
          validators: [
            {
              name: 'ip',
              validation: IpValidator,
            },
          ],
          validationMessages: [
            {
              name: 'required',
              message: 'This field is required',
            },
            {
              name: 'min',
              message: minValidationMessage,
            },
            {
              name: 'ip',
              message: ipValidationMessage,
            },
          ],
          types: [
            {
              name: 'my-autocomplete',
              component: NgSelectFormlyComponent,
            },
          ],
        }),
        FormlyMaterialModule,
        BrowserAnimationsModule,
      ],
      providers: [],
      bootstrap: [AppComponent],
    })
    export class AppModule {}

    app.component.ts:

        {
          key: 'nationId',
          type: 'my-autocomplete',
          templateOptions: {
            label: 'Nation',
            options: this.dataService.getNations(),
          },
        },
  • 相关阅读:
    算法与设计模式
    Python开源应用系统
    ASP.NET MVC配置Redis服务
    常用3个框架
    Visual Studio 2015 编译错误 File 的值+乱码的解决方法
    SQL Server2008 R2命令行启动及停止SQL服务的方法
    Linux Shell查看物理CPU个数、核数、逻辑CPU个数
    SQL SERVER 2008R2 执行大脚本文件时,管理工具提示“内存不足”的解决方法
    MVC中未能加载程序集System.Web.Http/System.Web.Http.WebHost
    Windows10中启用原来的Windows照片查看器方法
  • 原文地址:https://www.cnblogs.com/Answer1215/p/12173001.html
Copyright © 2011-2022 走看看