Angular 4模块导入疑问及TimeAgoModule使用问题咨询
Angular 4模块相关问题解答
关于OneComponent的声明归属问题
首先明确一点:OneComponent并不是在AppModule中声明的。Angular的模块自带封装特性,你在OneModule的declarations数组里声明了OneComponent,这个组件就属于OneModule的私有成员——除非你在OneModule的exports数组里把它导出,否则AppModule里的组件根本没法直接使用OneComponent。
AppModule导入OneModule,只是让AppModule能够访问OneModule中对外导出的内容,但OneComponent本身的声明归属还是牢牢绑定在OneModule上。打个比方,这就像你导入一个第三方npm包,你只能用它暴露出来的公开API,包内部的私有函数你是碰不到的,道理完全一致。
关于TimeAgoModule在OneModule中使用出错的问题
你把TimeAgoModule导入OneModule后,OneComponent没法正常用时间相关功能,大概率是这几个原因导致的:
- 导入方式不对:很多第三方模块需要调用特定方法完成初始化,比如
TimeAgoModule可能需要你导入时加上forRoot()或者forChild()(不同版本的库要求不一样),示例代码如下:@NgModule({ imports: [ TimeAgoModule.forRoot() ], // 注意这里的forRoot()初始化 declarations: [ OneComponent ], exports: [ OneComponent ] // 如果其他模块要用到OneComponent,记得导出 }) export class OneModule { } - 模板用法有误:你是不是在
OneComponent的模板里写错了管道/指令的名称?比如把timeAgo写成了timeago(大小写敏感),或者没有按照库的要求传递正确的参数? - 版本不兼容:Angular 4属于比较老旧的版本,你当前用的
TimeAgoModule版本可能不支持Angular 4。建议去查该库的历史版本,找到适配Angular 4的版本再重新安装,比如通过npm install time-ago-pipe@x.x.x指定对应版本。 - 漏导出必要内容(如果有跨模块使用需求):如果
OneComponent要把TimeAgo的功能传递给其他模块的组件,那你得把TimeAgoModule也加入OneModule的exports数组;但如果只是OneComponent自己用,这一步其实不需要。
你可以先从检查导入方式开始,核对模板里的用法是否符合库的要求,最后排查版本兼容性,应该能解决问题。
内容的提问来源于stack exchange,提问作者Marvin Ericson
相关产品推荐
相关产品推荐

