事情发生过程
用动态路由从一个组件传一个对象到另一个组件接收时发生的错误
源码:
对象 selected
export interface selected {model?: string;outwardcolor?: string;outwardwheel?: string;interior?: string;features?: string;pay?: string;}
接收方的ts文件(只有重点部分)
public chosen: selected = <any>{};constructor(private router: Router, private arouter: ActivatedRoute) {}ngOnInit(): void {this.arouter.params.subscribe((data: selected) =>{this.chosen = data;});public selectColor(color: string){this.chosen.outwardcolor = color;}
当我调用这个函数时 问题就来了
这个问题的玄学之处在于 在初始化赋值后 初始化结束前 它还是个对象
this.chosen.outwardcolor = 'color';
这还是成立的
解决方法就是
在给它设值之前给它加个{}
public selectColor(color: string){let o ={};let newchosen = Object.assign(o, this.chosen);this.newchosen.outwardcolor = color;}
此时 这个newchosen 又重新变成了对象
这个时候在给他赋值就没问题了
newchosen.outwarcolor = color ;
或者在观察者接收对象时进行修改
ngOnInit(): void {this.arouter.params.subscribe((data: selected) =>{let o ={};this.chosen = Object.assign(o, data);});}
问题解决
引用文章: Angular的Object.assign