Ionic 5 Cordova插件EmailComposer NullInjectorError

问题描述

我正在使用Ionic 5和电容器做一个应用程序。

package.json

def similar(a,b): # adapted from here: https://stackoverflow.com/a/63838615/8402369
  try: 
    similarity = 1-textdistance.Cosine(qval=2).distance(a,b) 
    return similarity * 100
  except ZeroDivisionError:
    print('There was an error. Here are the values of a and b that were passed')
    print(f'a: {repr(a)}')
    print(f'b: {repr(b)}')
    exit()

我已安装插件Email Composer,以打开用户的电子邮件客户端以发送电子邮件

使用电容器安装

"dependencies": {
    "@angular/common": "~9.1.6","@angular/core": "~9.1.6","@angular/fire": "^6.0.2","@angular/forms": "~9.1.6","@angular/platform-browser": "~9.1.6","@angular/platform-browser-dynamic": "~9.1.6","@angular/router": "~9.1.6","@capacitor/android": "^2.4.0","@capacitor/core": "^2.4.0","@capacitor/ios": "^2.4.0","@ionic-native/core": "^5.27.0","@ionic-native/email-composer": "^5.28.0","@ionic/angular": "^5.2.3","cordova-plugin-email-composer": "^0.9.2","rxjs": "~6.5.1","tslib": "^1.10.0","zone.js": "~0.10.2"
  }

我创建了一个服务来实现发送电子邮件的逻辑:

npm install cordova-plugin-email-composer
npm install @ionic-native/email-composer
ionic cap sync

控制台错误

ERROR错误:未捕获(按承诺):NullInjectorError: R3InjectorError(ContentModule)[EmailService-> EmailComposer-> EmailComposer-> EmailComposer-> EmailComposer]:
NullInjectorError:没有EmailComposer提供程序! NullInjectorError: R3InjectorError(ContentModule)[EmailService-> EmailComposer-> EmailComposer-> EmailComposer-> EmailComposer]:
NullInjectorError:没有EmailComposer提供程序!

看到此信息后,我将其添加到了ngModule:

import {Injectable} from '@angular/core';
import {EmailComposer,EmailComposerOptions} from "@ionic-native/email-composer/ngx";

@Injectable()
export class EmailService {

  constructor(
    private emailComposer: EmailComposer
  ) {
  }

  private get isEmailClientConfigured(): Promise<boolean> {
    return this.emailComposer.isAvailable();
  }

  /**
   * Tries to open an email client and populate the fields.
   */
  intentToSend(to: string) {
    if (this.isEmailClientConfigured) {
      const email: EmailComposerOptions = {
        to: to,isHtml: false
      };
      this.emailComposer.open(email);
    } else {
      console.log('Could not find an email configured.');
    }
  }
}

现在我在控制台中收到此错误

core.js:6228错误错误:未捕获(承诺):错误:无效 NgModule'SharedModule'的提供程序-仅提供程序的实例 和Type被允许,得到:[...,...,...,...,...,?[对象 对象]?]错误:NgModule'SharedModule'的提供者无效- 仅允许Provider和Type的实例,得到:[...,...,..., ...,...,?[object Object]?]

任何想法我该如何解决

我的目标是在我的项目中正确安装和实现插件EmailComposer。

解决方法

要添加到上面的Praveen Patel的答案中,请尝试从更改导入代码

import {EmailComposer} from "@ionic-native/email-composer";

对此:(请注意'/ ngx'

import {EmailComposer} from "@ionic-native/email-composer/ngx";
,

在AppModule的提供程序中添加EmailComposer

import {EmailComposer} from "@ionic-native/email-composer";

@NgModule({
  declarations: [AppComponent ],imports: [
    BrowserModule,IonicModule.forRoot(),AppRoutingModule,],providers: [
    ...
    EmailComposer 
  ],bootstrap: [AppComponent]
})
export class AppModule {}

,

添加带有提供的 useClass

import {EmailComposer} from "@ionic-native/email-composer";
import { IonicNativePlugin } from '@ionic-native/core';

...
...
...

providers: [
...
{ provide: EmailComposer,useClass: IonicNativePlugin}
]