Ionic3集成Dialogflow遇StaticInjectorError:HttpClient无提供者
嘿,这个问题我太熟悉了!你碰到的NullInjectorError: No provider for HttpClient!其实是Angular的一个常见小坑——HttpClient不是开箱即用的,得先在根模块里导入对应的模块才行,下面给你一步步解决:
第一步:在AppModule中导入HttpClientModule
打开你的app.module.ts,先添加HttpClientModule的导入语句,再把它加入到imports数组里,这样Angular才能识别并提供HttpClient的实例:
修改后的app.module.ts代码:
import { BrowserModule } from '@angular/platform-browser'; import { ErrorHandler, NgModule } from '@angular/core'; import { IonicApp, IonicErrorHandler, IonicModule } from 'ionic-angular'; import { SplashScreen } from '@ionic-native/splash-screen'; import { StatusBar } from '@ionic-native/status-bar'; import { HttpClientModule } from '@angular/common/http'; // 新增这行导入 import { MyApp } from './app.component'; import { HomePage } from '../pages/home/home'; import { FormsModule } from '@angular/forms'; import { ChatProvider } from '../providers/chat/chat'; import { Message } from '../pages/module/message.module'; @NgModule({ declarations: [ MyApp, HomePage ], imports: [ BrowserModule, FormsModule, HttpClientModule, // 把这个加入imports数组 IonicModule.forRoot(MyApp) ], bootstrap: [IonicApp], entryComponents: [ MyApp, HomePage ], providers: [ StatusBar, SplashScreen, {provide: ErrorHandler, useClass: IonicErrorHandler}, ChatProvider ] }) export class AppModule {}
第二步:修复ChatProvider中的Authorization头格式问题
顺便提个小细节:你在设置请求头的时候,"Bearer"和token之间少了一个空格,这会导致Dialogflow无法识别你的身份,修改ChatProvider里的headers部分:
修改后的sendMessage方法:
sendMessage(message: string) { let data = { lang: "en", query: message } let headers = new HttpHeaders(); headers.append("Authorization","Bearer " + this.accessToken); // Bearer后面加个空格 return this.http.post(this.url, data,{headers: headers}) .map(res => { return res }) }
为什么会出现这个错误?
在Angular 4.3及以后的版本中,HttpClient是属于HttpClientModule的独立模块,不再像旧版的Http那样默认包含在核心模块里。所以必须显式在根模块(也就是你的AppModule)中导入HttpClientModule,Angular才能为HttpClient创建依赖注入的提供者,这样你才能在ChatProvider中正常注入使用它。
内容的提问来源于stack exchange,提问作者user9705886
相关产品推荐
相关产品推荐

