Angular 角度:除非第二次单击mat select radio,否则无法获得同步

Angular 角度:除非第二次单击mat select radio,否则无法获得同步,angular,typescript,angular-material,angular6,Angular,Typescript,Angular Material,Angular6,我跟在后面 我的问题是: 我选择的职业诽谤和显示的职业诽谤之间不同步 原因是: radioCheckedid,i,pro方法中的localStorage第一次不起作用。它在第二次单击后给出正确的结果 你知道如何解决这个错误吗?为什么? 如果你去chrome开发者工具。。。在应用程序选项卡中,您将看到两个不同的键 职业诽谤 职业自由 调查代码后,当页面初始化ngOnInit时 你在读一份服务 从本地存储中删除现有项 使用服务返回的值设置本地存储 这意味着默认情况下,该值将始终是服务返回的值。。。不

我跟在后面

我的问题是:

我选择的职业诽谤和显示的职业诽谤之间不同步

原因是:

radioCheckedid,i,pro方法中的localStorage第一次不起作用。它在第二次单击后给出正确的结果

你知道如何解决这个错误吗?

为什么? 如果你去chrome开发者工具。。。在应用程序选项卡中,您将看到两个不同的键

职业诽谤 职业自由 调查代码后,当页面初始化ngOnInit时

你在读一份服务 从本地存储中删除现有项 使用服务返回的值设置本地存储 这意味着默认情况下,该值将始终是服务返回的值。。。不是本地存储中的值 单击单选按钮方法:radioChecked后,相关值将在本地存储器中设置并显示在屏幕上

为了解决您的特定问题:我删除了从服务读取值,现在我们正在从ngOnInit中的localStorage读取

相关TS:


完成

非常感谢您的帮助。但我想告诉你,我得到这个。selectedProfessionRadio在订阅中时未定义。所以,为了解决我的问题,我尝试添加这个。selectedProfessionRadio=pro.libelle outside subscribe。=>因此,我可以在不使用本地存储的情况下获得正确的结果。

您好,先生,非常感谢您的帮助。但我想告诉你,我得到这个。selectedProfessionRadio在内部时未定义订阅,订阅无法保持同步。所以,为了解决我的问题,我尝试添加这个。selectedProfessionRadio=pro.libelle outside subscribe。=>因此,我可以在不使用本地存储的情况下得到正确的结果
import { Component } from '@angular/core';
import { FormGroup, NgForm, FormBuilder, Validators } from '@angular/forms';
import { Profession } from './profession.model';
import { UserService } from './user.service';

@Component({
  selector: 'app-root',
  templateUrl: './app.component.html',
  styleUrls: ['./app.component.css']
})
export class AppComponent {

  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);
      this.selectedProfessionRadio = localStorage.getItem("ProfessionLibelle");
    }, error => console.log(error));

  }

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

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

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

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

  onSubmit() { }
}