【问题标题】:Angular Input type radio doesn't recognize attributesAngular Input 类型的收音机无法识别属性
【发布时间】:2020-07-16 19:28:45
【问题描述】:

我有一个多输入表单,它们都是类型单选按钮。 我需要设置“必需”和“默认检查”属性,问题是 Angular 无法识别其中任何一个。 试图有一个默认的检查项目,我已经尝试过: 使用检查,检查=真,检查=“真”,[检查]=“真”,[检查]=“{1 ==1}”...

到目前为止,还没有任何工作。 “必填”也是一样。

也许我在 TypeScript 方面需要做些什么? 我正在使用 Angular 9,更具体的 @angular-devkit/core": "9.0.6"

这是我正在做的一个小例子:

import { Component, OnInit } from '@angular/core';

@Component({
  selector: 'app-tables',
  templateUrl: './perso.component.html',
  styleUrls: ['./perso.component.css']
})
export class PersoComponent implements OnInit {
    q1: number;
    
process() {
      console.log(this.q1);
      }
      
      }
<form>
                        <div class="row">
                            <p>1. I am the life of the party:</p>
                                <label><input type="radio" name="q1" value="1" [(ngModel)]="q1" required>Very Inaccurate</label>
                                <br><label><input type="radio" name="q1" value="2" [(ngModel)]="q1">Inaccurate</label>
                                <br><label><input type="radio" name="q1" value="3" [(ngModel)]="q1"  checked="true">Neither Accurate Nor Inaccurate</label>
                                <br><label><input type="radio" name="q1" value="4" [(ngModel)]="q1">Moderately Accurate</label>
                                <br><label><input type="radio" name="q1" value="5" [(ngModel)]="q1">Very Accurate</label>
{{'\nValue of q1: '+q1}}
                            <hr>
                        </div>
<button
                                type="submit"
                                class="btn btn-info btn-fill pull-right"
                                (click)="process()"
                        >Process</button>
                        <div class="clearfix"></div>
                    </form>

提前感谢您的帮助

【问题讨论】:

标签: html angular radio-button


【解决方案1】:

尝试使用[value] 代替值。

<form>
    <div class="row">
        <p>1. I am the life of the party:</p>
        <label>
      <input type="radio" name="q1" [value]="1" [(ngModel)]="q1" required #q1Answer="ngModel">
      Very Inaccurate</label>
        <br><label>
      <input type="radio" name="q1" [value]="2" [(ngModel)]="q1">
      Inaccurate</label>
        <br><label>
      <input type="radio" name="q1" [value]="3" [(ngModel)]="q1">
      Neither Accurate Nor Inaccurate</label>
        <br><label>
      <input type="radio" name="q1" [value]="4" [(ngModel)]="q1">
      Moderately Accurate</label>
        <br><label>
      <input type="radio" name="q1" [value]="5" [(ngModel)]="q1">
      Very Accurate</label>
        {{'\nValue of q1: '+q1}}
        <hr>
    </div>
    <button [disabled]="q1Answer.errors"
                                type="submit"
                                class="btn btn-info btn-fill pull-right"
                                (click)="process()"
                                [innerText]="(q1Answer.errors) ? 'Choose your answer' : 'Process'"
                        ></button>
    <div class="clearfix"></div>
</form>

【讨论】:

  • 谢谢。是的,我使用了 [value] = true 和 [value] = "true",不检查输入。而且我考虑在 onInit() 中给 q1 一个值,但这是 50 多个问题表单的一部分,所有这些问题都有点不切实际,而且这并不能解决无法将它们设置为的表单必填
  • @SilviaQuintela 值不是真或假。它应该是选项的值。例如:``` [value]="1" ``` 。您可以禁用该按钮,直到用户选择答案。我已经相应地更新了答案。检查一下。
  • 非常感谢!真的!起初我不明白这个建议,但我做了这个改变,它完全有效。再次感谢!
  • @SilviaQuintela 不客气。请将答案标记为正确。谢谢。
【解决方案2】:

问题在于ngModelvalue。您尚未为 q1 变量设置值,因此单选按钮 value 属性与 ngModel 中的值都不匹配,因此不应选中任何单选按钮。你必须在你的组件中给q1 一个值。同样重要的是要考虑,如果您在 html 中设置了类似 value="1" 的值,Angular 会将其解释为 string,因此 q1 也必须是组件中的字符串,例如 q1="1"。如果您需要将q1 设置为某个非字符串值,则必须在您的html 中使用[value]="non-string-value",例如[value]="1" (number)[value]="true" (boolean)

【讨论】:

  • 谢谢。一旦用户检查任何单选按钮,我在组件上读取 q1 值没有问题,并且我考虑在构造函数或 onInit() 中给 q1 一个值,但此示例显示了 50 多个问题之一表单,将它们全部初始化有点不切实际,而且这并不能解决表单无法将它们设置为必需
【解决方案3】:

您好,您似乎必须为要开始检查的那个设置第一个默认值并以这种方式使用指令 ngModel:


<input id="male" type="radio" class="custom-control-input" value="male" name="gender" [ngModel]="gender" required checked>
<label class="custom-control-label" for="male">Male</label>

<input id="female" type="radio" class="custom-control-input" value="female" name="gender" [ngModel]="gender" required>
<label class="custom-control-label" for="female">Female</label>

component.ts你可以初始化默认值

gender: string = "female";

这个sintax required 也可以工作。

我这里有代码:https://stackblitz.com/edit/angular-radio-buttons-demo-template-driven-form-utczgn

这是从这里分叉的:https://stackblitz.com/edit/angular-radio-buttons-demo-template-driven-form

【讨论】:

  • 感谢@Pedro de León。我已经访问了提供的链接,但结果上似乎没有可见的默认选中选项,即使在代码在输入行中提供了 attirbute checked 之后也是如此。我想这是一个Angular的事情。 PS。但所需的部分完全可以在那里工作
  • 现在它正在工作,我没有正确更新 mb。它的第一个链接:D
猜你喜欢
  • 2019-05-17
  • 2023-03-10
  • 1970-01-01
  • 1970-01-01
  • 2019-11-01
  • 2017-05-01
  • 1970-01-01
  • 2019-05-22
  • 1970-01-01
相关资源
最近更新 更多