【问题标题】:Radio button not selected while we refresh page or not setting default selection刷新页面或未设置默认选择时未选择单选按钮
【发布时间】:2018-10-27 08:58:18
【问题描述】:

我正在创建一个表单,其中只有 2 个合作伙伴选择,from2 需要选择一个单选按钮,首先加载默认选择的第一个合作伙伴,但有些无法正常工作

请检查以下代码:

<form #personalForm="ngForm" class="editForm" novalidate>
    <div class="mainDiv">
      <div>Select the type of Partner and click "Next"</div>
      <div *ngFor='let partner of partners; let i = index' class="radio">
        <label for="partnerSelection">
          <input ngModel name="partnerSelection" id='partnerSelection' type="radio" [value]="partner" [checked]="selectedPartnerIndex === i"> {{ partner.partnerType }}
        </label>
      </div>
    </div>
  <div class="form-group text-center">
    <button class="btn btn-success btn-outline-rounded btn-info" [disabled]="!personalForm.valid" (click)="goToNext(personalForm)">
      Next
      <span style="margin-left:10px;" class="glyphicon glyphicon-arrow-right"></span>
    </button>
  </div>
</form>

根据这里的评论是我保存和检索所选合作伙伴数据的组件文件代码。

ngOnInit() {
        this.selectedPartnerIndex = this.formDataService.getParrtnership();
        if(this.selectedPartnerIndex.partnerId == null){
            this.selectedPartnerIndex = this.partners[0];
        }
        console.log('Personal feature loaded!',this.selectedPartnerIndex);
    }

    save(form: any): boolean {
        if (!form.valid) {
            return false;
        }

        this.formDataService.setParrtnership(this.selectedPartnerIndex);
        return true;
    }

    goToNext(form: any) {


        if (this.save(form)) {
            // Navigate to the work page
            this.router.navigate(['/headquarter']);
        }
    }

仍然没有选择第一个无线电输入。

【问题讨论】:

标签: html angular


【解决方案1】:

您必须使ngModel 等于selectedPartnerIndex

HTML:

<form #personalForm="ngForm" class="editForm" novalidate>
    <div class="mainDiv">
      <div>Select the type of Partner and click "Next"</div>
      <div *ngFor='let partner of partners; let i = index' class="radio">
        <label for="partnerSelection">
          <input [(ngModel)]="selectedPartnerIndex"  type="radio" [value]="partner"> {{ partner.partnerType }}
        </label>
      </div>
    </div>
  <div class="form-group text-center">
    <button class="btn btn-success btn-outline-rounded btn-info" [disabled]="!personalForm.valid" (click)="goToNext(personalForm)">
      Next
      <span style="margin-left:10px;" class="glyphicon glyphicon-arrow-right"></span>
    </button>
  </div>
</form>

在组件中:

默认情况下:

selectedPartnerIndex = this.partners[0];

【讨论】:

  • 它在第一种情况下工作,我正在设置默认对象,但是当我从第二个屏幕返回并尝试设置最后选择的对象时,它没有设置或选择任何单选值。
  • 第二屏是什么意思?你能解释一下吗?
  • 我正在使用路由器,在我的第一个屏幕中我有合作伙伴列表,我需要选择单个合作伙伴,然后导航到第二个屏幕,在第二个屏幕中我 ave 按钮上一个提供用户返回和用户可以更改合作伙伴选择,但返回第一个屏幕并选择用户选择的最后一个值无法选择。
  • 您是如何维护合作伙伴选择的?回到第一个屏幕时应该选择哪个?
  • 我将所选对象存储在共享服务中,然后从该服务设置中获取它并让所选对象正常工作,我可以看到该值可以在 selectedPartnerIndex 中检索但不能在单选按钮中设置
【解决方案2】:

我认为这部分代码对你有帮助

<tr *ngFor="let partner of partners; let idx = index">
    <label for="partnerSelection">
        <input [(ngModel)]="selectedParner" name="partnerSelection" id='partnerSelection' type="radio" [value]="partner['KEY']" [checked]="(selectedPartnerIndex === idx)? true : false"> {{ partner.partnerType }}
    </label>
</tr>

和组件

@Component({...})
class App {
    selectedPartnerIndex = 0;
}

【讨论】:

  • 在您的 html 代码中也显示 selectedPartnerIndex。它的价值好吗??数字? @CodeChanger
  • 之前是数字,但根据上面的答案 O 已将其更改为对象
  • 以上代码不起作用,因为您的 ngModel 值和选择的值名称不同,并且根据我的 exp ngModel & [checked] 两者都无法在相同的无线电输入上工作。
  • 你能提供一个有效的 plunker 例子吗? @CodeChanger
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-07-02
  • 2017-06-02
  • 2013-03-01
相关资源
最近更新 更多