根据范围选择更改流程图数据数组的最佳方法是什么?

2023-12-15

我正在使用 AngularJSflot and slider要显示一些图表,并根据范围选择,数据可视化应该在流程图中发生变化。

我的问题是根据范围选择可视化数据的最佳方法是什么?我是否需要在每次选择范围时添加/删除图表数据,或者是否有更好的方法?我在下面提供我的源代码和一些屏幕截图。请帮忙。

Note: $scope.tasksRunDataChartObject;有来自服务器的 json 数据,格式为流程图

Slider screenshot and code enter image description here

<rzslider rz-slider-floor="reportTasksRunRange.floor" 
    rz-slider-ceil="reportTasksRunRange.ceil" 
    rz-slider-model="reportTasksRunRange.min" 
    rz-slider-high="reportTasksRunRange.max" 
    rz-slider-translate="translate" rz-slider-step="{{reportTasksRunRange.step}}"></rzslider>

<flot dataset="tasksRunData" options="tasksRunChartOptions" class="center-block" width="100%" height="400px" ></flot>

$scope.reportTasksRunRange = {
    min: 1412380800000,
    max: 1412812800000,       
    floor: 1412380800000,
    ceil: 1412812800000,
    step: 1412467200000-1412380800000
};

$scope.translate = function(value) {
    var monthNames = [ "Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec" ];
    var myDate = new Date( value );
    return myDate.getDate() + " " + monthNames[myDate.getMonth()] + " '"+myDate.getFullYear();
}

$scope.$on('slideEnded', function () {
     console.log("slideEnded Event Fired : " +$scope.translate($scope.reportTasksRunRange.min)+" - "+$scope.translate($scope.reportTasksRunRange.max));
     $scope.redrawTasksRunDataHistoByChart($scope.translate($scope.reportTasksRunRange.min), $scope.translate($scope.reportTasksRunRange.max));             
});

$scope.redrawTasksRunDataHistoByChart = function(min, max) {
    var mainArray = $scope.tasksRunDataChartObject;
    console.log("mainArray");
    console.log(mainArray);
    /*var dataArray = mainArray[0]["data"];        
    dataArray.splice(2,1);
    mainArray[0]["data"] = dataArray;
    mainArray[0]["data"] = mainArray[0]["data"].splice(2,1);
    $scope.tasksRunData = mainArray;
    console.log(mainArray);*/
}

来自服务器的Json数据

