angular - Angular中的依赖注入/从类调用属于服务的方法
问题描述
我有一个创建对象(TableDataSource 类型)的组件,并且在构造函数中我还传入了一个返回 Promise 的方法(保存方法),但是当 TableDataSource 调用该方法时,该方法所属的服务不是定义。
鉴于它必须是通用的,我将如何将服务注入 TableDataSource。在这种情况下,我需要一个属于 ContactService 的方法,但在另一个组件中,例如我需要 UserService。
@Component({
selector: 'app-contact-details',
})
export class ContactDetailsComponent {
constructor(
private contactService: ContactService,
)
{
this.dataSource = new TableDataSource<IContactDetail>(this.save);
}
public save(item: IContactDetail): Promise<IContactDetail[]> {
return this.contactService.save(item); <--- this.contactService is null
}
}
这是表数据源:
export class TableDataSource<T> extends DataSource<TessTableRow<T>> {
protected save: (data: T) => Promise<T | T[]>;
constructor(
save: (data: T) => Promise<T | T[]>
) {
super();
this.save = save;
}
}
解决方案
在这种情况下,您需要将上下文绑定到save
方法,因为当您在另一个变量中分配方法并通过该变量调用此方法时,您会丢失原始上下文:
this.dataSource = new TableDataSource<IContactDetail>(this.save.bind(this));
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/this
推荐阅读
- css - 下拉菜单不断扩展,没有内容
- javascript - 如何使用前一个数据进行调用并将结果数据连接在一起?
- python - 用Python写操作结果
- javascript - 处理需要彼此数据的嵌套异步函数的最佳方法是什么?
- java - 如何更改不是我在 RecycleView 中单击的项目?
- javascript - 使用ajax从html输入中保存值>日期
- reactjs - 当依赖项需要用户输入时,避免“useEffect”在挂载时获取数据
- selenium - 用于 PrimeFaces 选择列表组件的 Selenium webDriver
- python - 对字符串中的字母进行重新排序的最 Pythonic 方式是什么?
- javascript - 从javascript 代码中打开 url