在AngularJS和Controllers中使用jshint

时间:2014-04-22 10:21:37

标签: angularjs jshint

我正在尝试将JSHint合并到我的构建过程中。我正在构建的应用程序使用AngularJS。目前,我有一个冲突,我不知道如何解决。当我构建我的应用程序时,我收到一个JSHint错误:

   src\app\app.js
      3 |var myApp = angular.module('myApp', []);
             ^ Redefinition of 'myApp'.

>> 1 error in 2 files
Warning: Task "jshint:source" failed. Use --force to continue.

我收到此错误,因为在我的.jshintrc文件中,我有以下内容:

“predef”:[“angular”,“myApp”],

如果我删除“myApp”,我会收到一个不同的错误:

src\app\account\welcome.html.js
   3 |myApp.controller('WelcomeController', ['$scope', function($scope) {
      ^ 'myApp' is not defined.

1 error in 2 files

我定义这样的控制器的原因是因为根据AngularJS documentation,您不应该在全局范围内定义控制器。正如你所看到的,如果我这样做,就像我该死的那样,如果我不这样做,那该死的。在构建过程中仍然包含JSHint时,如何遵循AngularJS最佳建议?

谢谢!

4 个答案:

答案 0 :(得分:10)

我认为您可以使用.jshintrc文件中的全局键修复此问题

{
    "node": true,
    "browser": true,
    "esnext": true,
    "bitwise": true,
    "camelcase": true,
    "curly": true,
    "eqeqeq": true,
    "immed": true,
    "indent": 4,
    "latedef": true,
    "newcap": true,
    "noarg": true,
    "quotmark": "single",
    "undef": true,
    "unused": true,
    "strict": true,
    "trailing": true,
    "smarttabs": true,
    "multistr": true,
    "globals": {
        "myApp": false
    }
}

答案 1 :(得分:3)

为什么要定义myApp变量?我用这种方式定义我的应用程序,控制器等。您可以链接多个控制器,工厂等:

angular.module('myApp',[])

.controller("MainCtrl", function($scope) {
    $scope.person = {
        nfname: 'John',
        lname: 'Deighan',
        email: 'john.deighan@gmail.com',
    };
});

答案 2 :(得分:3)

最后给出的示例很好,但如上所述,如果使用空数组作为第二个参数调用.module(),则将重新定义模块依赖项。 为避免这种情况,只将模块名称传递给.module()

angular.module('myApp')

.controller("MainCtrl", function($scope) {
    $scope.person = {
        nfname: 'John',
        lname: 'Deighan',
        email: 'john.deighan@gmail.com',
    };
});

答案 3 :(得分:2)

理由:

为什么要重新定义?

因为您在myApp文件中将.jshintrc设置为predef,所以jshint认为已在此项目目录的所有文件中定义myApp。因此,当您定义myApp时,错误重新定义。

为什么未定义?

因为相同文件中没有myApp的定义。我想你在app.js文件中定义它。正如您所注意到的,在Angularjs文档中,他们的控制器都是在myApp之后定义的,它们位于相同的文件中。

解决方案:

myApp中不需要将.jshint设置为predef或global,我建议您在定义控制器或配置时,执行以下操作:

angular.module('myApp')
.controller('myController',