【问题标题】:Create Ngx-Formly Custom Template for Radio Type为 Radio 类型创建 Ngx-Formly 自定义模板
【发布时间】:2018-12-12 07:45:46
【问题描述】:

如何在 ngx-formly 中创建自定义电台模板?

看过Ngx-Formly Guide for Custom Templates on FormlyField

虽然已经成功地为 input 创建了一个自定义模板,但我似乎无法在 radio

上实现它

目前,我是这样实现的:

FormlyFieldRadio

@Component({
  selector: 'formly-field-radio', 
  template: `
    <input type="radio" 
           [formControl]="formControl" 
           [formlyAttributes]="field">
  `,
   styles: [``]
})
export class FormlyFieldRadio extends FieldType {}

着陆模块

@NgModule({
  declarations: [
     ...
     FormlyFieldInput,
     FormlyFieldRadio
  ],
  imports: [
     ...
     FormlyModule.forRoot({
        types: [
           { name: 'input', component: FormlyFieldInput },
           { name: 'radio', component: FormlyFieldRadio }
        ]
     })
  ]
})
export class AppLandingModule {}

FormlyField 数据

const fields: FormlyFieldConfig[] = [
   ...,
   {
      key: 'gender',
      type: 'radio',
      templateOptions: {
        name: 'gender',
        options: [{ value: 'Male', key: 'M' }, { value: 'Female', key: 'F' }]
      }
  }
];

非常感谢任何建议/解决方案。谢谢。

【问题讨论】:

    标签: angular angular-formly


    【解决方案1】:

    有一个关于此事的现有Stackblitz Demo

    您可以通过在您的 FormlyFieldRadio 中填写相应的循环、分配和数据来实现自定义无线电模板。不仅仅是一个与 FormlyFieldInput 格式相同的简单输入类型元素

    FormlyFieldRadio

    @Component({
     selector: 'formly-field-radio',
     template: `
      <div *ngFor="let option of to.options">          
        <input type="radio" 
               [name]="to.name"
               [formControl]="formControl" 
               [formlyAttributes]="field"
               [value]="option.key">
        {{ option.value }}
      </div>
     `,
    })
    export class FormlyFieldRadio extends FieldType {}
    

    看来to, formControl and field 已经是保留的了 ngx-formly 中的变量,您可以根据我的解决方案受到启发的ngx-formly library radio file 使用这些变量。

    【讨论】:

    • +1 的评论告诉我要访问 templateOptions 配置变量,我需要使用一个名为“to”的变量。我在任何地方都找不到像这样的东西的直接文档。非常感谢!
    【解决方案2】:

    我认为您在 @NgModule 的声明中添加了不必要的内容。你应该很高兴这样做:

    import { NgModule } from '@angular/core';
    import { BrowserModule } from '@angular/platform-browser';
    import { ReactiveFormsModule } from '@angular/forms';
    
    import {FormlyModule} from '@ngx-formly/core';
    import {FormlyBootstrapModule} from '@ngx-formly/bootstrap';
    
    import { AppComponent } from './app.component';
    
    @NgModule({
      imports: [ 
        BrowserModule,
        ReactiveFormsModule,
        FormlyModule.forRoot(),
        FormlyBootstrapModule,
      ],
      declarations: [ AppComponent ],
      bootstrap:    [ AppComponent ]
    })
    export class AppModule { }
    

    在你的组件类中:

    import { Component } from '@angular/core';
    import { FormGroup } from '@angular/forms';
    import { FormlyFieldConfig } from '@ngx-formly/core';
    
    @Component({
      selector: 'my-app',
      template: `
        <h3>@ngx-formly/bootstrap</h3>
        <form [formGroup]="form" (ngSubmit)="submit(model)">
          <formly-form [model]="model" [fields]="fields">
            <button type="submit" class="btn btn-default">Submit</button>
          </formly-form>
        </form>
      `,
    })
    export class AppComponent {
      form = new FormGroup({});
      model = { email: 'email@gmail.com' };
      fields: FormlyFieldConfig[] = [
        {
          key: 'email',
          type: 'input',
          templateOptions: {
            type: 'email',
            label: 'Email address',
            placeholder: 'Enter email',
            required: true,
          }
        }, {
          key: 'gender',
          type: 'radio',
          templateOptions: {
            type: 'radio',
            label: 'Gender',
            required: true,
            name: 'gender',
            options: [{ value: 'Male', key: 'M' }, { value: 'Female', key: 'F' }]
          }
        }
      ];
    
      submit(user) {
        console.log(user);
      }
    }
    

    这里有一个Working Sample StackBlitz 供您参考。


    注意:我正在使用 UI-Bootstrap 模块进行集成。

    【讨论】:

    • 嗨 sidd,感谢您的帮助,但目前我没有使用 ngx-formly/core 和 ngx-formly/bootstrap 的默认模板。相反,我尝试使用我自己的 css 和模板结构来实现一个自定义模板,与我的表单字段样式相关,并且还阅读了这个 ngx-formly 自定义模板文档,尽管这里没有记录收音机 formly-js.github.io/ngx-formly/guide/custom-formly-field
    猜你喜欢
    • 2020-09-24
    • 2021-01-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-11-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多