Angular 为什么角度双向绑定不适用于通过routerLink传递的参数?

Angular 为什么角度双向绑定不适用于通过routerLink传递的参数?,angular,angular-routing,angular-router,Angular,Angular Routing,Angular Router,我通过routerLink传递对象,并根据对象属性更新表单输入。但是,当我更改表单输入的内容时,对象属性不会更新 <input type="text" [(ngModel)]="center.id"> <input type="text" [(ngModel)]="center.name" placeholder="name"> <tr *ngFor="let center of centers"> <td [routerLink]="['/add

我通过routerLink传递对象,并根据对象属性更新表单输入。但是,当我更改表单输入的内容时,对象属性不会更新

<input type="text" [(ngModel)]="center.id">
<input type="text" [(ngModel)]="center.name" placeholder="name">

<tr *ngFor="let center of centers">
  <td [routerLink]="['/add-center', center]">{{center.id}}</td>
</tr>
从routerLink获取参数:

提交表单后,我调用以下方法:

editCenter() {

  this.centerService.updateCenter(this.center)
    .subscribe(
      res => {
        console.log('Updated Successfully');
      },
      err => {
        console.log(err);
      })
  ;
  console.log(this.center);
}
该方法打印日志中对象的相同属性。它不会更新对象的属性

试图手动更改属性,但出现以下错误:

TypeError:试图分配给只读属性

this.centerService.UpdateCenter this.center是异步的。您需要将控制台放在subscribe回调中才能看到更改

editCenter() {
    this.centerService.updateCenter(this.center)
        .subscribe(
            res => {
                console.log('Updated Successfully');
                console.log(this.center);
            },
            err => {
                console.log(err);
            });
}

因为我们发现这确实是一个带有表单标签的表单。。。由于您的代码现在已经存在,您的控制台中应该会出现一个错误,因为您没有为字段提供name属性。如果您有表单,则需要执行此操作

<form #f="ngForm">
  <input type="text" [(ngModel)]="center.id" name="id">
  <input type="text" [(ngModel)]="center.name" placeholder="name" name="name">
</form>
拥有name属性应该可以很好地更新模型


双向数据绑定不起作用。例如,如果我正在更改内容输入,它应该更新对象中心的name属性,但不会更新。如果第一个代码snipper中的代码都在同一模板中,请尝试更改中心变量的名称,因为它和ngFor中的中心是一样的。我试过了,但没有成功。你能给我们看看你的中心类/接口吗?这是一个表单吗?我没有看到表单标签?@Alex这是一个表单,它有表单标签。我添加了名称属性,但仍然存在相同的问题。我正在通过routherLink参数传递对象。这是只读的吗?啊,看,我是不小心读的。不能将这样的对象作为参数传递。您可能需要考虑一个服务:不介意标题,它与非相关组件一起工作,您只需要更改主题类型。改用行为主体。
editCenter() {
    this.centerService.updateCenter(this.center)
        .subscribe(
            res => {
                console.log('Updated Successfully');
                console.log(this.center);
            },
            err => {
                console.log(err);
            });
}
<form #f="ngForm">
  <input type="text" [(ngModel)]="center.id" name="id">
  <input type="text" [(ngModel)]="center.name" placeholder="name" name="name">
</form>