【问题标题】:Getting jshint to play nice with Angular JS让 jshint 与 Angular JS 配合得很好
【发布时间】:2014-12-07 23:21:49
【问题描述】:

在我的主 app.js 中,我定义了我的应用:

var app = angular.module('ccApp', ['ngCookies', 'ngResource', 'ngSanitize', 'ngRoute']);

在我的各种控制器文件中,我定义了控制器:

app.controller('LoginCtrl', function($scope, $log, $location, $rootScope, $window) {...

这些行都被标记为错误,jshint 为“应用程序未定义”。该应用程序运行良好;当脚本全部连接时,他们会看到变量定义。

我如何让 jshint “理解”这一点而不将其标记为错误?

【问题讨论】:

  • 你用的是什么IDE?
  • 你只需要阅读 jshint 文档。 jshint.com/docs

标签: javascript angularjs jshint


【解决方案1】:

如果app 是全局变量,您可以在配置中预定义变量(让jshint 知道它们存在)(无论是通过.jshintrc 文件还是其他方法:

{
  "predef": ["app"]
}

您还可以使用 jshint 的内联配置在每个文件的基础上执行此操作,方法是将此注释指令添加到文件顶部:

/* global app */

【讨论】:

    【解决方案2】:

    而不是使用

    var app = angular.module('ccApp', ...
    

    你应该使用

    // in app.js once with dependencies
    angular.module('ccApp', ['ngCookies', 'ngResource', 'ngSanitize', 'ngRoute')
    
    // in component files
    angular.module('ccApp')
        .controller('..', ...
    

    这应该照顾你的 jshint。此外,如果您打算将您的应用程序重新用作库,您会遇到问题,因为您已经使用了全局变量 (var app),否则其他人可能会在不知道的情况下使用它并遇到问题。

    【讨论】:

    • 我曾经这样做过,但是一位高级同事说要这样做... Oy。
    • 这是推荐的做法。同样如前所述,它负责污染全局变量空间。
    • 我认为这个想法是让文件能够被放入任何具有主模块“app”的应用程序中
    • 您为特定的应用程序或库开发,而不仅仅是任何应用程序。你真的不应该使用声明模块的全局变量方式。
    猜你喜欢
    • 2016-08-18
    • 2010-09-11
    • 1970-01-01
    • 2011-11-27
    • 2014-04-07
    • 2019-05-18
    • 1970-01-01
    • 2011-10-24
    • 1970-01-01
    相关资源
    最近更新 更多