首页 > 解决方案 > 带有实体视图的 Thingsboard 仪表板实体表

问题描述

此问题与Thingsboard Dashboard Custom Action NullInjectorError非常相似

我使用来自实体别名的数据源设置实体表小部件,例如“'power_sensor'类型的实体视图”。

这个想法很简单:

现在我将为“On row click”创建自定义操作,但失败了。我很想根据entity.service API修改@lee-sangjun 的代码,如下所示:

var $injector = widgetContext.$scope.$injector;

$injector.get(widgetContext.entityService.get('entityViewService')).getEntity(entityId.id).subscribe(function(entity) {
        if (entity.name == 'Powermeter1') {
            openDashboardState('energy_state_1')
        }
        else if(entity.name == 'Powermeter2') {
            openDashboardState('water_state_2')
        }
});

function openDashboardState(stateId) {
    var params = {
        entityId: entityId,
        entityName: entityName
    }

    widgetContext.stateController.openState(stateId, params,
        false);
}

但什么也没有发生。我必须做些什么才能让它工作?

标签: javascriptthingsboard

解决方案


我发现的工作解决方案:

var $injector = widgetContext.$scope.$injector;

$injector.get(widgetContext.servicesMap.get('entityViewService')).getEntityView(entityId.id).subscribe(function(entity) {
    console.log(entity)
    if (entity.name == 'Powermeter1') {
        openDashboardState('energy_state_1')
    }
    else if(entity.name == 'Powermeter2') {
        openDashboardState('water_state_2')
    }
});

function openDashboardState(stateId) {
    var params = {
        entityId: entityId,
        entityName: entityName
    }

    widgetContext.stateController.openState(stateId, params,
        false);
}

其中“Powermeter1”和“Powermeter2”是实体视图的名称。希望它会有所帮助。


推荐阅读