【发布时间】:2019-03-04 03:24:47
【问题描述】:
我的 ts 文件中有一个列表
component.ts
list: any[];
constructor(
private listService: ListService
) {}
ngOnInit() {
this.listService.getListItems()
.subscribe(
res => {
this.list= res;
},
err => {
console.log(err);
}
);
}
passList(){
this.listService.modifyList(this.list);
}
如果我确实将我的列表作为参数在函数中传递给服务,则在列表中内部服务所做的更改会将列表从component.ts 文件
ListService.ts
modifyList(list) {
// operations.changes made on list are propagated in the list from component.ts
}
怎么做?
【问题讨论】:
-
如果,例如,在我设置的服务的 modifyList() 函数中 list = [ ] ,那么来自 component.ts 的列表也将变为空。
-
这是正常行为,因为数组和对象是通过引用传递的。如果要在服务内部进行不影响组件的修改,则需要在将列表传递给服务之前克隆列表
-
好的,我明白了,这可能是因为
list数组中的对象与modifyList()参数list共享相同的引用。它们是两个独立的数组,但对对象的引用是相同的。 -
由于在 JS 中,像数组和对象这样的复杂类型是通过引用传递的,所以在您的
modifyList(list)函数中执行list = [ ]本质上也会使组件中的list也为空。虽然这不是推荐的方式,因为它会更改您的应用程序的状态,您将无法推理。
标签: angular service dependencies components code-injection