【问题标题】:No provider for Camera! injectionError没有相机供应商!注入错误
【发布时间】:2018-02-13 09:23:38
【问题描述】:

我是 Ionic 2 的初学者。我想在 Ionic 中使用相机。我跟着https://ionicframework.com/docs/native/camera/ 教程。 我已经安装了cordova-plugin-camera 插件并使用cli 代码安装了ionic-native/camera。

当我为项目提供服务时,它显示运行时错误:

未捕获(承诺):错误:没有相机提供程序!注入错误

我正在发送 app.module.ts、html 页面和类型脚本页面。请看一下。

app.module.ts

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

import { AboutPage } from '../pages/about/about';
import { ContactPage } from '../pages/contact/contact';
import { HomePage } from '../pages/home/home';
import { TabsPage } from '../pages/tabs/tabs';

import { StatusBar } from '@ionic-native/status-bar';
import { SplashScreen } from '@ionic-native/splash-screen';
import { CameraExamplePage } from "../pages/camara-example/camara-example";

@NgModule({
  declarations: [
    MyApp,
    AboutPage,
    ContactPage,
    HomePage,
    TabsPage,
    CameraExamplePage
  ],
  imports: [
    BrowserModule,
    HttpModule,
    IonicModule.forRoot(MyApp)
  ],
  bootstrap: [IonicApp],
  entryComponents: [
    MyApp,
    AboutPage,
    ContactPage,
    HomePage,
    TabsPage,
    CameraExamplePage
  ],
  providers: [
    StatusBar,
    SplashScreen,
    {provide: ErrorHandler, useClass: IonicErrorHandler}
  ]
})
export class AppModule {}

相机拍摄 Html 页面

<ion-header>


  <ion-navbar>

   <ion-title>camaraExample</ion-title>
  </ion-navbar>

</ion-header>


<ion-content padding>

   <button ion-button color="dark" (click)="takePhoto()" > Take Photo 
   </button>
   <img [src]="imageURL" *ngIf="imageURL">

 </ion-content>

**TypeScript 文件 **

import { Component } from '@angular/core';
import { IonicPage, NavController, NavParams } from 'ionic-angular';
import { Camera, CameraOptions } from '@ionic-native/camera'

@IonicPage()
 @Component({
             selector: 'page-camara-example',
             templateUrl: 'camara-example.html',
            })
 export class CameraExamplePage {
 imageURL

 constructor(public navCtrl: NavController, public navParams: NavParams, public camera: Camera) {
 }
 ionViewDidLoad() {
    console.log('ionViewDidLoad CameraExamplePage');
 }

  takePhoto()
  {
    const options: CameraOptions = {
    quality: 100,
    destinationType: this.camera.DestinationType.DATA_URL,
    encodingType: this.camera.EncodingType.JPEG,
    mediaType: this.camera.MediaType.PICTURE
  }

  this.camera.getPicture(options).then((imageData) => {
  // imageData is either a base64 encoded string or a file URI
  // If it's base64:
  //let base64Image = 'data:image/jpeg;base64,' + imageData;

  this.imageURL = imageData


  }, (err) => {
  // Handle error
  });

 }


}

【问题讨论】:

  • 我在My-requests 页面中使用Camera。将相机添加到 app.module.ts 的提供者对我有用(Ionic 4):import { Camera } from '@ionic-native/camera/ngx'; ..... providers: [ Camera ] in app.module.ts

标签: cordova ionic3


【解决方案1】:

您需要在app.module.ts

中将Camera设置为provider
 import { Camera } from '@ionic-native/camera';//import in app.module.ts

 //...

 providers: [
    StatusBar,
    SplashScreen,
    {provide: ErrorHandler, useClass: IonicErrorHandler},
    Camera //here
  ]

当我为项目提供服务时,它显示运行时错误

注意:Cordova 插件在 ionic serve 中不起作用。您需要使用模拟器/设备。 此外,在this.platform.ready() 中包含您的插件代码,并使用this.platform.is('cordova') 检查cordova 是否可用

import { Platform } from 'ionic-angular'; //import Platform
//...
constructor(public platform:Platform){}
//...
takePhoto() {
    this.platform.ready().then(() => {
        if(this.platform.is('cordova')){
            this.camera.getPicture(this.options).then((imageData) => {
                // imageData is either a base64 encoded string or a file URI
                // If it's base64 (DATA_URL):
                let base64Image = 'data:image/jpeg;base64,' + imageData;
            }, (err) => {
                // Handle error
            });
        }
    })
}

【讨论】:

  • 感谢您的建议。错误消失了。但是点击“拍照”按钮后什么也没有发生。这仅适用于 iphone / android 手机吗?或在任何平台上工作。
  • ionicframework.com/docs/native/camera 在链接中查看支持的平台..
  • 您好,代码未在 if(this.platform.is('cordova')){} 内执行。请解释一下。
  • 您在使用哪个平台?哪个设备?还要看看如果没有它是否可以工作
  • 我很困惑。我使用mac和模拟器6s。我已经使用了“actionSheet”。在浏览器中它不起作用,但在模拟器 6s 中起作用。浏览器显示错误“cordova_not_available”。
【解决方案2】:

您需要先使用两个命令安装相机插件

$ ionic cordova plugin add cordova-plugin-camera

$ npm install --save @ionic-native/camera

在您的 app.module.ts 之后,您需要 import 那个 plugins 并更改您的 provider

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

import { AboutPage } from '../pages/about/about';
import { ContactPage } from '../pages/contact/contact';
import { HomePage } from '../pages/home/home';
import { TabsPage } from '../pages/tabs/tabs';

import { StatusBar } from '@ionic-native/status-bar';
import { SplashScreen } from '@ionic-native/splash-screen';
import { CamaraExampalePage } from "../pages/camara-exampale/camara-exampale";
import { Camera} from '@ionic-native/camera';
@NgModule({
  declarations: [
    MyApp,
    AboutPage,
    ContactPage,
    HomePage,
    TabsPage,
    CamaraExampalePage
  ],
  imports: [
    BrowserModule,
    HttpModule,
    IonicModule.forRoot(MyApp)
  ],
  bootstrap: [IonicApp],
  entryComponents: [
    MyApp,
    AboutPage,
    ContactPage,
    HomePage,
    TabsPage,
    CamaraExampalePage
  ],
  providers: [
    Camera,
    StatusBar,
    SplashScreen,
    {provide: ErrorHandler, useClass: IonicErrorHandler}
  ]
})
export class AppModule {}

【讨论】:

  • CameraOptions 不是提供者类..您创建它的新对象..
【解决方案3】:

只需在 app.module.ts 中将 Camera 设置为提供程序,也可以将它导入到您的组件中...就像魔术一样工作!

【讨论】:

  • 详细说明你的答案。这似乎是目前质量非常低的答案。
  • 欢迎来到 StackOverflow!请提供带有参考资料的具体答案。如果您有任何建议或需要澄清,请发表评论。我们有关于How to write a good answer 的指导方针。
【解决方案4】:

自动生成的import 语句存在问题。你需要:`import { Camera, CameraOptions } from '@ionic-native/camera/ngx';

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-04-24
    • 1970-01-01
    • 2021-05-19
    • 2017-08-07
    • 1970-01-01
    • 1970-01-01
    • 2013-10-23
    相关资源
    最近更新 更多