Tho*_*ler 85 typescript ecmascript-6 angular2-services angular
如何引入'my-app-name/services'类似以下导入的行?
import {XyService} from '../../../services/validation/xy.service';
Run Code Online (Sandbox Code Playgroud)
Dav*_*ret 128
在TypeScript 2.0中,您可以baseUrl在tsconfig.json以下位置添加属性:
{
"compilerOptions": {
"baseUrl": "."
// etc...
},
// etc...
}
Run Code Online (Sandbox Code Playgroud)
然后,您可以导入所有内容,就像您在基本目录中一样:
import {XyService} from "services/validation/xy.service";
Run Code Online (Sandbox Code Playgroud)
除此之外,您还可以添加一个paths属性,该属性允许您匹配模式然后将其映射出来.例如:
{
"compilerOptions": {
"baseUrl": ".",
"paths": {
"services/*": [
"services/validation/*"
]
}
// etc...
},
// etc...
}
Run Code Online (Sandbox Code Playgroud)
哪个允许你从任何地方导入它:
import {XyService} from "services/xy.service";
Run Code Online (Sandbox Code Playgroud)
从那里,您将需要配置您正在使用的任何模块加载器以支持这些导入名称.现在,TypeScript编译器似乎没有自动映射这些.
您可以在github问题中阅读更多相关信息.rootDirs在使用多个项目时,还有一个有用的属性.
我发现使用"桶"可以使它变得更容易.
index.ts文件.例
在您的情况下,首先创建一个名为的文件my-app-name/services/validation/index.ts.在这个文件中,有代码:
export * from "./xy.service";
Run Code Online (Sandbox Code Playgroud)
然后创建一个名为的文件my-app-name/services/index.ts并拥有以下代码:
export * from "./validation";
Run Code Online (Sandbox Code Playgroud)
现在您可以像这样使用您的服务(index隐含):
import {XyService} from "../../../services";
Run Code Online (Sandbox Code Playgroud)
一旦你有多个文件,它就会变得更容易:
import {XyService, MyOtherService, MyOtherSerivce2} from "../../../services";
Run Code Online (Sandbox Code Playgroud)
必须维护这些额外的文件需要更多的工作(使用桶维护者可以消除工作),但我发现它最终会以较少的工作得到回报.执行主要目录结构更改会更容易,并且会减少您必须执行的导入数量.
警告
这样做有一些你必须注意的事情,不能做:
import {XyService} from "../validation";).我发现了这一点,第一点可能导致导入错误未被定义.Shi*_*pta 10
最好在tsconfig.json中使用以下配置
{
"compilerOptions": {
"...": "reduced for brevity",
"baseUrl": "src",
"paths": {
"@app/*": ["app/*"]
}
}
}
Run Code Online (Sandbox Code Playgroud)
Angular 6之前的传统方式:
`import {XyService} from '../../../services/validation/xy.service';`
Run Code Online (Sandbox Code Playgroud)
应该重构为:
import {XyService} from '@app/services/validation/xy.service
Run Code Online (Sandbox Code Playgroud)
简短又甜蜜!
我刚刚遇到这个问题。我知道现在已经过去了,但对于任何遇到它的人来说,都有一个更简单的答案。
我之所以遇到这个问题,只是因为我长期以来一直在做的事情停止工作,并且我想知道 Angular 7 中是否发生了某些变化。不,这只是我自己的代码。
不管怎样,我只需要更改一行tsconfig.json即可避免长导入路径。
{
"compilerOptions": {
"...": "simplified for brevity",
"baseUrl": "src"
}
}
Run Code Online (Sandbox Code Playgroud)
例子:
{
"compilerOptions": {
"...": "simplified for brevity",
"baseUrl": "src"
}
}
Run Code Online (Sandbox Code Playgroud)
自从 Angular-CLI 出现以来,这对我来说非常有效。
| 归档时间: |
|
| 查看次数: |
27350 次 |
| 最近记录: |