【问题标题】:Angular 5 cannot connect ImageCropperComponent to its componentsAngular 5 无法将 ImageCropperComponent 连接到其组件
【发布时间】:2018-09-16 16:04:45
【问题描述】:

我安装了包"ngx-image-cropper" 我的项目结构如下

  • 应用
  • 应用程序 -> 页面
  • 应用程序->页面->第1页->组件1
  • 应用程序->页面->页面2->组件2

如果我将裁剪器连接到 Component1 那么一切正常 我将 ImageCropperComponent 组件导入 Page1.module.ts 但现在我需要在 Component2 裁剪器中工作。从Page1.module.ts中去掉import,我把它添加到上面的模块中,也就是Page.module.ts中。 我的应用程序不再看到他。

控制台日志

  Uncaught (in promise): Error: Template parse errors:
Can't bind to 'image' since it isn't a known property of 'img-cropper'.
1. If 'img-cropper' is an Angular component and it has 'image' input, then verify that it is part of this module.
2. If 'img-cropper' is a Web Component then add 'CUSTOM_ELEMENTS_SCHEMA' to the '@NgModule.schemas' of this component to suppress this message.
3. To allow any property add 'NO_ERRORS_SCHEMA' to the '@NgModule.schemas' of this component. ("ex justify-content-center text-center"

我尝试在 App.module.ts 和 Page.module.ts 中安装 ImageCropperModule 没有结果,得到同样的错误。 如何为我的组件安装cropper?我的错误是什么?

我的 page.module.ts

 import { NgModule } from '@angular/core';
import { PagesComponent } from './pages.component';
import { PagesRoutingModule } from './pages-routing.module';
import { ThemeModule } from '../@theme/theme.module';
import { NewsModule} from './news/news.module';
import {ImageCropperComponent} from 'ngx-img-cropper';
const PAGES_COMPONENTS = [
  PagesComponent,
    ImageCropperComponent,
];

@NgModule({
  imports: [
    PagesRoutingModule,
    ThemeModule,
      NewsModule,
  ],
  declarations: [
    ...PAGES_COMPONENTS,
  ],
})
export class PagesModule {
}

我的component2.component.html(这个代码也用在其他组件中)

<img-cropper class="croppedBlock d-flex justify-content-center text-center"
                                     *ngIf="cropperVisible" [image]="data1" [settings]="cropperSettings1"
                                     (onCrop)="boundInfo($event)"></img-cropper>
                        <div class="resultCropper">
                      <span class=" imageCropper" *ngIf="data1.image">
                        <img *ngIf="savedImage" [src]="data1.image">
                            </span>
                            <button class="btn {{classButtonCropper}} d-block mb-2 mt-2 ml-auto mr-auto"
                                    (click)="cropped(bounds)" *ngIf="statusCropped" [innerHtml]="statusCropped">
                            </button>
                        </div>

决定 从父模块中移除 ImageCropperComponent 并将 ImageCropperModule 导入每个将使用它的父模块

【问题讨论】:

  • 你能显示你的page.module.ts文件的代码吗?
  • @Narm 我添加了自己的模块
  • 如果是模块,为什么不将其添加到导入中:[ImageCorpperModule]?而且您也不需要将 ImageCropperComponent 添加到列表中,因为这将在您的 ImageCropperModule 中注册
  • @LkPark 如果添加要导入的 ImageCropperModule,控制台会显示我正在尝试连接同一组件两次(ImageCropperComponent)。如果您从声明中删除 ImageCropperComponent,我会收到上一个错误
  • @IlyaFrolov 那你的模块有问题,能不能给你的NgModule(ImageCropper)加一些sn-ps?

标签: angular typescript


【解决方案1】:

这应该是这样的。

page.module.ts

import { NgModule } from '@angular/core';
import { PagesComponent } from './pages.component';
import { ImageCropperModule } from 'ngx-img-cropper';

const PAGES_COMPONENTS = [
  PagesComponent
];

@NgModule({
  imports: [
    ImageCropperModule
  ],
  declarations: [
    ...PAGES_COMPONENTS,
  ],
})
export class PagesModule {}

page.component.ts

import { CropperSettings } from 'ngx-img-cropper';

@Component({
    selector: 'page',
    encapsulation: ViewEncapsulation.Emulated,
    templateUrl: './page.component.html'
})
export class PageComponent {

    public data: any;
    public cropperSettings: CropperSettings;

    constructor() {

        this.cropperSettings = new CropperSettings();
        this.cropperSettings.width = 100;
        this.cropperSettings.height = 100;
        this.cropperSettings.croppedWidth = 100;
        this.cropperSettings.croppedHeight = 100;
        this.cropperSettings.canvasWidth = 400;
        this.cropperSettings.canvasHeight = 300;

        this.data = {};
    }
}

page.component.html

<img-cropper [image]="data" [settings]="cropperSettings"></img-cropper><br>
<img [src]="data.image" [width]="cropperSettings.croppedWidth" [height]="cropperSettings.croppedHeight">

【讨论】:

  • 我做了你写的。在页面目录中创建了一个名为 image-cropper.module.ts 的文件,将 ImageCropperComponent 添加到其中并尝试将新模块导入 page.module.ts。错误仍然存​​在
  • 哦不,这只是示例,我认为这是一些自定义模块。我会尝试自己启动它,如果有问题,请告诉您。
  • 我所做的这些更改应用于我的个人项目我得到了上传按钮并且裁剪按预期工作,尝试进行相同的更改,确保没有加载其他地方模块,只有 PageModule暂时。
  • 我在page.coponent.ts中是
  • 有一些遗漏的配置,我建议你从头开始设置,只是尝试进行相同的设置,因为你的错误信息表明模块没有正确加载。但我只能说,启动所需的唯一部分是导入 ImageCropperModule,仅此而已。剩下的就是裁剪器设置了。
猜你喜欢
  • 2016-01-02
  • 1970-01-01
  • 2018-11-03
  • 2018-08-12
  • 1970-01-01
  • 1970-01-01
  • 2018-07-21
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多