ThingsBoard 前端项目内置部件开发

这篇具有很好参考价值的文章主要介绍了ThingsBoard 前端项目内置部件开发。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

ThingsBoard 是目前 Github 上最流行的开源物联网平台(12.8k Star),可以实现物联网项目的快速开发、管理和扩展,是中小微企业物联网平台的不二之选。

ThingsBoard 前端项目内置部件开发

本文介绍如何在 ThingsBoard 前端项目中开发内置的菜单导航部件。

内置相关部件

TB(ThingsBoard 简称,下同)系统前端内置了三十多种部件,如日期范围选择部件:

ThingsBoard 前端项目内置部件开发

对应代码存放在前端项目文件中
thingsboard\ui-ngx\src\app\modules\home\components\widget\lib\date-range-navigator

TB 后台指定了十四种部件包(一类部件合集,不能再添加部件),由后台接口返回
代码存储位置:thingsboard\application\src\main\data\json\system\widget_bundles

ThingsBoard 前端项目内置部件开发

对应 TB 前端部件包界面列表:

ThingsBoard 前端项目内置部件开发

在仪表板中的部件,编辑中的高级选项会对应部件的 setting 文件,如日期范围选择组件的高级内容对应文件:thingsboard\ui-ngx\src\app\modules\home\components\widget\lib\settings\date\date-range-navigator-widget-settings.component.ts

ThingsBoard 前端项目内置部件开发

当然本篇不会涉及部件高级设置功能,后续可能会单独出一篇相关文章。

部件实现方案

我们先观察下日期范围部件。

ThingsBoard 前端项目内置部件开发

可以看到 TB 前端内置了 tb-date-range-navigator-widget 组件,直接通过调用组件选择器实现了部件的功能,所以我们开发菜单导航部件也需要先开发一个对应的组件。

菜单导航组件

在选择菜单导航组件的的选择上我掉坑里了 - -,选用的 layui 的菜单导航,引入到 TB 前端项目中发现样式没问题,但是点击没有展开收起效果,只能放弃。当然这不代表 layui 不好,相反 layui 是很用心的一款前端组件,我正在开发的博客主题用的就是 layui。

ThingsBoard 前端项目内置部件开发

再后来选择了 Ant Design 组件库,对应 Angular 实现的版本叫 ng-zorro-antd,其中的菜单导航组件链接。

Angular 引入 Ant

因 TB 前端项目使用的是 Angular v12 的版本,所以对应的 ng-zorro-antd 要选择 v12.1.1 版本,过高的版本安装后会报错,安装命令:

yarn add ng-zorro-antd@12.1.1 --save

 

在 angular.json 文件中引入 css 样式和 icons 资源:

"styles": [
             "node_modules/ng-zorro-antd/ng-zorro-antd.min.css"
          ],
"assets": [
            {
                "glob": "**/*",
                "input": "./node_modules/@ant-design/icons-angular/src/inline-svg/",
                "output": "/assets/"
            }
        ],

 

创建内置部件

创建菜单导航部件,我们在 \thingsboard\ui-ngx\src\app\modules\home\components\widget\lib\ 目录下创建 menu 的相关文件:

|menu
| -- menu.component.html
| -- menu.component.scss
| -- menu.component.ts
| -- menu.model.ts

 

menu.component.html 文件中使用 ng-zorro-antd 菜单导航示例。