{
    "date_histo_agg_by_type": {
        "took": 332,
        "timed_out": false,
        "_shards": {
            "total": 5,
            "successful": 5,
            "failed": 0
        },
        "hits": {
            "total": 14868,
            "max_score": 0.0,
            "hits": []
        },
        "aggregations": {
            "task_type": {
                "buckets": [{
                    "key": "DSS",
                    "doc_count": 14868,
                    "run_over_time": {
                        "buckets": [{
                            "key_as_string": "2014-10-04T00:00:00.000Z",
                            "key": 1412380800000,
                            "doc_count": 477
                        },
                        {
                            "key_as_string": "2014-10-05T00:00:00.000Z",
                            "key": 1412467200000,
                            "doc_count": 3015
                        },
                        {
                            "key_as_string": "2014-10-06T00:00:00.000Z",
                            "key": 1412553600000,
                            "doc_count": 2988
                        },
                        {
                            "key_as_string": "2014-10-07T00:00:00.000Z",
                            "key": 1412640000000,
                            "doc_count": 3123
                        },
                        {
                            "key_as_string": "2014-10-08T00:00:00.000Z",
                            "key": 1412726400000,
                            "doc_count": 2970
                        },
                        {
                            "key_as_string": "2014-10-09T00:00:00.000Z",
                            "key": 1412812800000,
                            "doc_count": 2295
                        }]
                    }
                }
            }
        }
    }
}

Chrome调试截图

enter image description here

Update

ReportService.getTasksRunDateHistoByType().then(function(result) {
    $scope.renderTasksRunDateHistoByType(result);
});

$scope.renderTasksRunDateHistoByType = function(json) {

    var buckets = json[RUN_AGG_BY_DATE_HISTO].aggregations[TASK_TYPE_AGG].buckets;
    var log = [];
    var mainArray = [];
    var colorCodes = ["#7BC253","#9C77D7","#399CEA","#FF6244","#FF7FB5","#00D3AB","#FFCC4C","#193441","#193441","#BEEB9F","#E3DB9A","#917A56"],
        idx = 0;
    angular.forEach(buckets, function(value, key) {        
        this.push(key + ': ' + value +", "+value["key"]);
        var dataArray = [], index = 0;
        angular.forEach(value[RUN_OVER_TIME_KEY]["buckets"], function(value, key) {
            var dataArr = [];
            dataArr.push('['+value["key"]+', '+value["doc_count"]+']');
            dataArray.push(dataArr);
            index++;
        }, log);
        var barObject = '"bars": {"show": "true", "barWidth":'+23*60*60*1000+', "fillColor": "'+colorCodes[idx]+'", "order": 1, "align": "center"}';            
        var object = '{ "data": ['+dataArray+'], "label": "'+value["key"]+'", '+barObject+'}';            
        mainArray.push(JSON.parse(object));
        idx++;
    }, log);
    $scope.tasksRunData = mainArray;
    $scope.tasksRunChartOptions = {
        legend: {
            show: true,
            margin: 2
        },
        xaxis: {
            mode: "time", timeformat: "%m/%d/%y", minTickSize: [1, "day"]
        },
        grid: {
            labelMargin: 10,
            hoverable: true,
            borderWidth: 0
        },
        series: {
            stack: true
        },
        colors: colorCodes,
        tooltip: true
    };
    return mainArray;
}

Angularjs 服务

angular.module('myApp')
.service('ReportService', function ReportService($http, $q) {

    var getTasksRunDateHistoByType = function() {
        var deferred = $q.defer();
        $http({
            method: 'POST',
            url: "http://localhost:4040/reports/taskRun",
            data: '{ "client_user_info": { "client_id": "MU03"}}'
        }).
        success(function(result, status, headers, config) {
            deferred.resolve(result);
        }).
        error(function(result, status, headers, config) {
            console.log("Error");
        });
        return deferred.promise;
    };

    return {
        getTasksRunDateHistoByType: getTasksRunDateHistoByType
    };
});

流程图

enter image description here


从您的问题来看,您似乎正在对slideEnded事件并交换图表上的数据。这可以工作,但速度会很慢,并且不会提供最佳的用户体验。相反,我会用所有数据绘制整个图表。然后,当用户滑动并重绘时,我会调整图表的最小/最大。这样,您只需在加载时创建一个 AJAX 即可填充所有数据,并且图表可以快速更新。

BUT, 我们出现了问题。您正在使用的角度指令仅监视一件事以触发适当的流程重绘 - 绘图的数据集。不过,如果它也能监视您的行为,那不是很棒吗?$scope.reportTasksRunRange.min and $scope.reportTasksRunRange.max如果这些改变触发重画?这确实是 AngularJS 数据绑定的核心!

那么,让我们“修复”该指令。您需要做的就是首先更改范围:

scope: {
  dataset: '=',
  min: '=',
  max: '=',
  options: '=',
  callback: '='
},

并添加几个$watch:

  onMinChanged = function(min) {
    if (plot) {
      plot.getOptions().xaxes[0].min = min;
      plot.setupGrid();
      return plot.draw();
    }
  };
  onMaxChanged = function(min) {
    if (plot) {
      plot.getOptions().xaxes[0].max = max;
      plot.setupGrid();
      return plot.draw();
    }
  };
  scope.$watch('min', onMinChanged, true);
  scope.$watch('max', onMaxChanged, true);

这是我的example把这个放在一起。

Angularjs 的强大...

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

根据范围选择更改流程图数据数组的最佳方法是什么? 的相关文章

  • AngularJS 复制到剪贴板

    有没有办法制作一个具有复制功能的复制按钮 该按钮将复制模态的所有内容 然后您可以将其粘贴到记事本中 我需要这个功能Controller 由于要复制的文本是动态的 这是我基于中的代码的简单函数剪贴板 https github com nico
  • 无法在简单的 Yeoman Angular 上使用 grunt

    尝试使用本指南中的步骤通过 Yeoman 启动一个简单的角度应用程序http www sitepoint com kickstart your angularjs development with yeoman grunt and bowe
  • 为什么 AngularJS 不在其 isArray 函数中使用 instanceof ?

    来自 AngularJSisArray source return toString call value object Array 他们为什么不一起去 return value instanceof Array 因为如果你从不同的地方收到
  • Angular UI 网格 - 选定行上的单击事件

    Target 我有一个 UI 网格 当我单击一行时 它应该被选中 并且应该调用以该行作为参数的函数 目前的方法 我使用以下配置代码来生成网格 scope gridOptions enableFiltering true enableRowH
  • 使用 Web api 的 AngularJS 客户端路由和令牌身份验证

    我想使用 asp net mvc webapi 作为后端和客户端路由 无 cshtml 在 SPA angularjs 应用程序中创建一个身份验证和授权示例 以下只是可用于设置完整示例的函数示例 但我就是无法把它们放在一起 任何帮助表示赞赏
  • 使用 ngSanitize 在 HTML 中注入“ng-click”

    我正在使用 Angular 进行本地化 但我遇到了最后一件事 我有这个 json blob key need to login value You need to a log in a to add an event description
  • 将 jquery Ui.ressized() 与 AngularJs 一起使用

    我的模板之一中有一个 DOM 元素 我想使用 jqueryUi 调整其大小 总而言之 我有一个 div 我的模板中名为 test 的元素 除此之外 我还尝试添加脚本来实际在多个位置调整大小 但我已经完全扭转了局面 我一度认为指令可能是正确的
  • HTML css 表未对齐列

    我尝试在 AngularJS 中创建一个带有粘性页眉和页脚的表格 我已经成功做到了 这是一个笨蛋演示 https plnkr co edit NJenZui4atfdbdrjYz5S p preview和代码 table class tab
  • Angular ng-repeat 导致闪烁

    我正在使用以下代码显示缩略图列表 div class channel img class channel img div 在控制器中 我有一个 ajax 请求 它可以获取新的缩略图 因此 Angular 会更新图像 但会导致闪烁 有没有办法
  • Angular 中的动态标签生成

    我正在尝试使用包含一堆指令名称的数组动态生成表单 scope components textbox textbox radio checkbox label 我想使用 Angular 生成具有这些名称的标签 例如
  • 为什么我的 JavaScript 构造函数返回默认属性值而不是修改后的值?

    我正在使用 Material Steppers 开发一个小型 AngularJS 应用程序 我必须从页面的两个部分中选择项目并返回true only if的物品来自两个部分属于 id 为 categoryID 1 class Control
  • 角度2:语法错误:意外的标记<(...)

    我知道 这个问题已经被问过 但我找不到适合我的特定情况的解决方案 我无法理解错误的真正原因 我有一个运行良好的 angularjs2 应用程序 现在我想导入marked图书馆 我做了什么 npm install marked tsd ins
  • jquery metisMenu 无法在 ng-include 内工作

    我想用ng 包含渲染侧边栏template http startbootstrap com templates sb admin 2 模板要求jQuery metisMenu 插件对于下拉菜单 Issue 仅插件works当我加载以下脚本时
  • cookie 未在跨域上设置 - AngularJS 和 NodeJS/Express

    跨域请求时未设置 cookie 我的服务器在 localhost 8000 中运行 客户端在 localhost 9000 中运行 服务器nodejs express上的cors设置是 app use function req res ne
  • Angularjs 中的动态表单名称属性

    当动态创建 inputName 时 人们将如何使用 formName inputName valid
  • 我应该在mean.js中添加模块依赖项(对于ng-sortable)

    我正在尝试将 ng sortable 添加到我的基于mean js 的应用程序中 https github com a5hik ng sortable https github com a5hik ng sortable 按照安装说明并将其
  • 找到每个元素的所有父元素

    我正在尝试创建一个面包屑而不使用 url 路由提供者 并且不使用 jQuery 我有一棵这样的树 Humans Trees Animals Cats Lions Dogs Terrier Bulldog Cocker Cars 我希望当我点
  • 使用像 angularjs 这样的框架对可访问性有什么影响?

    我们的立场 我们正在推动网络可访问性 以便遵守管理公共 教育机构的某些法律 到目前为止 我们一直在确保 我们的布局是按逻辑顺序排列的 图像有alt 标签 但很快我们就意识到我们需要行动起来并认真思考这个问题 我们正在考虑什么 我们一直在关注
  • IPython笔记本交互功能:如何设置滑块范围

    我在 Ipython 笔记本中编写了下面的代码 生成一个由参数 a 控制的 sigmoid 函数 a 定义了 sigmoid 中心的位置 b 定义了其宽度 matplotlib inline import numpy as np impor
  • 路由和干净路径(无主题标签)在 angularJS 中不起作用

    伙计们 这让我发疯了 我为此奋斗了几个小时 却找不到解决方案 我知道为了从 URL 路径中清除主题标签 我需要使用 locationProvider html5Mode true 但由于某种原因 这对我来说效果不佳 我使用 tomcat 7

随机推荐

  • 线程池程序在速度更快的服务器上运行速度要慢得多

    upd我现在认为我的问题的根源不是 线程 因为我观察到程序的任何一点都变慢了 我认为当使用 2 个处理器时 我的程序执行速度会变慢 可能是因为两个处理器需要彼此 通信 我需要做一些测试 我将尝试禁用其中一个处理器 看看会发生什么 我不确定这
  • 使用 C++11 的 CUDA 6.0 的 CMake 脚本

    我正在为我的 CUDA 6 0 Boost 1 55 0 OpenCV 2 4 9 项目开发 64 位 Mac OSX 10 9 使用 makefile 进行编译 但由于我最终将在 64 位 Windows 8 1 上测试它 我想我 熟悉
  • Delphi中使用SetupDiGetClassDevs进行串口枚举

    我正在尝试枚举 COM 端口的 友好名称 当 USB 串行设备在运行时连接和断开时 端口可能会动态变化 基于中描述的可能方法这个问题 我正在尝试使用 SetupDiGetClassDevs 方法 I found 这个示例代码 但它是为旧版本
  • X.509 安全 Web 服务的 Java 客户端

    我有使用 X 509 证书保护的远程 Web 服务 我生成了 Web 服务客户端内容 使用 jax ws 但需要配置 if 以用于证书的使用 我应该如何进行 我想我应该在本地受信任的密钥库中注册证书 他们设置如下 System setPro
  • 利用浏览器缓存第 3 方 JS

    我已经在我的 httpd conf 上设置了 Expiry ExpiresActive On ExpiresDefault access plus 1 month ExpiresByType image gif access plus 1
  • 使用WITH时语法中出现SQL错误[重复]

    这个问题在这里已经有答案了 我想使用带有WITH 子句的SQL 查询 但出现语法错误 我正在使用 MySQL 版本 5 6 28 这是一个简单的代码示例 WITH alias test AS SELECT id title FROM tip
  • 自定义字体显示在 iOS 模拟器上,但不显示在 Storyboard 上

    我的自定义字体在模拟器上运行时工作正常 但是有什么方法可以在我工作时在故事板本身中查看自定义字体吗 我的文本与默认字体的大小不匹配 所以我有继续编译和运行代码 并通过一遍又一遍的尝试和错误来确定正确的大小 我看到了一些关于此的问题 但它只是
  • 如何读取webhooks发送的数据?

    我有最新的 woocommerce 插件 并且必须为我的 URL 之一设置一个 webhook 但我无法在 REQUEST 中读取它 也无法在 input file get contents php input webhookContent
  • 如何获取当前光标作为Texture2D Unity C#

    我有一个问题 我想获取当前光标 并将其作为Unity中的texture2D获取 当我说当前光标时 我的意思是用户当前拥有的光标 例如 如果用户将光标更改为猫 我希望在 Unity 中拥有相同的猫光标 这就是为什么我不只是在线搜索默认光标的原
  • java.lang.ClassCastException:com.sun.xml.bind.v2.runtime.JAXBContextImpl 无法转换为 com.sun.xml.bind.api.JAXBRIContext

    我创建了一个 jaxws Web 服务 我完全遵循了url 服务非常完美 没有任何错误 但是当请求命中时服务器出现错误 SEVERE caught throwable java lang ClassCastException com sun
  • 如何让子进程在父进程退出后终止?

    假设我有一个进程恰好生成一个子进程 现在 当父进程由于某种原因退出时 正常或异常 通过kill C 断言失败或其他任何原因 我希望子进程终止 如何正确地做到这一点 stackoverflow 上的一些类似问题 之前问过 当父进程退出时 如何
  • 进行文件上传并转到另一个PHP页面

    所以我有 4 页 它们很简单 index php 有效
  • 如何在android 2.1中比较系统日期和mydate?

    在我的 Android 应用程序中 我从数据库中获取日期和时间 但我无法将 日期 格式的日期从数据库获取到我的应用程序中 日期为字符串格式 因此我无法将系统日期与数据库日期进行比较 如果我将系统日期转换为字符串 那么我无法在重复的情况下将日
  • 平滑凹凸不平的圆

    我正在检测圆形物体的边缘并获得 凹凸不平 的不规则边缘 是否可以平滑边缘以使形状更均匀 例如 在下面的代码中 我生成了一个 凹凸不平 的圆圈 左 是否有一种平滑或移动平均函数可以用来获得或近似 平滑 圆 右 最好使用某种参数 我可以控制 因
  • 如何扫描 LAN 网络中的设备

    我想在 LAN 网络中进行扫描以查找链接的设备 我正在 IOS 中为 IPAD 开发一个应用程序 我该怎么做 因为这些是移动设备 所以我假设您想要在无线网络上查找设备 理论上 由于 wifi 使用共享介质进行通信 因此您可以被动侦听流经网络
  • 使用 bash 迭代文件(和目录)名称

    我试图编写一个 bash 脚本来计算本地目录的文件数和目录数 这是我的第一次尝试 bin bash files 0 dir 0 for file in ls do if d file then dir dir 1 else files fi
  • 应用程序必须遵循 iOS 数据存储指南,/documents 中没有任何内容,但仍有一些 kb 发送到 iCloud

    我的应用程序因以下原因被拒绝 您的应用程序未按要求遵循 iOS 数据存储指南 根据应用程序商店审查指南 您的应用程序将 4 0 MB 的数据备份到每个用户的 iCloud 空间 发射 请务必为所有设置 不备份 属性 非由用户生成或修改的数据
  • 如何从闭包内部调用实例方法?

    我正在尝试访问 a 中的实例方法map调用 不幸的是我对实例对象的引用被重新定义为 Window 我不确定如何获取我的实例方法 class Test constructor an array gt f gt an array map val
  • .htaccess 301 将一个子域重定向到另一个子域,用于多个 TLD

    我想更改我网站的子域 并希望使我对 301 用户使用的 RewriteRules 更加简单 因为目前我必须有多个规则来涵盖各种可能性 有没有一种方法可以通过一条规则来执行以下操作 subold domain com gt subnew do
  • 根据范围选择更改流程图数据数组的最佳方法是什么?

    我正在使用 AngularJSflot and slider要显示一些图表 并根据范围选择 数据可视化应该在流程图中发生变化 我的问题是根据范围选择可视化数据的最佳方法是什么 我是否需要在每次选择范围时添加 删除图表数据 或者是否有更好的方