Создание виджетов в TingBoard

Способы / пути создания виджетов

1. Статический вывод ранее созданного компонента

Можно прямо вставить компонент в HTML блок редактора, как это сделано для виджета Date-range-navigator, где выведен компонент

<tb-date-range-navigator-widget [ctx]="ctx"></tb-date-range-navigator-widget>

 

Вставка компонента в виджет Thingboard

2. Вывод какого-то ранее созданного компонента с динамическими данными

Подобный подход применен для виджета Alarm widget. В отличие от предыдущего “статического” примера, здесь при обновлении данных внутри хука onDataUpdated запускается метод 

self.ctx.$scope.alarmsTableWidget.onDataUpdated();, который тригерит перерисовку.

Кроме того, здесь можно увидеть метод actionSources(), возвращающий объект с описанием доступных источников действий (action sources) виджета, которым могут быть назначены действия пользователя.

Вставка компонента в виджет Thingboard с динамическим обновлением

3. Прокидывание данных из объекта подписки в компонент виджета через ссылку на него

Некоторые динамически изменяющиеся виджеты создаются путем прокидывания данных, необходимых для вывода, в компонент виджета из defaultSubscription (объекта подписки) через ссылку на сам объект ($scope). Эти данные будут разными, зависимо от типа виджета, и помещаться будут соответственно в разные свойства $scope.

Вот простой пример с виджетом последнего значения, где мы прокидываем данные в $scope, а потом выводим нужные из них в html коде. В самом html при помощи директивы *ngFor делается перебор ключей данных и точек, и выводятся последние данные с их временными метками.

Иногда процесс отображения данных более сложный и требует применения методов в html шаблоне, например, как использование функции getAlarmValue в примере с виджетом сигнала тревоги в документации. Там метод getAlarmValue передается в self.ctx.$scope (в разделе редактирования js) и затем применяется в html коде, чтобы форматировать для нужного отображения.

Создание виджета через прокидывание данных в $scope

Статья не закончена. Нужны примеры с использованием канваса, в котором отрисовывается что-то при помощи сторонних библиотек (добавляется ссылка в раздел “Ресурсы”) или графики (в self.ctx.flot кладется инстанс класса TbFlot с типом графика в параметрах).

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *