【问题标题】:Typescript : Call instance method打字稿:调用实例方法
【发布时间】:2017-02-25 13:03:03
【问题描述】:

我有一个界面:

export interface ISearchService {
    search(terms: string):  Observable<any>;
}

我有两个服务实现了这个接口:

SearchMaleEmployeeService:

@Injectable()
export class SearchMaleEmployeeService implements ISearchService {

  constructor() { }

  public search(terms: string): Observable<any> {
    console.log('call: SearchMaleEmployeeService.search ' + terms);
  }
}

搜索FemaleEmployeeService:

@Injectable()
export class SearchFemaleEmployeeService implements ISearchService {

  constructor() { }

  public search(terms: string): Observable<any> {
    console.log('call: SearchFemaleEmployeeService.search ' + terms);
  }
}

在我的search.component中,我想调用服务的搜索方法。

我的 search.component:

export class SearchComponent {
  constructor(@Inject('ISearchService') private searchService: ISearchService) { }

  onSearch(terms: string) {    
    this.searchService.search(terms);
  }
}

最后,在托管 SearchComponent 的组件中:

providers: [
    { provide: 'ISearchService', useValue: SearchFemaleEmployeeService}
],

当我在 SearchComponent 中运行 onSearch 方法时,我得到了这个错误:

EXCEPTION: Error in ./SearchComponent class SearchComponent - inline template:0:127 caused by: this.searchService.search is not a function

我认为这是因为我试图从接口调用一个方法,但是当我console.logthis.searchService 时,它返回SearchFemaleEmployeeService,这意味着这是一个很好的实例。为什么会出现这个错误?

【问题讨论】:

    标签: angular methods typescript interface


    【解决方案1】:

    因为您使用的是useValue

    {provide: 'ISearchService', useValue: SearchFemaleEmployeeService}
    

    它只是使用你提供的,它是一个类,在JS中是一个函数。你应该改用 useClass,然后 Angular 会为你创建它。

    {provide: 'ISearchService', useClass: SearchFemaleEmployeeService}
    

    【讨论】:

      猜你喜欢
      • 2019-11-15
      • 2016-02-18
      • 2018-05-25
      • 1970-01-01
      • 2016-10-26
      • 2018-02-08
      • 2023-02-10
      • 1970-01-01
      • 2022-11-09
      相关资源
      最近更新 更多