action - 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中创建新的弹出窗口?
解决方案
在阅读了很多关于 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 提供了有用的自动完成和文档。
推荐阅读
- asp.net - 从 web.config 文件重定向 url 无法正常工作
- sql - 无结果 SQL 子查询
- unity3d - 来自 HoloLens 的 StreamSocket 连接无法正常工作
- c# - 如何在注册时自定义 ASP.NET Identity Core 用户名以允许特殊字符和空格
- jvm - Upsource .jvmoptions 和 JVM 最大堆大小
- migration - LinkedIn V1 api 迁移到 V2 现有用户标识
- javascript - 提交数据时没有出现警告框
- salesforce - Salesforce - 从对象层次结构和 Salesforce 中的错误处理中删除多条记录的最佳方式
- c# - Get collection from settings.json
- c - c - const pointer to const data (gcc - duplicate 'const' declaration specifier)