复杂性超过 AngularJS 控制器中的授权(SonarLint 问题)

2023-12-13

I use 声纳林特 with Eclipse,我正在使用编写一个应用程序AngularJS。我的控制器有问题,所以我试图清理一下它以便看得更清楚,然后 SonarLint 向我弹出了一个问题:

函数的复杂度为 11,大于授权的 10。

这是我的控制器的代码:

app.controller('LauncherCtrl', function ($scope, $http) {

    $scope.genStatus = "stopped";

    $scope.startgenerator = function() {
        $http.get('/start').success(function () {
            $scope.updateStatus();
        });
    };

    $scope.resumegenerator = function() {
        $http.get('/resume').success(function () {
            $scope.updateStatus();
        });
    };

    $scope.suspendgenerator = function() {
        $http.get('/suspend').success(function () {
            $scope.updateStatus();
        });
    };

    $scope.stopgenerator = function() {
        $http.get('/stop').success(function () {
            $scope.updateStatus();
        });
    };

    $scope.updateStatus = function() {              
        $http.get('/status').success(function (response) {
              $scope.genStatus = response.data;
        });
    };

    $scope.updateStatus();
});

难道是有什么问题吗?我认为这个问题与太多嵌套循环/函数有关,但据我所知,事实并非如此(除了调用更新的函数 start/stop/resume/pause 之外,但它不是复杂性 11,是吗? ?)。 + 我仔细检查了括号/圆括号,我不认为问题来自那里。


如果你想消除复杂性,你可以创建一个函数:

    $scope.startgenerator = function() {
        $http.get('/start').success(function () {
            $scope.updateStatus();
        });
    };

    $scope.resumegenerator = function() {
        $http.get('/resume').success(function () {
            $scope.updateStatus();
        });
    };

    $scope.suspendgenerator = function() {
        $http.get('/suspend').success(function () {
            $scope.updateStatus();
        });
    };

    $scope.stopgenerator = function() {
        $http.get('/stop').success(function () {
            $scope.updateStatus();
        });
    };

to

$scope.generatorAction = function(action) {
    $http.get('/' + action).success(function () {
        $scope.updateStatus();
    });
};

然后像这样使用它:

$scope.generatorAction('stop');

或者使用处理您的 http 请求的服务,这是更好的做法。

Edit:

我正在将这个样式指南用于我的角度应用程序:https://github.com/johnpapa/angular-styleguide/blob/master/a1/README.md

为您的 http 请求创建一个简单的服务:

(function() {
  'use strict';

  angular
    .module('yourModuleName')
    .factory('generator', generatorFactory);

  function generatorFactory($http) {

     var service = {
        start: start,
        resume: resume,
        suspend: suspend,
        stop: stop
     }

     return service;

     function start() {
        return $http.get('/start');
     }

     function resume() {
        return $http.get('/start');
     }

     function suspend() {
        return $http.get('/suspend');
     }

     function stop() {
        return $http.get('/stop');
     }
  }

})();

然后在你的控制器中:

app.controller('LauncherCtrl', function ($scope, generator, $http) {

    $scope.genStatus = "stopped";

    $scope.startgenerator = function() {
        generator.start().then(function () {
            $scope.updateStatus();
        });
    };

    $scope.resumegenerator = function() {
        generator.resume().then(function () {
            $scope.updateStatus();
        });
    };

    $scope.suspendgenerator = function() {
        generator.suspend().then(function () {
            $scope.updateStatus();
        });
    };

    $scope.stopgenerator = function() {
        generator.stop().then(function () {
            $scope.updateStatus();
        });
    };

    $scope.updateStatus = function() {              
        $http.get('/status').success(function (response) {
              $scope.genStatus = response.data;
        });
    };

    $scope.updateStatus();
});

