AngularJS intellisense无法在Visual Studio 2015上运行

时间:2015-04-23 17:16:53

标签: angularjs intellisense visual-studio-2015

根据这个post intellisense也应该在新的VS 2015上工作,但到目前为止我只获得了角度对象的智能感知,而不是依赖关系或我的自定义模块。

image

这就是我的所作所为:

  1. 将angular.intellisense.js添加到C:\Program Files (x86)\Microsoft Visual Studio 14.0\JavaScript\References
  2. 的全局javascript引用中
  3. 重启VS2015 然后什么都没有,只要我试图在$ http对象上使用intellisense时它就会显示惊叹号。
  4. 我还将文件添加到与angular.js相同的位置,但它仍然无法正常工作。我在这种情况下的问题是,我应该在哪里放置文件?在只有我的angular.js的角度公用文件夹上,或在我的开发角文件夹中,从凉亭下载的所有文件都是。

    我还尝试将它直接添加到Implicit(Web)引用组的tools / options / text editor / javascriptr / intellisense / reference菜单中,但它仍然没有用。

    在我的项目中,我在src文件夹中有以下文件夹结构:

    • wwwroot的
      • app(我的角色网站的东西)
        • 控制器
        • 服务
        • 视图
      • lib(js依赖项,只有每个库的.min.js文件)
        • 角路线
        • ....
      • _references.js(visual studio js参考文件,包含对app和lib文件夹内文件的引用)
    • 库(包含凉亭下载的完整库)
      • 角路线
      • ...

    作为旁注,我没有/ scripts文件夹,因此没有/scripts/_references.js文件

11 个答案:

答案 0 :(得分:33)

这在Web项目中的Visual Studio 2015 RTM中不起作用,但我解决了这个问题。

此项目不是使用Visual Studio创建的,并且在任何地方都没有_references.js文件。所以我认为这适用于任何情况。

我从VS UI中删除了所有其他智能感知资源,以确保我所做的是修复它的内容。

  1. 转到https://www.angularjs.org并提取下载对话框。
  2. Download AngularJS Dialog Box

    1. 复制未压缩的CDN网址。今天恰好是https://ajax.googleapis.com/ajax/libs/angularjs/1.4.4/angular.js
    2. 在Visual Studio 2015 RTM中,转到Tools, Options, Text Editor, Javascript, Intellisense, References。选择适当的参考组;对于大多数Web项目,这是Implicit (Web)。将网址粘贴在底部文本框中,然后点击添加按钮。不要忽略对话框。 enter image description here
    3. Text Editor, Javascript, Intellisense, General下,确保选中Download remote references
    4. 复选框
    5. 单击确定按钮。
    6. (可选)如果您想要为您创建的角度提供程序(不是角度框架的一部分)进行智能感知,请将_references.js添加到项目的根目录中。不要打扰Scripts文件夹。右键单击它并选择自动同步,然后选择更新。进入它并删除构建过程创建的任何js文件。如果你不这样做,它们可能会如此之大,以至于它们会破坏智能感知。第一次使用intellisense时要做好约5-10秒的延迟,因为它必须从你的项目中加载所有这些引用。
    7. 如果javascript会干扰本地智能感知,您可能需要在Resharper中禁用intellisense。
    8. 重新启动Visual Studio 。直到你这样做才行不通。另外,我首先要关闭除此实例以外的所有其他实例,因此这些设置"坚持"。所以我建议你在重启这个实例之前这样做。

答案 1 :(得分:21)

正如@Balthasar指出的那样(如果你使用的是Resharper),你需要从Visual Studio启用intellisense才能工作:

Resharper - >选项 - >环境 - > intellisense - >一般情况下,选择自定义智能感知'对于Javascript,您可以选择Visual Studio。或者,您可以使用' Visual Studio'声明完成(第二个选项)

enter image description here

答案 2 :(得分:8)

我刚刚意识到_reference.js文件使用的自动命令(首先是我的文件然后是框架的文件)阻止了intellinsense处理不是app.js文件的其他文件

这就是我现在的_references.js的样子:

/// <autosync enabled="false" />
/// <reference path="angular.js" />
/// <reference path="angular-resource.js" />
/// <reference path="angular-ui-router.min.js" />
/// <reference path="jquery-2.1.4.js" />
/// <reference path="materialize/materialize.js" />
/// <reference path="../App/App.js" />
/// <reference path="../App/Controllers/productsController.js" />
/// <reference path="../App/Controllers/productsEditController.js" />
/// <reference path="../App/Controllers/valuesController.js" />
/// <reference path="../common/common.services.js" />
/// <reference path="../common/productsResource.js" />
/// <reference path="../common/valuesResource.js" />

答案 3 :(得分:5)

我遇到了类似的问题,结果发现Resharper阻止了我在_references.js文件中设置的所有优秀的JavaScript intellisense。

答案 4 :(得分:3)

AngularJS的Visual Studio intellisense非常多愁善感(一种很好的说法,它很可能很难开发)。

因此,即使所有内容都使用_references.js文件配置良好,并且您获得了其他库(如jQUERY)的智能感知,您也很可能无法获得AngularJS。

例如,在VS 2015社区中,以下指令不会显示$ http angular对象的intellisense,尽管代码处理正常:

