【问题标题】:ionic-native/http emit error “NullInjectorError: No provider for HTTP!”ionic-native/http 发出错误“NullInjectorError: No provider for HTTP!”
【发布时间】:2018-08-27 12:51:41
【问题描述】:

我正在使用 ionic 3.2 和 angular,用于安装 HTTP (https://ionicframework.com/docs/native/http/) 我使用以下命令:

ionic cordova plugin add cordova-plugin-advanced-http
npm install --save @ionic-native/http

在脚本autenticar.ts 中我添加了import { HTTP } from '@ionic-native/http';,如下所示:

import { Component, ViewChild } from '@angular/core';
import { NavController } from 'ionic-angular';
import { HTTP } from '@ionic-native/http';

@Component({
  selector: 'page-autenticar',
  templateUrl: 'autenticar.html'
})
export class AutenticarPage {

  @ViewChild('username') username;
  @ViewChild('password') password;

  constructor(public navCtrl: NavController, public http: HTTP) {
    console.log(http)
  }

...

重新加载应用后出现此错误:

Runtime Error
Uncaught (in promise): Error: StaticInjectorError(AppModule)
[AutenticarPage -> HTTP]: StaticInjectorError(Platform: core)[AutenticarPage -> HTTP]:
NullInjectorError: No provider for HTTP!
Error: StaticInjectorError(AppModule)[AutenticarPage -> HTTP]:
StaticInjectorError(Platform: core)[AutenticarPage -> HTTP]:
NullInjectorError: No provider for HTTP! at _NullInjector.get
(http://localhost:8100/build/vendor.js:1376:19) at resolveToken
(http://localhost:8100/build/vendor.js:1674:24) at tryResolveToken
(http://localhost:8100/build/vendor.js:1616:16) at StaticInjector.get
(http://localhost:8100/build/vendor.js:1484:20) at resolveToken
(http://localhost:8100/build/vendor.js:1674:24) at tryResolveToken
(http://localhost:8100/build/vendor.js:1616:16) at StaticInjector.get
(http://localhost:8100/build/vendor.js:1484:20) at resolveNgModuleDep
(http://localhost:8100/build/vendor.js:11228:25) at NgModuleRef_.get
(http://localhost:8100/build/vendor.js:12461:16) at resolveDep
(http://localhost:8100/build/vendor.js:12951:45)

我试试这个answer,说我必须添加app.module.ts 这个import { HttpModule } from '@angular/http';,像这样:

import { NgModule, ErrorHandler } from '@angular/core';
import { BrowserModule } from '@angular/platform-browser';
import { IonicApp, IonicModule, IonicErrorHandler } from 'ionic-angular';
import { HttpModule } from '@angular/http';
import { MyApp } from './app.component';

....

  imports: [
    BrowserModule,
    HttpModule,
    IonicModule.forRoot(MyApp)
  ],

...

但还是同样的错误。

【问题讨论】:

  • 我认为您需要在 app.module.ts 中的提供程序中添加 HTTP

标签: angular typescript ionic-framework


【解决方案1】:

你需要在providers中添加HTTP

app.module.ts

...

import { HTTP } from '@ionic-native/http';

...

@NgModule({
  ...

  providers: [
    ...
    HTTP
    ...
  ]
  ...
})
export class AppModule { }

【讨论】:

  • 它看起来像它工作,但它看起来 HTTP 在浏览器中不起作用,只是在设备上。这是正确的吗?
  • 是的,一些离子原生模块只能在设备上工作,而不是在浏览器上工作。
  • 如果您还想在浏览器和设备上工作,那么您需要使用@angular/http 而不是通过cordova。
  • 感谢您的解释! +1 :)
  • 我通常会创建一个辅助类,它同时使用原生 HTTP 和 Angular HTTP。当检测到的平台是 Cordova 时,帮助程序类使用本机 HTTP 模块。如果不是,则相应地使用 Angular HTTP。
【解决方案2】:

providers

下需要添加HTTP
providers: [
    HTTP
]

【讨论】:

  • 所以documentation 不正确?我试过你的建议,但我得到另一个错误:Can't resolve all parameters for AutenticarPage: ([object Object], ?). - 截图:i.stack.imgur.com/TSn24.png
  • 它看起来像它工作,但它看起来 HTTP 在浏览器中不起作用,只是在设备上。这是正确的吗?
  • 谢谢 1+ :) - 注意:我接受了另一个答案,因为他先回答了。
猜你喜欢
  • 2018-10-31
  • 2022-12-27
  • 2021-10-16
  • 2021-09-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多