离子4-InjectionToken

时间:2019-07-17 15:27:41

标签: angular typescript ionic-framework dependency-injection ionic4

我正在将ionic 3应用程序移植到ionic4。有一个使用InjectionToken的服务:

export interface DiscoveryService {
  scan(timeout: number): Observable<Peripheral>;
  stopScan(): Promise<void>;
}

export const BLE_DISCOVERY = new InjectionToken<DiscoveryService>('ble.discovery');

@Injectable()
export class BleDiscovery implements DiscoveryService {
  constructor(private decoder: BleDecoder, private ble: BLE, private platform: Platform) { }

  scan(timeout: number): Observable<Peripheral> {
    return from(this.platform.ready()).pipe(
      mergeMap(_ => this.ble.scan([], timeout)),
      map(device => this.decoder.decodeDevice(device)),
      filter(isHickoryDevice),
      map(setDefaultName)
    );
  }

  stopScan(): Promise<void> {
    return this.ble.stopScan();
  }
}

然后我定义了以下内容,然后将BleModule导入到app.module.ts中

import { NgModule } from '@angular/core';
import { BLE } from '@ionic-native/ble/ngx';
import { BleDecoder } from './ble-decoder';
import { BleDiscovery, BLE_DISCOVERY } from './ble-discovery';

@NgModule({
  providers: [
    { provide: BLE_DISCOVERY, useValue: {} },
    BLE,
    BleDecoder,
    BleDiscovery
  ],
  imports: [
  ],
  exports: [
  ]
})
export class BleModule { }

在要使用该服务的页面中,我将其注入到构造函数中,如下所示:

constructor(
    private zone: NgZone,
    private router: Router,
    @Inject(BLE_DISCOVERY) private discovery: DiscoveryService) {}

这时发现是一个空对象(即,我看不到scan和stopScan方法)。

这目前在我要移植的ionic 3应用程序中有效。不知道我错过了什么可能会导致这种情况?

0 个答案:

没有答案