Angular3--Thingsboard实例

1 搭建VSCode调试环境

在代码下

npm install
npm start

VScode中安装debug插件和Angular Language Service插件。

launch.json

{
    "version": "0.2.0",
    "configurations": [
      {
        "name": "Angular Debug (Chrome)",
        "type": "chrome",
        "request": "launch",
        "url": "http://localhost:4200",
        "webRoot": "${workspaceFolder}",
        "sourceMaps": true,
        "trace": true,
        "sourceMapPathOverrides": {
          "webpack:///./*": "${webRoot}/*"
        }
      }
    ]
  }
  

之后debug,就非常方便了。

2 Angular Material

Angular Material 是一个由 Angular 团队开发和维护的 UI 组件库,它基于 Google 的 Material Design 设计语言,专为 Angular 应用提供高质量、响应式且易于使用的 UI 组件。通过 Angular Material,开发者可以快速构建符合现代设计标准的用户界面,同时专注于应用的核心功能。

就是在thingsboard中mat开头的东西。

表单控件: mat-input(输入框)、mat-select(下拉选择)、mat-checkbox(复选框)、mat-radio-group(单选组)、mat-slider(滑块)等。

布局组件: mat-toolbar(顶部工具栏)、mat-sidenav(侧边栏)、mat-grid-list(网格布局)、mat-card(卡片)。

交互组件: mat-button(按钮)、mat-icon(图标)、mat-menu(菜单)、mat-dialog(对话框)、mat-tooltip(提示框)。

数据展示: mat-table(高级表格,支持排序、分页、过滤)、mat-paginator(分页器)、mat-progress-bar(进度条)。

使用下面的命令安装:

ng add @angular/material

3 Thingsboard前端代码结构

ui-ngx/
├── src/
│   ├── app/                 <-- 主要应用代码(重点)
│   │   ├── modules/         <-- 各个模块(页面、组件)
│   │   ├── services/        <-- 前端服务层(REST、WebSocket 等)
│   │   ├── shared/          <-- 公共组件、指令、管道
│   │   ├── core/            <-- 核心功能(权限、拦截器)
│   │   └── app.component.ts <-- 根组件
│   ├── assets/              <-- 静态资源
│   ├── environments/        <-- 环境配置(dev/prod)
│   └── index.html           <-- SPA 入口
├── angular.json             <-- Angular 配置文件
├── package.json             <-- 依赖管理
 

3.1 modules

这个是对页面划分的功能模块封装

modules/
├── dashboard/           <-- 仪表盘(大屏)
├── home/                <-- 主页面框架(顶部栏、左侧栏)
├── device/              <-- 设备管理
├── entity-view/         <-- 实体视图
├── rulechain/           <-- 规则链编辑器
├── alarm/               <-- 报警管理
├── widgets/             <-- 小部件(图表、控件)
├── tenant/              <-- 租户管理
├── profile/             <-- 用户配置页
├── ...
每个模块对应的就是一个页面或者部分页面,这部分的组成是:

xxx-routing.module.ts:路由定义

xxx.module.ts:模块声明

xxx.component.ts/html/scss:页面组件逻辑、模板、样式

xxx.component.html   <-- HTML 模板(视图)

3.2 services

通信与业务服务层

services/
├── api/                <-- 与后端 REST API 通信
│   ├── device.service.ts
│   ├── dashboard.service.ts
│   └── ...
├── websocket.service.ts <-- WebSocket 连接和订阅数据
├── utils.service.ts     <-- 通用工具类
├── auth.service.ts      <-- 登录认证
 

3.3 shared

shared/
├── components/          <-- 可复用组件
│   ├── entity-select/   <-- 下拉框实体选择器
│   └── ...
├── pipes/               <-- Angular 管道
├── directives/          <-- Angular 自定义指令
├── models/              <-- 全局类型定义(如 TbDevice、Dashboard)
└── utils/               <-- 各类小工具函数
 

在shared/models 有核心数据结构(如 Dashboard, Device 等)

3.4 core

core/
├── interceptors/       <-- HTTP 拦截器(统一加 token)
├── guards/             <-- 路由守卫(权限检查)
├── auth/               <-- 权限系统
├── services/           <-- 核心服务,如 AppInit
 

### ThingsBoard 平台中的树形结构界面实现 ThingsBoard 是一个功能强大的物联网平台,支持多种数据可视化方式。要实现在 ThingsBoard 中创建树形结构界面的功能,可以通过自定义 Widget 或者利用现有的 Tree View 组件来完成。 #### 使用现有组件 ThingsBoard 提供了一些内置的 UI 组件,其中包括可以用来展示层次化数据的 Tree View 控件。这些控件通常通过 JSON 数据源驱动,因此需要准备适合的数据格式[^1]。以下是具体方法: - **JSON 数据格式** 树形结构的核心在于其嵌套式的 JSON 表示形式。例如: ```json { "name": "Root", "children": [ { "name": "Child 1", "children": [] }, { "name": "Child 2", "children": [ {"name": "Grandchild", "children": []} ] } ] } ``` - **配置 Tree View** 在 ThingsBoard 的 Dashboard 编辑器中,可以选择合适的 Widget 类型并绑定到上述 JSON 数据源。如果默认不提供满足需求的 Tree View,则可能需要扩展或定制 Widget 功能[^1]。 #### 自定义 Widget 方法 当内置组件无法完全匹配特定业务场景时,开发者可借助 ThingsBoard 的灵活扩展机制来自定义 Widget。这涉及前端框架 Angular 和一些基础 HTML/CSS 技术的应用。 - **Angular 基础知识** ThingsBoard Dashboards 主要是基于 Angular 构建的,所以熟悉该框架对于开发复杂交互至关重要。例如,在 TypeScript 文件中处理递归渲染逻辑如下所示: ```typescript import { Component, Input } from &#39;@angular/core&#39;; @Component({ selector: &#39;tree-node&#39;, template: ` <ul> <li *ngFor="let node of nodes"> {{node.name}} <tree-node [nodes]="node.children"></tree-node> </li> </ul> ` }) export class TreeNodeComponent { @Input() nodes: any[]; } ``` - **集成至 ThingsBoard** 将此类自定义组件打包成符合 ThingsBoard 要求的形式,并上传到目标实例即可生效。更多细节请参考官方文档或其他社区贡献资源[^1]。 #### 注意事项 由于 ThingsBoard 版本迭代较快,某些旧版教程可能会存在兼容性问题。建议始终查阅最新版本的手册以及活跃论坛讨论区获取最前沿解决方案[^2]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值