<ul nz-menu nzMode="inline">
  <li nz-submenu nzTitle="Navigation One" nzIcon="mail" nzOpen>
    <ul>
      <li nz-menu-group nzTitle="Item 1">
        <ul>
          <li nz-menu-item nzSelected>Option 1</li>
          <li nz-menu-item>Option 2</li>
        </ul>
      </li>
      <li nz-menu-group nzTitle="Item 2">
        <ul>
          <li nz-menu-item>Option 3</li>
          <li nz-menu-item>Option 4</li>
        </ul>
      </li>
    </ul>
  </li>
  <li nz-submenu nzTitle="Navigation Two" nzIcon="appstore">
    <ul>
      <li nz-menu-item>Option 5</li>
      <li nz-menu-item>Option 6</li>
      <li nz-submenu nzTitle="Submenu">
        <ul>
          <li nz-menu-item>Option 7</li>
          <li nz-menu-item>Option 8</li>
          <li nz-submenu nzTitle="Submenu">
            <ul>
              <li nz-menu-item>Option 9</li>
              <li nz-menu-item>Option 10</li>
            </ul>
          </li>
        </ul>
      </li>
    </ul>
  </li>
  <li nz-submenu nzTitle="Navigation Three" nzIcon="setting">
    <ul>
      <li nz-menu-item>Option 11</li>
      <li nz-menu-item>Option 12</li>
      <li nz-menu-item>Option 13</li>
    </ul>
  </li>
</ul>

menu.component.ts 文件中创建 tb-menu-widget 组件选择器。

import { Component } from '@angular/core';
import { WidgetContext } from '@home/models/widget-component.models';
 
@Component({
  selector: 'tb-menu-widget',
  templateUrl: './menu.component.html',
  styleUrls: ['./menu.component.scss']
})
 
export class MenuComponent {
  ctx: WidgetContext;
  constructor() {
  }
}

 

menu.models.ts 文件中声明导出组件 MenuComponent, 并引入 ng-zorro-antd 的菜单和图标模块 NzMenuModule 和 NzIconModule

import { NgModule } from '@angular/core';
import { MenuComponent } from '@home/components/widget/lib/menu/menu.component';
import { NzMenuModule } from 'ng-zorro-antd/menu';
import { NzIconModule } from 'ng-zorro-antd/icon';
 
@NgModule({
  declarations:
    [
      MenuComponent
    ],
  imports: [
    NzMenuModule,
    NzIconModule
  ],
  exports: [
    MenuComponent
  ]
})
 
export class MenuModule {}

 

注:按照官网方式,在根模块 app.module.ts 中引入 ng-zorro-antd 组件模块即可生效,但在 TB 项目中并未生效,经测试,只有在具体的某个组件中引入 ng-zorro-antd 组件模块才会生效。

最后记得要在 widget-components.module.ts 文件中引入和导出 MenuModule 模块才能生效。

 
import { MenuModule } from '@home/components/widget/lib/menu/menu.models';
 
@NgModule({
    imports: [
        MenuModule
      ],
    exports: [
        MenuModule
    ]
})

 

最后在 TB 网站部件包添加部件,通过调用组件 tb-menu-widget 即可成功引入 ng-zooro-antd 组件库的菜单导航,Nice~

ThingsBoard 前端项目内置部件开发

结语

由于 TB 的受众面很小,所以如果你没研究过 TB 看不懂这篇文章也是很正常的 - -,跳过就好,TB 的相关文章更多的是作为本人的一个工作知识记录,如果能对一小部分人有所帮助那就更好啦~文章来源地址https://www.toymoban.com/news/detail-470336.html

