2017-08-26 52 views
0

是否有将TypeScript类导入Angular模块的推荐方法,以便该模块中的每个组件或服务都继承这些定义?如何将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()); 

} 

生成此错误和应用程序编译失败:

ERROR在 C:/代码/注册/ SRC /应用程序/注册/registration.service.ts (26,29):找不到名称'Event'。

如果我直接添加进口到registration.service.ts那么错误消失,一切编译正确:

import { Event } from './registration.model'; 

我已验证的相对路径是正确的模块。我可以将其更改为模块中的绝对路径,并在服务中获得相同的错误。

后续编辑 感谢阿德里安的回应,我明白现在好多了。我也发现了,你可以一次从打字稿模块导入多个类别如下:

import * as Registration from 'app/models/registration.model'; 

回答

1

这不是它的工作原理。为了在你的应用程序的其他部分使用Event模型类,你需要在它们的每一个中导入它。如果你使用或不使用NgModule是无关紧要的。

NgModule被Angular compiler使用,但在它到达该步骤之前,TypeScript编译器需要处理您的代码。

在每一个文件要使用这个需要导入它,就像你在模块中没有(可能的路径可能会在每种情况下不同的):

import { Event } from './registration.model'; 

否则打字稿不会有任何了解事件是什么以及从哪里得到它。

+0

感谢您的详细回复。 – Graham

0

错误本身说找不到名称事件

的问题是你的亲戚路径。相对路径是不正确的


有关信息目的:

不需要提Event classdeclarations metadata property。你应该提东西declaration array当一个类时,类与@Component decorator定义做一些与Angular context意义。

由于您使用的是纯打字稿类只需要导入Eventregistration.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()); 

} 
+0

请看我的问题的最后几行,我知道我可以直接导入到服务。这并不能回答我的问题。 – Graham

+0

好的。那么看起来你的相对路径有问题。相对路径不正确。 – micronyks

+0

我100%肯定模块和服务都在同一个目录中,否则当我添加导入时服务不起作用。 VS代码没有显示任何错误与我在模块中的导入语句。 – Graham

相关问题