【问题标题】:Angular2 how to know if an input is of type radio with reactive formsAngular2如何知道输入是否是具有反应形式的无线电类型
【发布时间】:2018-04-26 04:55:50
【问题描述】:

我正在以角度构建反应形式。我有一个带有性别名称的简单单选按钮:

this._form = this._formBuilder.group({
            gender: ['', Validators.required]
        });

模板:

            <div class="form-group">
                <h4>What is your gender?</h4>
                <div class="form-group">
                    <label class="custom-control custom-radio">
                        <input value="male" name="gender" type="radio" class="custom-control-input" formControlName="gender">
                        <span class="custom-control-indicator"></span>
                        <span class="custom-control-description">Male</span>
                    </label>
                    <label class="custom-control custom-radio">
                        <input value="female" name="gender" type="radio" class="custom-control-input" formControlName="gender">
                        <span class="custom-control-indicator"></span>
                        <span class="custom-control-description">Female</span>
                    </label>
                    <app-field-error-display [displayError]="formValidationService.IsFieldInvalid(_form,'gender','required')" errorMsg="Field is required"></app-field-error-display>
                </div>
            </div>

我可以像这样按名称访问控制字段:

public GetControl(form: FormGroup, field: string){
        return form.get(field);
    }

基于此如何访问type="radio"的属性值?我想知道输入控件是否属于无线电类型。

【问题讨论】:

  • 也许只检查字段名? :D 所以,如果 field == 'gender' 那么它就是一台收音机。很简单,或者你想要更通用的东西?
  • 一般是的,因为我可能有 10 多个单选按钮。

标签: angular angular-reactive-forms


【解决方案1】:

您可以通过在组件中使用此代码来访问该值

let genderValue = this._form.value.gender;

【讨论】:

  • 我不是在询问输入的值,而是在询问如何检查输入的类型。如何从输入 type="radio" 中获取“radio”,也就是属性值。
  • [value]="radioItems1" in input tag and radioItems0 = { value: "0"} in component
  • 再次我想访问输入类型属性值,而不是值
  • @sensei 你真的应该更好地表述你的问题,因为你在问题中说“价值”。
  • @Enrico 我来晚了,但我更新了标题,希望谷歌快点刷新
【解决方案2】:

一个简单的,也提供intellisense

打字稿

// declare a form with properties i.e. name
this.form = this.formBuilder.group({
    name: ['', Validators.required]
});

// create getter for form-property i.e.
get Name(): AbstractControl {
     return this.form.get('name')
}

HTML

<input type="text" [formControl]="Name">

{{Name.value}} // your can see your input name here

【讨论】:

  • @MehdiBenmoha 他问我怎么知道输入类型是使用反应形式的无线电。我只是提出了轻松访问响应式表单字段值的想法。通过价值,他可以识别它是无线电还是其他东西。
【解决方案3】:

编辑:这无法使用响应式表单解决,但您可以使用动态表单:https://angular.io/guide/dynamic-form

以下是肮脏的解决方法(不推荐):

在 Angular 中使用原生 JS 而不是一个好的做法,因为您会丢失很多 Angular 功能,但如果您只是在这里寻找快速而肮脏的解决方案,那就是:

public GetControl(form: FormGroup, field: string){
    let el = document.querySelector('input[name="'+field+'"]');
    if(el.getAttribute('type') == 'radio'){
        // This is a radio input
    }
    return form.get(field);
}

【讨论】:

  • 是的,我读到这比使用原生更不可能,除非使用自定义渲染器,并且 refelement 不安全。谢谢
  • 这不是 Angular 要走的路。使用 form.control 或 form.value 属性。
  • @enne87 请阅读 OP 问题,他想获取输入类型值而不是输入值,这是在 2017 年使用 Angular 2,最后,如果您有更好的方法来满足该需求我正在服用。
猜你喜欢
  • 1970-01-01
  • 2017-02-11
  • 2017-09-06
  • 1970-01-01
  • 2010-12-19
  • 1970-01-01
  • 2021-05-19
  • 2016-11-28
  • 1970-01-01
相关资源
最近更新 更多