首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >离子5 Cordova插件EmailComposer NullInjectorError

离子5 Cordova插件EmailComposer NullInjectorError
EN

Stack Overflow用户
提问于 2020-09-15 00:53:43
回答 3查看 2.7K关注 0票数 1

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

package.json

代码语言:javascript
复制
"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"
  }

我已经安装了插件电子邮件编写器打开用户的电子邮件客户端发送电子邮件。

安装电容器:

代码语言:javascript
复制
npm install cordova-plugin-email-composer
npm install @ionic-native/email-composer
ionic cap sync

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

代码语言:javascript
复制
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.');
    }
  }
}

控制台中的错误:

错误:未知(承诺):NullInjectorError: R3InjectorError(ContentModule)EmailService -> EmailComposer -> EmailComposer: NullInjectorError:没有EmailComposer的提供者!NullInjectorError: R3InjectorError(ContentModule)EmailService -> EmailComposer -> EmailComposer: NullInjectorError:没有EmailComposer的提供者!

看到这个之后,我把它添加到了我的ngModule上:

代码语言:javascript
复制
import {NgModule} from '@angular/core';
import {EmailComposer} from "@ionic-native/email-composer";

@NgModule({
  declarations: [
  ],
  imports: [
  ],
  providers: [
    EmailComposer
  ]
})
export class SharedModule {
}

现在,我在控制台中收到了这个错误:

core.js:6228错误: Uncaught (承诺):Error: NgModule 'SharedModule‘的无效提供程序-只允许提供程序和类型的实例,got:[.,.,?SharedModule对象?]错误: NgModule 'SharedModule‘的无效提供程序-只允许提供程序和类型的实例,got:[.,?object对象?]

知道我该怎么解决这个问题吗?

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

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2020-10-16 09:43:40

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

代码语言:javascript
复制
import {EmailComposer} from "@ionic-native/email-composer";

对此:(注意'/ngx')

代码语言:javascript
复制
import {EmailComposer} from "@ionic-native/email-composer/ngx";
票数 3
EN

Stack Overflow用户

发布于 2020-09-15 06:55:46

在AppModule的提供程序中添加EmailComposer

代码语言:javascript
复制
import {EmailComposer} from "@ionic-native/email-composer/ngx";

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

Stack Overflow用户

发布于 2020-10-06 08:21:36

添加useClass并提供

代码语言:javascript
复制
import {EmailComposer} from "@ionic-native/email-composer";
import { IonicNativePlugin } from '@ionic-native/core';

...
...
...

providers: [
...
{ provide: EmailComposer, useClass: IonicNativePlugin}
]
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63893581

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档