首先,您的应用程序似乎需要更多代码和更多复杂性,但如果您需要在其他页面或组件/指令中停止生成器,您只需注入“生成器”服务并执行generator.stop();通过这样做,如果有一天您的端点 URL 发生了变化,您只需在服务中进行更改即可。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

复杂性超过 AngularJS 控制器中的授权(SonarLint 问题) 的相关文章

  • Analytics.js:“auto”参数在跟踪对象创建方面有何作用?

    我刚刚切换到新的 Google Analytics 分析 通用分析 https support google com analytics answer 2790010 hl en GB平台 使用新的 javascript API 分析 js
  • 固定长度的随机数

    我想生成一个 0 9 数字且长度 5 的随机整数 我尝试这样做 function genRand min max for var i 1 i lt 5 i var range max min 1 return Math floor Math
  • 当按下 html 键盘按钮时,将文本添加到输入字段(具有焦点的字段)

    我使用 HTML 创建了一个屏幕键盘 div and a 标签 页面上有六个文本输入 名字 昵称 姓氏 注释 过敏 手机号码 我不太擅长 JS 但如果页面上只有一个输入 我确实知道该怎么做 但我不确定当有多个输入时该怎么做 我遇到的问题之一
  • firebug 打开后断点重复触发

    当我在一个站点上打开 firebug 时 我无法分析任何内容 因为每隔几秒就会在该行上触发一个断点 function function a try function b i if i i length 1 i 20 0 function c
  • 如何在严格模式下设置元素样式属性?

    Given body document getElementsByTagName body 0 iframe document createElement iframe iframe src protocol settings script
  • .addClass 仅添加到无序列表中单击的项目符号

    我有一个简短的无序列表 其中有两个项目符号 我添加了一些 Javascript 这样当我单击项目符号时 它会向其中添加一个类 问题是 它将该类添加到所有现有的 li 中 而不仅仅是我单击的那个 这是 JSFiddle http jsfidd
  • 解密签名并验证 JWT

    我知道还有其他库可以让我更轻松地使用 JWT 在 Node js 中 在本例中 我使用 crypto js 以手动方式学习 JWT 以下给了我令牌 var header alg HS256 typ JWT var wordArrayHead
  • 使用 javascript/jquery 检查 .css 样式表的名称

    我正在尝试为论坛制作一个小 chrome 扩展 但我只希望它在论坛的某个区域中工作 问题是我不能只做 matches subforum 因为该论坛中的线程无法通过 URL 区分它们所在的子论坛 subforum 有自己的 css 样式表 所
  • 缩放对象上的弹跳动画

    拥有对象比例 然后在返回到原始比例因子之前以该比例因子执行弹跳动画的最佳方法是什么 我意识到我可以做一些事情 比如将其缩放到 2 2 然后 1 8 然后 2 0 但我正在寻找一种方法 您只需在比例因子上执行弹跳动画 因为我的比例因子会改变
  • 声纳要求将这一领域定为最终目标

    我的程序中有以下代码 在与 Maven 集成后 我正在运行 SonarQube 5 对其进行代码质量检查 我面临这个错误 将此 public static processStatus 字段设为最终字段 将此 public static pr
  • 重写node.js中其他模块中的函数

    我正在尝试在 Node js 应用程序中使用 nodeunit 存根函数 这是我正在尝试做的事情的简化版本 In lib file js var request require request var myFunc function inp
  • SVG 沿圆弧添加文本

    我正在尝试绘制 SVG 径向饼图 如下所述 色卡 https stackoverflow com a 18210763 1395178 现在我尝试将文本与圆弧一起添加到每个切片 我试图展示Text 1具有与 M 和 A 值完全相同的 x y
  • 如何取消 ComponentWillUnmount 中的所有请求?

    根据docs https facebook github io react docs react component html componentwillunmount ComponentWillUnmount 能够取消请求 我有一个页面发
  • 动态添加项目到放大弹出画廊

    有没有办法动态添加图库项目华丽的弹出窗口 http dimsemenov com plugins magnific popup 那已经开放了 或更新当前项目 找不到关于 in 的任何内容插件文档 http dimsemenov com pl
  • Google 脚本过滤一个值的范围

    我想过滤第 1 列中仅包含 Bob 特定值的行的 google 工作表范围 到目前为止 我的代码允许我过滤out第 1 列中有 Bob 的行 我需要相反 我想返回第 1 列中只有 Bob 的行 因此 其中 filterSettings 不是
  • 如何使用复选框在 angularJS 中过滤多个值(或运算)

    如何使用Checkbox在angularJS中过滤多个值 OR运算 ul li movie name li ul
  • 使用 JavaScript 自动提交表单

  • 有没有办法避开 Google 路线中的特定道路或坐标?

    API 有一个航路点参数 以便 API 计算经过指定航路点的路线 有什么方法可以给出要避开的航路点而不是要经过的航路点 它 目前 尚未实施 有一个开放的功能请求 问题 214 影响方向的能力 例如 避免 路障 https code goog
  • 将 ERB 与 Handlebars 模板结合使用

    我有一个使用 ajax 创建新标签的模式 它使用 Tags 参数执行 POST 方法 而无需重新充电视图 因此 我希望根据所选的 price type 参数来呈现一个或另一个价格 div 我使用 Handlebars 所以我想这不是 rub
  • 如何在JAVascript中删除具有相同ID但display='block'和display='none'的div

    我有超过 1 个 div 具有相同的 id 但其中一个具有 display block 和其他人有显示 无 我想删除所有具有 display none 的 div 请告诉最简单的方法 文档中多个元素具有相同的 id 是违反 W3 标准的 请