到了这里,关于ThingsBoard 前端项目内置部件开发的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 界面开发框架Qt - 组合小部件映射器示例

    Qt 是目前最先进、最完整的跨平台C++开发工具。它不仅完全实现了一次编写,所有平台无差别运行,更提供了几乎所有开发过程中需要用到的工具。如今,Qt已被运用于超过70个行业、数千家企业,支持数百万设备及应用。 Combo Widget Mapper(组合小部件映射器)示例展示了如何

    2023年04月14日
    浏览(44)
  • QT 项目视图(QListView&QTreeView&QTableView)和项目部件(QListWidget&QTreeWidget&QTableWidget)详解

    目录 一、Qt 项目视图(Item Views)         1.QListView 2.QTreeView 3.QTableView 二、Qt 项目部件(Item Widgets) 1.QListWidget 2.QTreeWidget 3.QTableWidget 一、Qt 项目视图(Item Views)          控件名称依次解释如下: List View:清单视图 Tree View: 树视图 Table View:表视图 Column View: 列视图 Undo Vie

    2024年01月20日
    浏览(44)
  • 我的NPI项目之Android Camera (二) -- 核心部件之 Camera Sensor

    说到Camera模组,我们比较关心的是用的什么样的sensor? sensor的分辨率多少,sensor的像素多大,sensor是哪家生产的等等一些问题。今天,我们就穿越时间,将sensor的历史扒一扒。 Wikipedia先看一下:history of Camera Camera的历史大体可以分为三大部分 : 核心部件Sensor : Sensor是什么

    2024年02月19日
    浏览(47)
  • 乐意购项目前端开发 #4

    结构拆分  创建组件 在 views/Home 目录下创建component 目录, 然后在该目录下创建5个组件: 左侧分类(HomeCategory.vue)、Banner(HomeBanner.vue)、精选商品(HomeHot.vue)、低价商品(Homecheap.vue)、最新上架(HomeNew.vue) 引用组件 修改 views/Home/index.vue 的代码 添加依赖 pinia依赖和持久化插件 创建文件

    2024年01月18日
    浏览(30)
  • UG\NX二次开发 获取部件的4x4矩阵

    文章作者:里海 来源网站: https://blog.csdn.net/WangPaiFeiXingYuan 输入部件occ,获取矩阵。用函数UF_ASSEM_ask_transform_of_occ(),比较直接。 输入部件的实例或事例,获取矩阵。用函数UF_ASSEM_ask_component_data()。 通过部件事例获取实例的方法

    2024年02月14日
    浏览(47)
  • 【前端开发环境安装、配置、项目搭建全教程】

    简单的说 Node.js 就是运行在服务端的 JavaScrip,基于 Chrome JavaScript 运行时建立的一个平台,Node.js 是一个事件驱动 I/O 服务端 JavaScript 环境,基于 Google 的 V8 引擎,V8 引擎执行 Javascript 的速度非常快,性能非常好。 1.node.js官网下载:下载地址 2.依据自己电脑Windows、macOS选择安装

    2024年03月13日
    浏览(61)
  • android 车载widget小部件部分详细源码实战开发-千里马车载车机framework开发实战课程

    官网参考链接:https://developer.android.google.cn/develop/ui/views/appwidgets/overview App widgets are miniature application views that can be embedded in other applications (such as the home screen) and receive periodic updates。 通俗解释:一个能够定期刷新并且加到其他应用上的微型视图。 更多android framework干货内容请

    2024年02月09日
    浏览(52)
  • UG/NX二次开发(C#) 一个方法遍历部件的体、面、边属性

     初学UG/NX, 对体的各种tag还不熟悉,更别说各种面、边、点的操作,感觉就像一口锅里面的饺子,根本分不清哪个是哪个。 所以,这里对体的面、边、点以及各对象进行了一次整理,废话不说,直接上代码: 1、先定义体、面、边模型 2、加载体的方法如下 3、调用方法 4、运

    2024年02月16日
    浏览(54)
  • 前端开发---在vue项目中使用openLayers

    本篇文章主要讲解openLayers的初步使用,包括渲染地图、获取点坐标、标记点、中心位置的调整、以及获取到经纬度向后台发送请求 演示地址 官网 gitee链接 npm install ol import “ol/ol.css”; import { Map, View, ol } from “ol”; import TileLayer from “ol/layer/Tile”; DW () { var view = this.map.getVi

    2024年02月08日
    浏览(47)
  • UG\NX二次开发 获取部件的4x4矩阵的方法

    文章作者:里海 来源网站: https://blog.csdn.net/WangPaiFeiXingYuan 方法1: 输入部件occ,获取矩阵。用函数UF_ASSEM_ask_transform_of_occ(),比较直接。 方法2: 输入部件的实例或事例,获取矩阵。用函数UF_ASSEM_ask_component_data()。 通过部件事例获取实例的方法 相关函数:    

    2024年02月12日
    浏览(53)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包