enter image description here

在下图中,我向模块添加了一个空数组(这意味着模块将被创建,如果存在另一个模块,则会被覆盖),并且intellisense开始工作:

enter image description here

以下是您自己测试的代码片段(尝试在此处添加空数组):

(function () {
    'use strict';

    angular
        .module('intellisence.sucks.directives')
        .directive('footer', footer);

    footer.$inject = ['$http'];

    function footer($http) {

        $http.
        var directive = {
            link: link,
            restrict: 'EA'
        };
        return directive;

        function link(scope, element, attrs) {
        }
    }

})();

PS:如果您在解决方案资源管理器中单击项目上的任何文件夹并按Ctrl + Alt + A添加新项目,则会建议添加AngularJs指令,如果你这样做,指令将像我刚刚给你看的那样,在模块声明中没有空数组,所以intellisence将无法使用它。它不适用于Microsoft向用户提供的示例...仅适用于模块创建,您的第一个文件,从现在开始不起作用。

enter image description here

答案 5 :(得分:1)

我有同样的问题。当我添加角度时,VS 2015(RTM)修改了我的_references.js;基本上它删除了我文件中的一些行。当我在_references.js中添加angula的引用时如下

/// <reference path="lib/angular/angular.js" />

我在VS 2015中获得了Angular 1.4.3的智能感受!

答案 6 :(得分:0)

按照这篇文章向VS添加更全面的智能感知。

http://blogs.msdn.com/b/visualstudio/archive/2015/02/05/using-angularjs-in-visual-studio-2013.aspx

下载angular.intellisense.js文件并将其放入Program Files(x86)\ Microsoft Visual Studio 12.0 \ JavaScript \ References文件夹

答案 7 :(得分:0)

我有这个问题。

Visual Studio IDE将扫描HTML文件中引用的任何js文件,并在必要时使用它们(对于intellisense等)。

我的问题是我使用CDN / http://地址引用Angularjs,因此Visual studio没有任何有关角度的信息。

尝试直接下载angularjs js文件并将其包含在index.html的项目和引用中,重建(以防万一)并再试一次,希望它能够正常工作。

希望我帮助过。

答案 8 :(得分:0)

我有来自角度对象的RTM ..apart和hello world复杂性senario($ http和所有自定义对象都不起作用)的问题。遵循_references设置。我唯一的怀疑是我从RC升级到RTM(没有全新安装)在Git上创建了一个问题[link] github.com/jmbledsoe/angularjs-visualstudio-intellisense/issues / ... ..抓住VHD Win 10图像然后去尝试一旦d / l结束:( -

my _reference file with angular added sitting in wwwroot

error with missing intellisense for $http and any other of my custom objects

更新

好的,这里有一点帮助就是答案...... Intellisense引擎永远不会看到名为“sportsStore”的模块被创建,因为它是在脚本块的app.html文件中创建的:

<script>
  angular.module("sportsStore", ["customFilters","cart"]);
</script>

VS Intellisense引擎正在“执行”项目中的代码,以便发现如何完成代码。它使用_references.js文件作为起点,并按顺序执行该文件中的每个引用。由于VS Intellisense从不执行一行代码来创建名为“sportsStore”的AngularJS模块,因此它不知道如何完成代码。

将上面的JavaScript代码移动到自己的JS文件中(让我们称之为“app.js”)并在_references.js中包含对它的引用。确保“app.js”引用紧跟在“angular.js”引用之后,因为在其他脚本文件配置之前需要它来创建模块。 :d

答案 9 :(得分:0)

只需在项目根目录中名为“Scripts”(命名约定)的文件夹中创建一个_references.js文件即可。使用必要的javascript文件更新它,你应该能够获得intellisense。以下是关于为什么需要这样的事情的链接:http://madskristensen.net/post/the-story-behind-_referencesjs

答案 10 :(得分:0)

  

以上都不适合我。我的是Visual Studio 2017-专业版

但是我在这里使用我的解决方案使它起作用->

  1. 即使源位于您编写代码的同一文件夹中,您也必须用括起来的/// <reference path="yourpath"/>来引用源。
  2. 请勿使用缩小版源。您的所有来源都必须未缩小
  3. 如果将路径stmts存储在_reference.js文件中,请确保该文件与代码文件位于同一目录。

尽管我可以将引用stmt放在我的代码文件中,但是我选择使用单独的文件“ _reference.js ”来存储它。

您可以将其与您的代码一起放置:

/// <reference path="../_assets/JS-Main/angular-1.3.13.js" />

var app = angular.module('app', ['ui.grid', 'ui.bootstrap']);
app.controller('MainCtrl', ['$scope', '$http', function ($scope, $http) {

或者您可以在_reference.js文件中输入此行

/// <reference path="../_assets/JS-Main/angular-1.3.13.js" />

 _reference.js at the same dir as your .js files

完成上述所有操作后,您应该可以看到角度的智能感知。

您可以为其他人的智能感知(例如jQuery,Anytime,_underscore等)做同样的事情……只要继续将路径语句添加到_reference.js文件中,如果其他人也可以将_reference.js文件复制到其他网站具有相同的目录结构。祝你好运!