随机推荐

  • php计算浮点数

    我这里有一个奇怪的数学计算 我希望有人能解释一下 a 1 85 100 b 1 5 100 c 1 1 100 d 0 4 100 e 0 4 100 f 0 4 100 g 0 4 100 h a b c d e f g echo h 1
  • 在opencv中读取像素的HSV值

    你会如何读取 HSV 格式而不是 RGB 格式的像素值 下面的代码以 RGB 格式读取圆心的像素值 HSV 的读数值有很大差异吗 int main int argc char argv load image from directory I
  • 使用 Gradle 有条件地在 AndroidManifest.xml 上添加 标记

    我有一个应用程序 仅具有用户无法直接访问的服务 接收器和活动 没有启动器活动 但现在我必须添加一个活动用作启动器活动BUT仅当应用程序在构建期间设置了某些特定变量时 才必须存在此启动器活动 所以基本上 当调用 gradle build 时
  • 如何访问此复杂 JSON 中的嵌套数据(其中包含另一个 JSON 文档作为字符串之一)?

    我有一些 JSON 数据 例如 status 200 msg data time 1515580011 video info announcement announcement id 6 name INS u8d26 u53f7 icon
  • MySql触发器删除同表中的子记录

    我有一个表 其中存储父记录和子记录 我试图创建一个触发器 在删除父记录时删除所有子记录 Delete From tbl Where ParentId OLD Id 虽然我可以成功保存触发器 但在删除时出现此错误 错误 1442 无法更新存储
  • 从 .net 代码停止 SQL 查询执行

    我正在从 net 代码执行一个存储过程 由于数据量很大 执行起来需要很长时间 有什么方法可以从 C 代码中停止此执行吗 换句话说 如果我们从数据库本身执行查询 有一个选项可以停止其执行 但在代码中可能吗 是的 sqlcommand canc
  • jQuery 验证 - 使用 AJAX 调用验证电子邮件

    我有一个邀请表单 该表单只能接受由 GMail 处理的电子邮件 我正在尝试插入异步验证 但不确定应该从服务器返回什么以及要使用哪些 Javascript 处理程序 如果有人输入 Yahoo 电子邮件 我想在电子邮件输入字段旁边显示 不是 G
  • 将照片填充到 html div 的 php 脚本

    我目前有一个大约 250 jpeg 的图片页面 图像 我目前有一个网页 我在其中手动将图片分配给页面上的某个部分 但是这非常耗时 并且希望创建一个脚本来运行并将图像分配给 div 虽然这通常很容易 但我的问题是他们提交图像的方式 在网页上
  • ioslides markdown 演示幻灯片中的全尺寸闪亮应用程序

    试图弄清楚如何在 ioslides markdown 中拥有一个全尺寸的闪亮应用程序 我有一些东西几乎可以工作 但它有点临时 我也不相信当我在更高分辨率的屏幕上显示演示文稿时它会重现 因为我使用px in the div title My
  • 如何修复返回编码的 Youtube API 结果标题

    我在用着youtube 搜索 1 1 4查找视频 问题是我得到的结果标题编码为 amp or 39 而不仅仅是 and 和更多 我从下面的示例代码中得到的一个结果的示例 再次 故意在字符之间添加空格 title Post Malone qu
  • AWS EC2 实例无法连接到 bitbucket.org

    EC2 Details OS Ubuntu 16 04 Git client git version 2 7 4 Issue 我无法从 AWS 实例连接到 bitbucket org 存储库 尝试 ping bitbucket org 但没
  • Angular 2 路由在新选项卡中运行

    我正在使用 angular2 处理 ASP NET Core 应用程序 并且我的路由工作正常 a target self Associates a a Account managers a 我想在新选项卡中打开每个页面链接 routerLi
  • 启用并测试 UART 的本地环回

    我正在尝试进行 UART 内部环回测试并提出以下更改 include
  • azure pipelines - 如何根据条件任务结果中断/取消发布

    我有一个由 CI 触发的发布管道 我想在其中推送新版本的 nuget 包如果该版本尚不存在 为此 我有一个简单的命令行任务 它检查 nuget org 上是否存在该 nuget 并将结果存储在环境变量中 然后 我可以设置后续步骤的条件 仅当
  • Django + SWFUpload 的代码示例?

    有人有 Django 的简单代码示例吗SWF上传 我让它在我的 PHP 应用程序中完美运行 但 Django 却让我头疼 不幸的是 我无法为您提供任何非常详细的代码示例 但我在使用 SWFUpload Django 方面拥有相当多的经验 对
  • 将变量注入 Mono.CSharp.Evaluator(运行时从字符串编译 LINQ 查询)

    我正在使用 Mono CSharp 库来发出代码 在 SO 的另一个问题 http stackoverflow com questions 3407318 mono compiler as a service mcs 之后 我设法让 Mon
  • 是否可以为 Git 中的分支添加别名?

    我正在考虑大规模使用 Git 我希望通过致电来增加采用率并使事情变得更容易master branch trunk 这可以并且将会给 SVN 用户带来一些安慰 我知道我可以创建一个名为trunk 但这似乎偏离了 Git 规范 可能会导致一些用
  • 如何将日期放在 barplot() x 轴上?

    gt dates 2020 10 03 2020 10 04 2020 10 21 gt class dates 1 Date values c 110 90 90 cols ifelse values gt 0 green red bar
  • 如何在 C++ 中使用 HidD_GetHidGuid()?

    我已经发布了类似的主题 问题 但这次有点不同 我只是尝试使用 HidD GetHidGuid 函数来获取某些 hid 设备的窗口 guid 但它给了我一个错误 LNK2019 函数 main 中引用的无法解析的外部符号 HidD GetHi
  • 复杂性超过 AngularJS 控制器中的授权(SonarLint 问题)

    I use 声纳林特 with Eclipse 我正在使用编写一个应用程序AngularJS 我的控制器有问题 所以我试图清理一下它以便看得更清楚 然后 SonarLint 向我弹出了一个问题 函数的复杂度为 11 大于授权的 10 这是我