我正在处理一个有角度的应用程序,并且我遇到了jslint抱怨未使用参数的问题。您可能知道,角度控制器需要" $ scope"作为控制器定义中的第一个参数传递。在我的具体情况下,我不想使用$ scope对象,而是使用" this"关键词。我可以使用$ scope或this来使代码工作,但由于其他我认为不相关的原因,我需要使用"这个"而不是" $ scope"。如果你必须知道原因,我很乐意提供一个链接,帮助解释为什么我要做出这个判断。
我发现这篇文章解释了如何关闭所有未使用参数的警告。
https://jslinterrors.com/unused-a
这很有效,但它并不理想,因为我不知道除了我已经知道的那个之外还有其他未使用的参数(并且还可以)。
我知道您可以打开unparam警告,然后再将其关闭,但这仍然无法解决我的问题,因为它是我的其余代码块希望允许jslint检查,而不是这个特定的变量($ scope)。我有很多这些类型的文件,不幸的是,它们都有类似的问题。这是我的代码:
/*globals angular, console, document */
(function() {
'use strict';
/**
* @ngdoc function
* @name app.controller:UserLogoutController
* @description
* Loggs out the current active user
*
*/
/*jslint unparam: true */
angular.module('myAppName')
.controller('UserLogoutController', ['$scope', 'userService', 'appConfig',
function ($scope, userService, config) {
this.logout = function() {
//logout logic goes here
};
}
]);
/*jslint unparam: false */
angular.module('myAppName')
.directive('logoutbtn', function() {
return {
restrict: 'E',
replace: true,
templateUrl: './user/userLogout.html',
controller: 'UserLogoutController',
controllerAs: 'logout'
};
});
}());
这就像我能够达到我正在寻找的东西一样接近。对于它的价值,我还尝试将$ scope添加到顶部的globals部分,并且也不会抑制警告。我能够做的就是这样的事情
/*jslint unparam: "$scope" */
或
/*jslint unparam: [$scope] */
因此jslint只忽略这一个未使用的参数,但仍会警告其他任何未使用的参数。你能给出的任何建议都会很棒。如果您需要更多详细信息,请告诉我,我很乐意提供。在此先感谢!!!
答案 0 :(得分:2)
两个答案。首先,如果您使用“Old JSLint”,第二个更容易,如果您使用今年早些时候发布的“New JSLint”并且最近离开了测试版。
“旧JSLint”的底线:如果没有黑客行为,你就无法做到这一点。
幸运的是,根据您使用JSLint的方式,黑客攻击可能非常简单。
我将使用the last version of JSLint before the "New JSLint" beta, from July 8, 2014。
转到line 3177。从......
更改现有代码if (!master.used && master.kind !== 'exception' &&
(master.kind !== 'parameter' || !option.unparam)) {
master.warn('unused_a');
} else if (!master.init) {
master.warn('uninitialized_a');
}
......对于这个kludged版本......
if (!master.used && master.kind !== 'exception' &&
(master.kind !== 'parameter' || !option.unparam)
&& "$scope" !== master.string // <<< Add your exception.
) {
master.warn('unused_a');
} else if (!master.init) {
master.warn('uninitialized_a');
}
......瞧。你已经完成了。
如果你想制作一个更复杂的案例,你有很多选择来添加选项。您可以通过破解JSLint的选项来添加新的unparam语法。您可以将一个可忽略的param名称数组设置为一个轻微的kludged全局对象,并使用indexOf
来检查该更改的行而不是单个字符串比较。不管。
但如果这是一次性的交易,那么上面的黑客攻击就是快速而肮脏的方法。你明白了。 JSLint的优点在于,您可以使用与linting相同的语言自定义JavaScript。
同样,如何启动使用新代码取决于您如何调用JSLint。
如果你正在使用the latest jslint,那么你运气不错;您每次都可以使用the ignore
convention跳过$scope
。这是一个例子,使用您的代码作为起点:
/*jslint white:true, this:true */
/*globals angular, console, document */
(function() {
'use strict';
/**
* @ngdoc function
* @name app.controller:UserLogoutController
* @description
* Loggs out the current active user
*
*/
angular.module('myAppName')
.controller('UserLogoutController', ['$scope', 'userService', 'appConfig',
function (ignore, userService, config) {
this.logout = function() {
console.log("logout logic goes here");
};
}
]);
angular.module('myAppName')
.directive('logoutbtn', function() {
return {
restrict: 'E',
replace: true,
templateUrl: './user/userLogout.html',
controller: 'UserLogoutController',
controllerAs: 'logout'
};
});
}());
ignore
对于这个用例几乎是完美的,因为未使用的param是第一个参数,并且每个函数签名/声明只能使用ignore
一次。