未捕获(承诺):错误:GooglePlus 没有提供者

Posted

技术标签:

【中文标题】未捕获(承诺):错误:GooglePlus 没有提供者【英文标题】:Uncaught (in promise): Error: No provider for GooglePlus 【发布时间】:2018-02-27 00:26:49 【问题描述】:

我正在尝试使用cordova-plugin-googleplus 插件。

我已阅读其他帖子,说要将插件添加为提供程序,但尝试这样做无济于事。

当我尝试访问我的登录页面时,我收到堆栈跟踪错误:

运行时错误 !错误:没有 GooglePlus 的提供者!在 ReflectiveInjector_ 处的 injectionError (http://localhost:8100/build/vendor.js:1590:86) 在 noProviderError (http://localhost:8100/build/vendor.js:1628:12) 处。在 ReflectiveInjector 处的 throwOrNull (http://localhost:8100/build/vendor.js:3129:19)。在 ReflectiveInjector 处的 getByKeyDefault (http://localhost:8100/build/vendor.js:3168:25)。 em>getByKey (http://localhost:8100/build/vendor.js:3100:25) 在 ReflectiveInjector.get (http://localhost:8100/build/vendor.js:2969:21) 在 AppModuleInjector.get (ng:///AppModule/module.ngfactory.js:332:145) 在 AppModuleInjector.getInternal (ng: ///AppModule/module.ngfactory.js:615:44) 在 AppModuleInjector.NgModuleInjector.get (http://localhost:8100/build/vendor.js:3936:44) 在 LoginPageModuleInjector.NgModuleInjector.get (http://localhost:8100/build/vendor.js:3937:52)

堆栈跟踪

Error: Uncaught (in promise): Error: No provider for GooglePlus!
Error: No provider for GooglePlus!
    at injectionError (http://localhost:8100/build/vendor.js:1590:86)
    at noProviderError (http://localhost:8100/build/vendor.js:1628:12)
    at ReflectiveInjector_._throwOrNull (http://localhost:8100/build/vendor.js:3129:19)
    at ReflectiveInjector_._getByKeyDefault (http://localhost:8100/build/vendor.js:3168:25)
    at ReflectiveInjector_._getByKey (http://localhost:8100/build/vendor.js:3100:25)
    at ReflectiveInjector_.get (http://localhost:8100/build/vendor.js:2969:21)
    at AppModuleInjector.get (ng:///AppModule/module.ngfactory.js:332:145)
    at AppModuleInjector.getInternal (ng:///AppModule/module.ngfactory.js:615:44)
    at AppModuleInjector.NgModuleInjector.get (http://localhost:8100/build/vendor.js:3936:44)
    at LoginPageModuleInjector.NgModuleInjector.get (http://localhost:8100/build/vendor.js:3937:52)
    at c (http://localhost:8100/build/polyfills.js:3:13535)
    at Object.reject (http://localhost:8100/build/polyfills.js:3:12891)
    at NavControllerBase._fireError (http://localhost:8100/build/vendor.js:45902:16)
    at NavControllerBase._failed (http://localhost:8100/build/vendor.js:45890:14)
    at http://localhost:8100/build/vendor.js:45945:59
    at t.invoke (http://localhost:8100/build/polyfills.js:3:9283)
    at Object.onInvoke (http://localhost:8100/build/vendor.js:4508:37)
    at t.invoke (http://localhost:8100/build/polyfills.js:3:9223)
    at r.run (http://localhost:8100/build/polyfills.js:3:4452)
    at http://localhost:8100/build/polyfills.js:3:14076

平台详情

离子框架:3.6.1 Ionic 应用脚本:2.1.4 Angular 核心:4.1.3 Angular 编译器 CLI:4.1.3 节点:6.11.2 操作系统平台:Windows 10 导航平台:Win32 用户代理:Mozilla/5.0(Windows NT 10.0; WIN64; x64) AppleWebKit/537.36 (Khtml, 像 Gecko) Chrome/60.0.3112.113 Safari/537.36

Login.ts

import  Component  from '@angular/core';
//import  GooglePlus  from '@ionic-native/google-plus';
import  TranslateService  from '@ngx-translate/core';
import  IonicPage, NavController, ToastController  from 'ionic-angular';

import  User  from '../../providers/providers';
import  MainPage  from '../pages';

@IonicPage()
@Component(
  selector: 'page-login',
  templateUrl: 'login.html'
)
export class LoginPage 
  // The account fields for the login form.
  // If you're using the username field with or without email, make
  // sure to add it to the type
  account:  username: string, password: string  = 
    username: '',
    password: ''
  ;

  // Our translated text strings
  private loginErrorString: string;

  constructor(public navCtrl: NavController,
    public user: User,
    public toastCtrl: ToastController,
    public translateService: TranslateService,
//    private GooglePlus: GooglePlus
  ) 

    this.translateService.get('LOGIN_ERROR').subscribe((value) => 
      this.loginErrorString = value;
    )
  

  // Attempt to login in through our User service
  doLogin() 
    this.user.login_basic(this.account).subscribe((resp) => 
      this.navCtrl.push(MainPage);
    , (err) => 
      this.navCtrl.push(MainPage);
      // Unable to log in
      let toast = this.toastCtrl.create(
        message: this.loginErrorString,
        duration: 3000,
        position: 'top'
      );
      toast.present();
    );
  


login.module.ts

import  NgModule  from '@angular/core';
import  GooglePlus  from '@ionic-native/google-plus';
import  TranslateModule  from '@ngx-translate/core';
import  IonicPageModule  from 'ionic-angular';

import  LoginPage  from './login';

@NgModule(
  declarations: [
    LoginPage,
  ],
  imports: [
    IonicPageModule.forChild(LoginPage),
    TranslateModule.forChild()
  ],
  exports: [
    LoginPage
  ],
  providers: [
    GooglePlus,
  ],
)
export class LoginPageModule  

【问题讨论】:

【参考方案1】:

您需要将 GooglePlus-provider 添加到 AppModule (app.module.ts)

【讨论】:

我已经尝试过了,但它一直抛出错误。我卸载了所有 node_modules,并清除了我的 npm 缓存,然后开始了一个新项目并完全按照我之前所做的那样做,现在它可以工作了.... GAAAAAH!【参考方案2】:

将 GooglePlus 添加到 the App.module.ts 对我有用

@NgModule(

  ...

  providers: [
    
    GooglePlus,
    
    
  ],
  bootstrap: [AppComponent]
)

【讨论】:

【参考方案3】:

如果是 Angular,GooglePlus 应该像这样导入(app.module.ts):

import  GooglePlus  from '@ionic-native/google-plus/ngx';

...

providers: [  
    GooglePlus,  
]

【讨论】:

以上是关于未捕获(承诺):错误:GooglePlus 没有提供者的主要内容,如果未能解决你的问题,请参考以下文章

ERROR 错误:未捕获(承诺中):MyPlugin 没有 Web 实现

离子 - 错误:未捕获(承诺):找不到removeView

Angular2“没有 t 的提供者!”和未捕获(承诺):错误:DI 错误

Ionic - 如何正确导入 ViewController? - 未捕获(承诺):错误:没有 ViewController 的提供者

未捕获(承诺)类型错误:尝试打开窗口时出现问题

未捕获(在承诺中)错误:提供的权重数据没有目标变量:block1_conv1_2 / kernel