Angular 5中ngx-image-cropper移至Page.module.ts后无法被Component2识别
解决ngx-image-cropper移至父模块后Component2无法识别的问题
嘿,我之前也踩过Angular模块导入的坑,你的问题其实是Angular模块的组件可见性规则在搞鬼——父模块里导入的组件,默认只有父模块自身的组件能使用,子模块(比如Page1、Page2的模块)根本看不到,除非你把它导出给子模块用!
下面一步步给你修复:
1. 正确配置Page.module.ts
在Page.module.ts里,你得做两件关键的事:
- 导入
ImageCropperComponent(或者更规范的是导入ImageCropperModule,毕竟ngx-image-cropper官方是按模块提供的) - 把这个组件(或模块)加到
exports数组里,相当于“对外开放”,让子模块能访问到它
给你个代码示例:
// Page.module.ts import { NgModule } from '@angular/core'; import { CommonModule } from '@angular/common'; // 两种导入方式选一种:直接导组件,或者导模块 import { ImageCropperComponent } from 'ngx-image-cropper'; // import { ImageCropperModule } from 'ngx-image-cropper'; import { Page1Module } from './page1/page1.module'; import { Page2Module } from './page2/page2.module'; @NgModule({ declarations: [ // 如果选导组件的方式,必须在这里声明它 ImageCropperComponent ], imports: [ CommonModule, Page1Module, Page2Module, // 如果选导模块的方式,这里加ImageCropperModule,不用在declarations里写 // ImageCropperModule ], exports: [ // 重点!把组件/模块导出,子模块才能用 ImageCropperComponent // 如果用模块的话,就导出ImageCropperModule // ImageCropperModule ] }) export class PageModule { }
2. 清理子模块的冗余配置
记得把Page1.module.ts里之前导入ImageCropperComponent的代码删掉,Page2.module.ts里也别加重复的导入/声明,不然容易引发冲突。
3. 最后验证与排查
现在Component2的模板里使用<image-cropper>标签应该就能正常识别了。要是还报错,试试这几招:
- 重新执行
npm install ngx-image-cropper,确保依赖没有安装损坏 - 重启Angular开发服务器,有时候模块变更需要重启才能生效
- 检查Page.module.ts是否正确导入了Page2.module.ts,别搞反了父子模块的关系
内容的提问来源于stack exchange,提问作者Ilya Frolov
相关产品推荐
相关产品推荐

