我正试图清理我的代码,并尽量减少所有的导入代码,我必须设置到处
所以在 index.ts
在我的services文件夹中我设置了一个目录:
import { Service1} from "./service1.service";
import { Service2 } from "./service2.service";
import { Service3 } from "./service3.service";
export const commonServices = [
Service1,
Service2,
Service3,
];
这样我就可以使用扩展运算符最小化 app.module.ts
中的导入代码。
...
import { commonServices } from "./common/services";
@NgModule({
...
providers: [
...commonServices,
]
})
export class AppModule { }
但是在 some.component.ts
中,我不能使用单个导入,因为index.ts
也没有桶化特定的服务。
...
// This doesn't work
// import { Service1, Service2 } from "../../core/services";
// I have to do this
import { Service1 } from "../../core/services/service1.service";
import { Service2 } from "../../core/services/service2.service";
@Component({
})
export class SomeComponent {
}
我如何设置index.ts
也导出服务的名称,有一个很好的干净的方式来实现这一点?
你可以这样做:
// index.ts
export { Service1} from "./service1.service";
export { Service2 } from "./service2.service";
export { Service3 } from "./service3.service";
// app.module.ts
import * as commonServices from "./common/services";
...
providers: [
Object.keys(commonServices).map(svc => commonServices[svc]),
]
// some.component.ts
import { Service1, Service2 } from "../../core/services";
注意,你不需要展开commonServices, Angular会自动完成,事实上它可以是任何嵌套的数组,比如[Service1, [Service2], [[[Service3]]]]
, Angular会把这些都平铺。