Angular 为什么角度双向绑定不适用于通过routerLink传递的参数?
我通过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
<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>