Angular 语言服务为代码编辑器提供了一种在 Angular 模板中获取自动补全、错误、提示和导航的方法。它支持位于独立 HTML 文件中的外部模板以及内联模板。
要启用最新的语言服务功能,请在 tsconfig.json
中将 strictTemplates
选项设置为 true
,如以下示例所示:
"angularCompilerOptions": {
"strictTemplates": true
}
编辑器会自动检测到你正在打开 Angular 文件。然后,它就会使用 Angular Language Service 读取 tsconfig.json
文件,查找应用程序中具有的所有模板,然后为你打开的任何模板提供语言服务。
语言服务包括:
自动补全可以在输入时为你提供当前情境下的候选内容和提示,从而提高开发速度。下面这个例子展示了插值中的自动补全功能。当你进行输入的时候,就可以按 tab 键来自动补全。
还有对元素的自动补全。你定义的任何组件的选择器都会显示在自动补全列表中。
Angular 语言服务能对代码中存在的错误进行预警。在这个例子中,Angular 不知道什么是 orders
或者它来自哪里。
快捷信息功能使你可以悬停以查看组件、指令、模块等的来源。然后,你可以单击“转到定义”或按 F12 键直接转到定义。
Angular 语言服务目前在Visual Studio Code和WebStorm、Sublime Text 和 Eclipse IDE 中都有可用的扩展。
在 Visual Studio Code 中,从 “扩展程序:市场 中安装扩展程序。可以用左侧菜单窗格中的扩展程序图标从编辑器中打开市场,或使用 VS 快速打开(在 Mac 上为 ⌘+ P,在 Windows 上为 CTRL + P)并输入“? ext”。在市场中,搜索 Angular Language Service 扩展,并点击 Install 按钮。
Visual Studio Code 与 Angular 语言服务的集成工作是由 Angular 团队发布的。
在 Visual Studio 中,从“扩展程序:市场”中安装扩展程序。可以从编辑器中打开市场,在顶部菜单窗格中选择“扩展”,然后选择“管理扩展”。在市场上,搜索 Angular Language Service extension,然后单击“安装”按钮。
Microsoft 在 Angular 团队的帮助下维护和发布了 Visual Studio 与 Angular 语言服务的集成。在这里查看项目。
在 WebStorm 中,启用 Angular 与 AngularJS 插件。
从 WebStorm 2019.1 开始,@angular/language-service
已经不再需要了,应该从你的 package.json
中移除。
在 Sublime Text 中,当安装为插件时,语言服务仅支持内联模板。你需要自定义 Sublime 插件(或修改当前插件),来实现 HTML 文件中的自动补齐。
要想在内联模板中使用语言服务,你必须首先添加一个扩展,以支持 TypeScript,然后安装 Angular 语言服务插件。从 TypeScript 2.3 开始,TypeScript 提供了一个插件模型,供语言服务使用。
node_modules
目录下:npm install --save-dev typescript
npm install --save-dev @angular/language-service
tsconfig.json
的 "compilerOptions"
部分。"plugins": [
{"name": "@angular/language-service"}
]
Cmd+,
或 Ctrl+,
)中,添加以下内容:"typescript-tsdk": "<path to your folder>/node_modules/typescript/lib"
这样就能让 Angular 语言服务提供 .ts
文件中的诊断与自动补全信息。
你或者直接安装包含了 Angular Language Server 的 “Eclipse IDE for Web and JavaScript developers” 软件包,或者直接从其他 Eclipse IDE 软件包中安装,使用“Help” > “Eclipse Marketplace” 来查找并安装 Eclipse Wild Web Developer。
当你将编辑器与语言服务一起使用时,该编辑器将启动一个单独的语言服务进程,并使用语言服务协议通过 RPC 与之通信。当你输入编辑器时,编辑器会将信息发送到语言服务流程,以跟踪你的项目状态。
当你触发模板中的完成列表时,编辑器首先将模板解析为 HTML 抽象语法树(AST)。Angular 编译器解释这棵树以确定上下文:模板属于哪个模块,当前作用域,组件选择器以及光标在模板 AST 中的位置。然后,它就可以确定可能位于该位置的符号。
如果你要进行插值,则需要更多的精力。如果你在 div
有 {{data.---}}
的插值,并且在 data.---
之后需要自动补全列表,则编译器无法使用 HTML AST 查找答案。HTML AST 只能告诉编译器某些文本带有字符 “{{data.---}}
”。那时模板解析器会生成一个表达式 AST,该表达式位于模板 AST 中。然后,Angular 语言服务会在其上下文中查找 data.---
,询问 TypeScript 语言服务 data
的成员是什么,并返回可能性列表。
显示英雄列表本页中,你将扩展《英雄之旅》应用,让它显示一个英雄列表,并允许用户选择一个英雄,查看该英雄的详细信息。要查看...
创建库对于如何创建和发布新库,以扩展Angular的功能,本页面提供了一个概念性的总览如果你发现自己要在多个应用中解决同样的问...
从AngularJS升级到AngularAngular是现在和未来的Angular名称。AngularJS是所有1.x版本的Angular的名称。有很多大型AngularJS应用...
AngularJS Scope(作用域)本节为你介绍了什么是AngularJSScope(作用域)以及 Scope 在 AngularJS 应该如何使用。Scope(作用域) 是...
AngularJS Include(包含) 本节介绍了AngularJSInclude(包含) 的知识,你将学习如何使用ng-include指令。使用 AngularJS, 你可...
XHR和依赖性注入 本文主要为你介绍了 AngularJS XHR 和依赖注入,这里整理了详细资料和示例代码在硬编码的数据集中有三款手机的...
Angular是当下非常流行的前端框架,受到了广大前端开发者的喜爱。下面,将为大家列出一些经典的Angular面试题以及答案,供大家参...
HTMLIndex 文件public/index.html文件是一个会被html-webpack-plugin处理的模板。在构建过程中,资源链接会被自动注入。另外,Vu...
核心概念系统里有两个主要的部分:@vue/cli:全局安装的,暴露vue create app命令;@vue/cli-service:局部安装,暴露vue-cli-se...