首页 > 解决方案 > 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;
    }
}

标签: angulartypescript

解决方案


在这种情况下,您需要将上下文绑定到save方法,因为当您在另一个变量中分配方法并通过该变量调用此方法时,您会丢失原始上下文:

this.dataSource = new TableDataSource<IContactDetail>(this.save.bind(this));

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/this


推荐阅读