ThingsBoard:如何在点击时打开对话框

ThingsBoard: How to open dialog on click

我正在尝试简化 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 中创建一个新的 Popup Window?

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

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

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

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

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

UI 在添加 'Custom Action with HTML' 时有几个示例,可以帮助您弄清楚如何使用它们,而编辑器的 UI 提供了有用的自动完成和文档。