Angular 自动完成(即智能感知)在 PhpStorm 中不起作用

Angular autocomplete (i.e. intelli-sense) not working in PhpStorm

我做了以下事情:

  1. 在 Phpstorm 中安装了 AngularJS 和 NodeJS 插件
  2. 已下载 Angular (1.4.8) 的最新稳定版本
  3. 已将 angular.js 添加到项目
  4. 已将 angular.js 添加到 Phpstorm 中的库列表

我的 HTML 中的指令将自动完成(例如 ng-modal),但尝试执行 Module.fact 之类的操作不会自动完成到工厂。这是我的代码:

var appModule = angular.module("appModule", ['ngRoute']);


appModule.fac   //This is me typing factory, but auto complete doesn't help

我是 运行 PhpStorm 10.0.2。我尝试过使用不同版本的 PhpStorm,我也尝试过使用 Angular 1.5(测试版)得到相同的结果。另外,我是 angular 的新手,但我的代码可以正常工作。谢谢!

*我已经查看了这些链接和 SO 帖子:

  1. https://www.jetbrains.com/webstorm/help/using-angularjs.html
  2. https://www.jetbrains.com/webstorm/help/configuring-javascript-libraries.html
  3. Why do AngularJS directives (attributes, etc.) show up as "invalid" in WebStorm 8?
  4. Getting angularJS autcomplete in Webstorm/PHPStorm

angular 变量是一个全局变量,当您必须多次声明同一个全局变量时 PhpStorm/WebStorm 无法处理自动完成。

重要的是验证 PhpStorm 只发现了 angular 的 1 个声明。这与您实际的 JavaScript 项目没有任何关系,但 PhpStorm 查找声明的位置。

如果您按住 ctrl 并将鼠标悬停在世界 angular 上。它应该突出显示它是可点击的,并且工具提示显示它的声明位置。

如果工具提示说标识符有多个定义,那么它不能正确地自动完成。对于 Php/WebStorm 中的大多数 JS 变量都是如此,而不仅仅是这个 angular 变量。

您有几种方法可以解决此问题:

1) 使用 JsDoc 强制类型声明到 TypeScript

/**
 * @var {angular.IAngularStatic} myAngular
 */
var myAngular = angular;

这将使用 TypeScript 定义声明变量 myAngular。不太可能与任何已扫描的同时声明 angular 的 JS 源文件发生冲突。这是一个简单的修复,但会向您的项目添加不必要的源代码。

2) 通过排除

来禁用 JavaScript 源文件

如果您使用的是 node_modulesbower_components,那么您需要包含这些文件夹中的一些 JS 文件,但不要包含不必要的重复文件。你不需要任何 Angular JS 文件,因为你已经安装了 TypeScript 定义(它更适合自动完成)。在 PhpStorm 的 Project Files 面板中找到 Angular 包,右键单击这些文件夹和 "Exclude" 这些文件夹。您也可以通过 "Files / Settings / Directories"

中的项目设置来执行此操作

3) 忽略 JavaScript

的捆绑输出文件

这是我在 PhpStorm/WebStorm 中发现的最常见的问题。 PhpStorm 还将扫描您打包到 webroot/js 文件夹中的缩小 JavaScript 文件。例如;如果你使用 grunt 将你的 JavaScript 代码 uglify 成 app.min.js 并且在那个文件里面是 Angular 和你的项目代码。 PhpStorm 将扫描它并为它找到的所有内容创建重复声明。

在您的项目中找到所有那些重复的 *.js 文件,右键单击这些文件并从菜单中单击 select "Mark as Plain Text"。这将告诉编辑器完全忽略来自所有智能感知扫描的文件。

总结一下。如果您控制单击一个声明以转到源代码,而 PhpStorm 不会立即转到,而是提示您从多个声明中 select,那么您的项目中有重复项,您需要缩小范围。一旦完成,其他一切都应该按预期工作。

如果您更喜欢使用 CDN,请将光标放在突出显示的库名称上,按 Alt+Enter,然后下载库。这将在 WebStorm 的缓存中(而不是在您的项目中)设置一个本地库,以便 WebStorm 可以访问 AngularJS 方法、指令等以进行自动完成和文档查找。