【问题标题】:Get the default value of select radio Angular 6获取选择单选Angular 6的默认值
【发布时间】:2019-08-17 00:10:35
【问题描述】:

我有这个映射用户 *------------1 个职业。 我想修改一位用户。 所以我从list-users.component.html中选择一个,我会被重定向到modify-user.component.html

以下是所需文件:

修改-user.component.html

<form [formGroup]="editForm" (ngSubmit)="onSubmit()">
        <div class="form-group">
            <label for="name">Name</label>
            <input type="text" formControlName="name" placeholder="Name" name="name" class="form-control" id="name">
        </div>
        <div *ngFor='let pro of professions; let i = index'>
            <label>
                <input type="radio"
                       id="pro.id" 
                       checked="pro.selected" 
                       name="pro"
                       [(ngModel)]="this.editForm.pro"
                       (change)='radioChecked(pro.id, i)'
                       [value]="pro.libelle">
                <span></span>
                <span class="check"></span>
                <span class="box"></span>
                {{pro.libelle}}
            </label>
        </div>
        <p>==> {{selectedProfessionRadio}}</p>
        <button class="btn btn-success">Update</button>
    </form>

修改-user.component.ts

export class ModifyUserComponent implements OnInit
{

    private selectedProfessionRadio;
    professionLib: string;
    editForm: FormGroup;
    usrId: String;

    professions: Profession[] =
    [
        {id: 1, libelle: "Engineer", selected: false},
        {id: 2, libelle: "Student", selected: false},
    ];

    radioChecked(id, i, pro)
    {
        this.professions.forEach(pro=>
        {
            if(pro.id !== id)
            {
                pro.selected = false;
            }
            else
            {
                pro.selected = true;
            }
        })

        this.userService.getProfessionById(id).subscribe(data =>
        {
            console.log(data);
            pro = data as Profession;

            localStorage.removeItem("ProfessionLibelle");
            localStorage.setItem("ProfessionLibelle", pro.libelle);

        },error => console.log(error));

        this.selectedProfessionRadio = localStorage.getItem("ProfessionLibelle");
    }

  constructor(private formBuilder: FormBuilder, private router: Router, private userService: UserService) {}

  ngOnInit()
  {
      let userId = localStorage.getItem("editUserId");
      this.usrId = localStorage.getItem("editUserId");

      this.userService.getProfessionLibelleByIdUser(+userId).subscribe(data =>
      {
          console.log(data);
          let pro = data as string;
          this.professionLib = pro;

          localStorage.removeItem("ProfessionLibe");
          localStorage.setItem("ProfessionLibe", this.professionLib);

      },error => console.log(error));

      this.selectedProfessionRadio = localStorage.getItem("ProfessionLibe");

      this.editForm = this.formBuilder.group
      ({
          id: [],
          name: ['', Validators.required],
          pro: [this.selectedProfessionRadio, Validators.required]
      });

      this.userService.getUserId(+userId).subscribe( data =>
      {
          this.editForm.patchValue(data);
      });
  }

}

我的问题是,在重定向到修改用户后,我通常得到第一个职业(这是错误的),就像这里描述的那样。

你能告诉我我错过了什么吗? 非常感谢。

【问题讨论】:

  • 你能在stackblitz中做这个,以便我们轻松识别

标签: angular angular6


【解决方案1】:

您分享的代码 sn-p 缺少一些信息并包含一些错误。我能够在 stackblitz 上重新创建它,希望它能够捕捉到您想要实现的目标。

在 Angular 中处理表单时,不建议混合使用 template driven formsreactive forms。在您的情况下,这导致了错误:

ngModel cannot be used to register form controls with a parent formGroup directive. Try using
formGroup's partner directive "formControlName" instead 

另外,editForm.item 会导致错误,因为item 没有在表单组editForm 中定义

【讨论】:

  • 您好@macphilips 先生,非常感谢您的大力帮助。关于item,我打错了。 item 必须替换为 pro(我对我的问题进行了更改)。
猜你喜欢
  • 2018-12-05
  • 2018-12-03
  • 2018-11-25
  • 2019-02-21
  • 2020-12-04
  • 1970-01-01
  • 1970-01-01
  • 2018-07-24
  • 2020-05-28
相关资源
最近更新 更多