【问题标题】:On prefetch radio button does not get checked未选中预取单选按钮
【发布时间】:2018-01-02 22:05:52
【问题描述】:
  1. 我需要 [(ngModel)]="salutation" #salutation="ngModel" 进行验证,这会阻止我的单选按钮在加载时被选中

  2. compareOptions() 返回 true

  3. 使用版本 angular4.1.2

    <app-validation-message [validation-control]="salutation">
          <app-styled-input [title]="'Male'" >
            <div  class="custom-radio" >
              <input id="female" name="salutation" type="radio" [value]="options[0].id"  [checked]="this.compareOptions(options[0]))"
                    [required]="required" [(ngModel)]="salutation" #salutation="ngModel">
              <label for="female"><span></span>{{options[0]['title']}}</label>
            </div>
            <div  class="custom-radio margin-left-10" >
              <input id="male" name="salutation" type="radio" [value]="options[1]"
                     [checked]="this.compareOptions(options[1])"
                    [required]="required" [(ngModel)]="salutation" #salutation="ngModel">
              <label for="female"><span></span>{{options[1]['title']}}</label>
            </div>

          </app-styled-input>
        </app-validation-message>    

组件:

    compareOptions(obj:any){     
         return obj.id===this.personalData.salutation.id;
       }

【问题讨论】:

  • 作为旁注,请避免在模板中调用方法,它们会在每次角度运行变化检测时触发,这可能经常。改用模板中的变量:)

标签: angular typescript radio-button


【解决方案1】:

尝试将[attr.checked]="true" 添加到您的单选按钮,它非常适合我。

【讨论】:

    【解决方案2】:

    我建议您迭代您的 options 而不是长手编写模板。正如我在评论中提到的,避免在模板中调用方法,它们将在每次 Angular 运行更改检测时执行,这可能非常频繁。所以我们要做的就是将初始值设置为你的ngModel,即salutation

    ngOnInit() {
      this.salutation = this.personalData.salutation.id;
    }
    

    现在我们也可以去掉模板中的[checked] 属性,因为我们使用ngModel 代替。因此,您将模板修改为以下内容:

    <div *ngFor="let opt of options">{{opt.title}}
      <input type="radio" [(ngModel)]="salutation" name="option" 
             #option="ngModel" [value]="opt.id" />
    </div>
    

    演示:http://plnkr.co/edit/1vAlRdhVSMPH12VEg5Fj?p=preview

    【讨论】:

    • 嗨。 salutation 这里是一个带有 id 和 title 的对象,如果我制作模型 this.personalData.id,我的验证失败,为了验证,我正在传递我的模型 [validation-control]="salutation"
    • 好吧,因为它位于您的代码中,salutation 已经指向 id。我不确定你现在到底想要什么。能否请您分叉并准确显示问题所在?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-06-11
    • 2018-10-24
    • 2013-08-07
    • 2015-07-03
    • 2019-10-04
    相关资源
    最近更新 更多