范文健康探索娱乐情感热点
投稿投诉
热点动态
科技财经
情感日志
励志美文
娱乐时尚
游戏搞笑
探索旅游
历史星座
健康养生
美丽育儿
范文作文
教案论文
国学影视

Thingsboard二次开发系列拷贝篇10widget(03创建简单的小部件)

  素材和版本
  tb-release:3.2.2小部件(Widget类型)
  最新值小部件
  在 Widgets Bundle视图中,单击屏幕右下角的大"+"按钮,然后单击"创建新的小部件类型"按钮。 单击 选择小部件类型弹出 窗口上 的  最新值按钮 。 该 控件编辑器将打开,预先填充默认的内容 最新值小部件模板。
  清除"资源"部分 CSS 选项卡的内容。
  将以下 HTML 代码放在"资源"部分的 HTML 选项卡中:        My first latest values widget.              {{dataKeyData.dataKey.label}}:         {{(dataKeyData.data[0] && dataKeyData.data[0][0]) | date : "yyyy-MM-dd HH:mm:ss" }}         {{dataKeyData.data[0] && dataKeyData.data[0][1]}}        
  将以下 JavaScript 代码放入"JavaScript"部分:     self.onInit = function() {        self.ctx.$scope.data = self.ctx.defaultSubscription.data;     }              self.onDataUpdated = function() {         self.ctx.detectChanges();     }
  单击 小部件编辑器工具栏上 的  运行按钮 ,以便在 小部件预览部分 查看结果 。
  在这个例子中,订阅的数据属性被分配给$scope并且可以在 HTML 模板中访问。在 HTML 中,使用特殊的*ngFor结构角度指令来迭代可用的数据键和数据点,然后使用相应的时间戳呈现最新值。
  时间序列小部件
  在  Widgets Bundle视图中,单击屏幕右下角的大"+"按钮,然后单击"创建新的小部件类型"按钮。 单击 选择小部件类型弹出 窗口上 的  时间序列按钮 。 该 控件编辑器将打开,预先填充默认 时间序列模板控件的内容。
  将"资源"部分中 CSS 选项卡的内容替换为以下内容: .my-data-table th {     text-align: left;}
  将以下 HTML 代码放在"资源"部分的 HTML 选项卡中:                                                                              Timestamp                       {{dataKeyData.dataKey.label}}                                                                                                     {{data[0] | date : "yyyy-MM-dd HH:mm:ss"}}                       {{dataKeyData.data[$dataIndex] && dataKeyData.data[$dataIndex][1]}}                                                                                        
  将以下 JavaScript 代码放入"JavaScript"部分: self.onInit = function() {     self.ctx.widgetTitle = "My first Time-Series widget";     self.ctx.$scope.datasources = self.ctx.defaultSubscription.datasources;     self.ctx.$scope.data = self.ctx.defaultSubscription.data;          self.ctx.$scope.datasourceData = [];          var currentDatasource = null;     var currentDatasourceIndex = -1;          for (var i=0;i  3.my-alarm-table th {
  text-align: left;}
  将以下 HTML 代码放在"资源"部分的 HTML 选项卡中:
  My first Alarm widget.
  {{dataKey.label}}
  [ngStyle]="getAlarmCellStyle(alarm, dataKey)">
  {{getAlarmValue(alarm, dataKey)}}
  将以下 JSON 内容放在设置架构部分的"设置架构"选项卡中:{
  "schema": {
  "type": "object",
  "title": "AlarmTableSettings",
  "properties": {
  "alarmSeverityColorFunction": {
  "title": "Alarm severity color function: f(severity)",
  "type": "string",
  "default": "if(severity == "CRITICAL") {return "red";} else if (severity == "MAJOR") {return "orange";} else return "green"; "
  }
  },
  "required": []
  },
  "form": [
  {
  "key": "alarmSeverityColorFunction",
  "type": "javascript"
  }
  ]}
  将以下 JavaScript 代码放入"JavaScript"部分:self.onInit = function() {
  var pageLink = self.ctx.pageLink();
  pageLink.typeList = self.ctx.widgetConfig.alarmTypeList;
  pageLink.statusList = self.ctx.widgetConfig.alarmStatusList;
  pageLink.severityList = self.ctx.widgetConfig.alarmSeverityList;
  pageLink.searchPropagatedAlarms = self.ctx.widgetConfig.searchPropagatedAlarms;
  self.ctx.defaultSubscription.subscribeForAlarms(pageLink, null);
  self.ctx.$scope.alarmSource = self.ctx.defaultSubscription.alarmSource;
  var alarmSeverityColorFunctionBody = self.ctx.settings.alarmSeverityColorFunction;
  if (typeof alarmSeverityColorFunctionBody === "undefined" || !alarmSeverityColorFunctionBody.length) {
  alarmSeverityColorFunctionBody = "if(severity == "CRITICAL") {return "red";} else if (severity == "MAJOR") {return "orange";} else return "green";";
  }
  var alarmSeverityColorFunction = null;
  try {
  alarmSeverityColorFunction = new Function("severity", alarmSeverityColorFunctionBody);
  } catch (e) {
  alarmSeverityColorFunction = null;
  }
  self.ctx.$scope.getAlarmValue = function(alarm, dataKey) {
  var alarmKey = dataKey.name;
  if (alarmKey === "originator") {
  alarmKey = "originatorName";
  }
  var value = alarm[alarmKey];
  if (alarmKey === "createdTime") {
  return self.ctx.date.transform(value, "yyyy-MM-dd HH:mm:ss");
  } else {
  return value;
  }
  }
  self.ctx.$scope.getAlarmCellStyle = function(alarm, dataKey) {
  var alarmKey = dataKey.name;
  if (alarmKey === "severity" && alarmSeverityColorFunction) {
  var severity = alarm[alarmKey];
  var color = alarmSeverityColorFunction(severity);
  return {
  color: color
  };
  }
  return {};
  }}self.onDataUpdated = function() {
  self.ctx.$scope.alarms = self.ctx.defaultSubscription.alarms.data;
  self.ctx.detectChanges();}
  单击小部件编辑器工具栏上的运行按钮,以便在小部件预览部分查看结果。
  在这个例子中,订阅的alarmSource和alarms属性被分配给$scope并且可以在 HTML 模板中访问。在 HTML 中,使用了一个特殊的*ngFor结构角度指令,以便迭代alarmSource的可用警报dataKeys并呈现相应的列。表格行通过迭代警报数组呈现,相应的单元格通过迭代dataKeys呈现。该功能getAlarmValue被取报警值和格式化createdTime使用报警属性DatePipe可通过ctx 的date属性访问角管。函数getAlarmCellStyle用于为每个警报单元格分配自定义单元格样式。在此示例中,我们引入了名为alarmSeverityColorFunction 的新设置属性,其中包含根据警报严重性返回颜色的函数体。在getAlarmCellStyle函数中,有相应的调用带有严重性值的alarmSeverityColorFunction以获取警报严重性单元格的颜色。请注意,在此代码中实现了onDataUpdated函数,以便使用来自订阅的最新警报更新警报属性并使用调用更改检测检测更改()函数。

兵马未动粮草先行,特斯拉正偷偷下着一盘大棋妖镍涨幅不断,电池原材料价格也跟着附和,一唱一和伴随着政府补贴的逐渐退坡,一场在车企间无声的战争就此打响各行各业,越领先的公司就越追求效率和掌控力。一直专注于如何快人一步保障自己的电子行业深度智能化与电动化方兴未艾,汽车电子全面成长特斯拉是软件定义汽车的先导者也是电动车智能车的全球领导者,在其软件服务体系中以FSD自动驾驶选装包OTA付费升级包高级车联网服务为核心,收费模式除了一次性前装收费,还另外包含订阅服对新能源赛道的一点感悟说说去年行情的起源,锂电在去年二季度起爆,二季度,三季度,四季度,基金连续性增仓,到去年第四季度为止,锂电超越了白酒,成了基金第一重仓行业这是开盘啦的基金持仓统计数据,APP里面也三月新能源车销量广汽埃安20,317台,同比189,一季度44874台,同比154。26小鹏15414台,同比202,一季度34561台,同比260哪吒12026台,同比270,一季度30152台怎么还有中年人把互联网公司当成自己家不宜高调作者肖芳编辑文姝琪最近,很多遭遇裁员的互联网大厂朋友和我诉苦,大家的心态无非几种1还不能接受自己被裁的事实。慌张焦虑,情绪崩溃,怨天尤人,甚至有一部分人采取极端的方式和公司对抗。2Luna,一场400亿美元央行梦出品虎嗅科技组作者周舟头图视觉中国随着Luna几近归零,一场币圈史诗级多空大战终于告一段落。当我们打扫战场,这才发现币圈金融战争所展现出的残酷细节LUNA2000亿元的市值,两天内同城货运钱途有点愁配图来自Canva可画随着互联网浪潮席卷各个行业,同城货运领域也在极短的时间内聚集了大量的新玩家。一时间同城货运市场的竞争变得空前激烈,但最后成功突围活下来的也就只有货拉拉快狗打车谈谈国轩高科01国轩高科年报简评21年营业收入103。6亿元,同比增长54归母净利润为1亿元,同比降低32扣非净利润为3。4亿元,同比下滑45毛利率为18。61,同比下滑6。62个百分点。又是iOS16系统界面曝光!期待的功能都有了,这确定没借鉴安卓?不可否认的是,很多用户选择iPhone手机,很大一部分原因都是因为系统,更极致的交互体验更健全的隐私安全保护等,让不少果粉引以为傲。当然也有很多有想法的用户,总会提出各种自己对iO助听器该带什么样子的好?根据本人听力情况验配助听器,如果听力损失很重,耳道是油性耳垢有中耳炎,建议选配耳背式。如果听力不是很差而又较为介意外观的话,耳道没问题的话建议选配耳内机。您好这个要取决于听力情况和现代战争有哪些发展,变化与进步?现代战争理论,已发生了深刻的变革,传统的3C概念,核威摄核保护战略,进攻防守概念,集团人海概念,都将受到颠复性的更新换代。战争阶段分为a,冷兵器时代。b,热兵器时代。c,核武时代。
别让电商培训毁坏电商生态近年来,电商行业发展迅速,电商培训作为一种新的职业教育培训也日益兴起。数据显示,我国现存电商培训相关企业2858家。从区域分布来看,广东省以404家排名第一,甘肃省和浙江省分别以2吸尘器十大排名,手持吸尘器排名推荐冰尊吸尘器是世界吸尘器十大排名领导品牌。虽然手持吸尘器在家庭当中十分流行,但对于新手小白而言,面对鱼龙混杂的吸尘器市场,挑选吸尘器还是一件非常困难的事情。吸尘器哪个牌子好?下面就为从零开始学python之数据库的交互这篇文章主要介绍了Python与数据库的交互,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下MongoDB安装模块pipinstallpy要么价格高,要么配置低,小米12能否改变小屏旗舰手机现状?小米12即将发布,这可能是首款小屏设计的骁龙8Gen1芯片智能手机,但一定不是最后一款明年发布的三星GalaxyS22iPhone14魅族19等机器大概率也是这个尺寸,而这些厂商也雷声大雨点小,大屏时代激光电视难掩前景黯淡商战中永远少不了官司,空调厂商格力美的奥克斯三家中两两捉对都有官司缠身。近日,TCL和海信之间的官司纠纷向外界揭开了当下或者说曾经电视行业激烈竞争的一角。据光明网消息,近日山东省高联发科发布5G天玑920天玑810联发科宣布推出天玑系列5G移动平台的两款最新产品天玑920天玑810。它们在性能影像显示等方面都有明显提升,而且均为6nm工艺制造,再加上此前的天玑1200天玑1100天玑900,千兆光纤网卡哪个好?千兆网卡哪个好?千兆网卡根据芯片来分有IntelI210芯片IntelI350芯片Intel82571芯片Intel82576芯片Intel82572芯片,又有单口双口四口网卡,那iOS15Beta5发布,HomePod无损音质也来了今日凌晨,苹果为开发者预览版用户推送了iOS15Beta5的更新。已经安装了iOS15测试版描述文件的用户可直接打开设置通用软件更新,直接在设备上OTA升级至最新的iOS15Bet苹果iOS15儿童保护功能遭反对扫描相册色情图片禁止传播据macrumor报道称,苹果近日公布了新的儿童安全功能,功能里有一项掀起了不少人士的反对。据苹果介绍,苹果正在与儿童安全专家合作开发的三个领域引入新的儿童安全功能,希望帮助保护儿华为将正式发布鸿蒙手机操作系统清华成立量子信息班清华成立量子信息班图灵奖得主姚期智院士领衔清华大学成立量子信息班,由图灵奖得主中国科学院院士清华大学交叉信息研究院院长姚期智担任首席教授。据悉,这是清华大学首个量子信息方向的本科人这一次,华为P50Pro我买定了现阶段华为的处境已经相当困难,经过四轮打击之后,它要按计划发布一款新旗舰可以说是难上加难。不过,余承东并没有放弃推新的信心。随着时间的推移,目前关于华为新品的消息也逐步深入,看完了