是否有推荐的方法将TypeScript类导入Angular模块,以便该模块中的每个组件或服务都继承这些定义?
核心问题是“为什么导入模块的类不会自动导入到该模块中的其他组件中?”
我已尝试将类导入模块,如下所示:
registration.model.ts:
export class Event {
id: string;
name: string;
}
registration.module.ts:
import { Event } from './registration.model';
我还将它添加到模块中的声明中没有任何效果(我发现它什么也没做的时候我从声明数组中删除了它):
declarations: [
Event,
...
]
registration.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';
我已经验证模块中的相对路径是否正确。我可以将它更改为模块中的绝对路径,并且我将在服务中得到相同的错误。
跟进编辑 感谢Adrian的回复,我现在明白了这一点。我还发现您可以从TypeScript模块一次导入多个类,如下所示:
import * as Registration from 'app/models/registration.model';
答案 0 :(得分:1)
这不是它的工作原理。要在应用程序的其他部分中使用Event模型类,您需要在每个部分中导入它。如果您使用或不使用NgModule,则无关紧要。
Angular compiler使用NgModule,但在进入该步骤之前,TypeScript编译器需要处理您的代码。
在您要使用它的每个文件中,您需要导入它,就像您在模块中所做的那样(可能在每种情况下路径可能不同):
import { Event } from './registration.model';
否则TypeScript将不知道什么是Event以及从哪里获取它。
答案 1 :(得分:0)
错误本身表示无法找到名称Event
问题在于您的相对路径。相对路径不正确
<小时/> 供参考:
不要在 Event class
中提及 declarations metadata property
。当一个类必须使用 declaration array
执行某些操作时,您应该在 Angular context
中提及一些内容的 @Component decorator
即可。
由于您使用纯的Typescript类,只需在 Event
registration.service.ts
类
<强> registration.service.ts 强>
import { Event } from './registration.model or correct relative path';
getEvents(): Observable<Event[]> { // Now Event[] is declared and will not issue any error.
return this.http.get(`api/events`)
.map(response => response.json());
}