当我console.log用户的单选按钮选择时,记录的总是后面一个

When I console.log a user's radio button selection, what logs is always one behind

本文关键字:一个 记录 用户 log console 单选按钮 选择 当我      更新时间:2023-09-26

由于某种原因,当我console.log用户的单选按钮选择时,记录到控制台的内容总是滞后的。为什么会这样?对于初始状态,我有一个默认的单选按钮选择设置为"all"。当用户单击"Option a"时,记录到控制台的是初始状态的"all"。当我再次点击"选项B"时,记录的是之前选择的"选项A"。为什么只有一次?我该如何解决这个问题?

   public user: User;
  public categories = [
    { value: 'T', display: 'All', count: 232 },
    { value: 'A', display: 'Choice A', count: 22 },
    { value: 'B', display: 'Choice B', count: 43 },
    { value: 'C', display: 'Choice C', count: 35 },
    { value: 'D', display: 'Choice D', count: 62 },
    ];
  ngOnInit() {
    this.user = {
      category: this.categories[0].value
    }
  }
  select(isValid: boolean, f: User) {
    if (!isValid) return;
    console.log(f);
    console.log(this.user.category);
  }

和HTML:

<form #f="ngForm" novalidate>
    <div class="form-group">
    <div class="radio" *ngFor="let category of categories">
        <label>
        <input type="radio" name="category" [(ngModel)]="user.category" [value]="category.value" (click)="select(f.value, f.valid)">
        {{category.display}}
        </label>
        <span class="num-results">{{category.count}}</span>
    </div>
    </div>
</form>

ngModelChange代替click

(ngModelChange)="select(f.value, f.valid)"

ngModel有机会更新表单之前处理(click)事件。

元素上的绑定顺序并没有定义事件处理的顺序。