首页 > 解决方案 > ThingsBoard:如何在点击时打开对话框

问题描述

我正在尝试简化 Thingsboard 中的功能。当用户单击实体列表的一行(仪表板内或仪表板外)时,我想打开一个对话框。我已经看到您可以使用 Angular 的$mdDialog来执行此操作。但我对 Angular 完全陌生,不知道如何应用它。

我在 github 上找到了这个示例代码:

$mdDialog.show(
  $mdDialog.alert()
    .parent(angular.element(angular.element(self.ctx.$container))
    .clickOutsideToClose(true)
    .title('This is an alert title')
    .textContent('You can specify some description text in here.')
    .ariaLabel('Alert Dialog Demo')
    .ok('Got it!')
    .targetEvent(evt)
);

所以我在自定义操作中使用了这段代码,但它不会做任何事情。如何使用$mdDialog在 Thingsboard中创建新的弹出窗口?

标签: actionthingsboardmddialog

解决方案


在阅读了很多关于 AngularJS 并了解了小部件上下文之后,我了解到您需要将 AngularJS 中的每个服务提取到小部件上下文中。针对这种特殊情况的方法是:

$mdDialog = widgetContext.$scope.$injector.get('$mdDialog')

现在 $mdDialog 可以正常使用了。

[编辑] 在 Thingsboard v3+ 上,他们切换到 UI 的 Angular 9/10 Wrapper。要实现对话框,您可以使用:

widgetContext.customDialog.customDialog(htmlTemplate, controller).subscribe()
widgetContext.dialogs.alert(title, body, ok_message).subscribe()

UI 在添加“使用 HTML 的自定义操作”时有几个示例,可以帮助您弄清楚如何使用它们,并且编辑器的 UI 提供了有用的自动完成和文档。


推荐阅读