【问题标题】:Unexpected directive 'Slides' imported by the module 'AppModule'. Please add a @NgModule annotation模块“AppModule”导入的意外指令“Slides”。请添加@NgModule 注释
【发布时间】:2019-03-08 01:09:04
【问题描述】:

我正在尝试构建一个非常简单的应用程序(ionic 3.19):使用手机摄像头点击按钮拍照,将它们保存在数组中,然后通过幻灯片组件像轮播一样显示。但得到一个错误的标题。代码:

app.module.ts,从 ionic-angular 导入 Slide

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 { MyApp } from './app.component';
import { HomePage } from '../pages/home/home';

import { Slides } from 'ionic-angular';
import { Camera } from '@ionic-native/camera';


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

home.ts,包含拍照功能

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

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

  
  public image: string = null;
  public base64Image: string[];
  public extraOptions : {};

  constructor(private camera: Camera) {
    this.base64Image = new Array();
    this.extraOptions = {
      pager: true,
      paginationClickable: true,
      spaceBetween: 30,
      centeredSlides: true,
      autoplay: 2000
      }
  }  

  takePicture() {
    let options: CameraOptions = {
      destinationType: this.camera.DestinationType.DATA_URL,
      targetWidth: 1000,
      targetHeight: 1000,
      quality: 100
    }
    this.camera.getPicture( options )
    .then(imageData => {
      this.image = 'data:image/jpeg;base64,${imageData}';
      this.base64Image.push(imageData);
      let iData = this.base64Image.map(o => o).join(', ');
      console.log("iData is " + iData);
    })
    .catch(error =>{
      console.error( error );
    });
  } 

    
}

home.html:

<ion-header>
  <ion-navbar>
    <ion-title>
      Manage your photos!
    </ion-title>    
  </ion-navbar>
</ion-header>

<ion-content padding>    
        <button ion-button block (click)="takePicture()">Photo</button>
        <!--<img [src]="image" *ngIf="image" />-->
        <div *ngIf="base64Image.length == 0"> <br/><br/> &nbsp; &nbsp;Click on the camera icon to take pictures!</div>
        <ion-slides pager autoplay="true" pager="true" [options]="extraOptions" *ngIf="base64Image.length > 0">
          <ion-slide *ngFor="let image of base64Image">
            <img [src]="image" />
          </ion-slide>
        </ion-slides>
</ion-content>

有什么想法吗?非常感谢!

【问题讨论】:

    标签: ionic-framework ionic3


    【解决方案1】:

    不需要在app.module.ts中导入Slides,直接在组件中导入即可:

    import { Slides } from 'ionic-angular';
    

    别忘了在组件中添加幻灯片作为 ViewChild:

    @ViewChild(Slides) slides: Slide
    

    阅读更多official docs

    【讨论】:

    • 在 home.ts 中包含 import 和 @ViewChild 语句(并从 app.module.ts 中删除导入)后,我得到:模板解析错误:无法绑定到“选项”,因为它是'不是'离子幻灯片'的已知属性。 1. 如果 'ion-slides' 是一个 Angular 组件并且它有 'options' 输入,那么验证它是这个模块的一部分。 2. 如果“ion-slides”是一个 Web 组件,则将“CUSTOM_ELEMENTS_SCHEMA”添加到该组件的“@NgModule.schemas”以禁止显示此消息。 3. 允许任何属性添加“NO_ERRORS_SCHEMA”到这个组件的“@NgModule.schemas”。
    • 成功了。在 home.html 行 0"> [options] 应该是选项。
    猜你喜欢
    • 2017-12-02
    • 2017-11-27
    • 2018-01-10
    • 2019-12-01
    • 2021-09-02
    • 2020-04-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多