ionic-native/http 发出错误“NullInjectorError: No provider for HTTP!”

Posted

技术标签:

【中文标题】ionic-native/http 发出错误“NullInjectorError: No provider for HTTP!”【英文标题】:ionic-native/http emit error “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 【参考方案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+ :) - 注意:我接受了另一个答案,因为他先回答了。

以上是关于ionic-native/http 发出错误“NullInjectorError: No provider for HTTP!”的主要内容,如果未能解决你的问题,请参考以下文章

可视代码 - 错误 NU1101:找不到包 Microsoft.EntityFrameworkCore

Visual Studio Autodeploy - nuget命令失败,退出代码和错误NU1102

构建错误 NU1202 Xamarin.Android.Support.XXXX 与 monoandroid51 不兼容

离子:从http调用中获取数据

错误NU1101:无法找到软件包”。源中不存在具有此ID的软件包:Microsoft Visual Studio脱机软件包,nuget.org

怒是不可行的