是否有推荐的方法将 TypeScript 类导入 Angular 模块,以便该模块中的每个组件或服务都继承这些定义?
核心问题是“为什么导入到模块中的类不会自动导入到该模块中的其他组件中?”
我尝试将一个类导入到模块中,如下所示:
注册.model.ts:
export class Event {
id: string;
name: string;
}
注册.module.ts:
import { Event } from './registration.model';
我还将它添加到模块中的声明中,但没有任何效果(我一发现它什么也没做就从声明数组中删除了它):
declarations: [
Event,
...
]
注册.service.ts:
getEvents(): Observable<Event[]> {
return this.http.get(`api/events`)
.map(response => response.json());
}
产生此错误并且应用程序无法编译:
C:/code/registration/src/app/registration/registration.service.ts (26,29) 中的错误:找不到名称“事件”。
如果我将导入直接添加到 registration.service.ts 中,那么错误就会消失并且一切都可以正确编译:
import { Event } from './registration.model';
我已经验证模块中的相对路径是正确的。我可以将其更改为模块中的绝对路径,并且会在服务中遇到相同的错误。
后续编辑感谢阿德里安的回应,我现在对这一点有了更好的理解。我还发现您可以从 TypeScript 模块一次导入多个类,如下所示:
import * as Registration from 'app/models/registration.model';
这不是它的工作原理。为了在应用程序的其他部分使用 Event 模型类,您需要在每个部分中导入它。是否使用 NgModule 无关紧要。
NgModule 由Angular 编译器使用,但在它到达该步骤之前,TypeScript 编译器需要处理您的代码。
在要使用它的每个文件中,您都需要导入它,就像在模块中所做的一样(可能每种情况下的路径都不同):
import { Event } from './registration.model';
否则 TypeScript 将不知道 Event 是什么以及从哪里获取它。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句