Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/421.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Thingsboard仪表板自定义操作NullInjectorError_Javascript_Thingsboard - Fatal编程技术网

Javascript Thingsboard仪表板自定义操作NullInjectorError

Javascript Thingsboard仪表板自定义操作NullInjectorError,javascript,thingsboard,Javascript,Thingsboard,我尝试为“按行单击”配置自定义操作,但Firefox和Chromium都失败,出现NullInjectorError。我不知道如何找到问题的根源并解决它 即使我重复“ThingsBoard Dashboard development guide.Part 2”视频教程代码示例(视频上的代码:),它也会失败,并出现相同的错误 我的代码: var $injector = widgetContext.$scope.$injector; $injector.get('deviceService').g

我尝试为“按行单击”配置自定义操作,但Firefox和Chromium都失败,出现
NullInjectorError
。我不知道如何找到问题的根源并解决它

即使我重复“ThingsBoard Dashboard development guide.Part 2”视频教程代码示例(视频上的代码:),它也会失败,并出现相同的错误

我的代码:

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

$injector.get('deviceService').getDevice(entityId.id).then(function(device){
    if(device.type == 'energy sensor'){
        openDashboardState('energy_state');
    } else if(device.type == 'water sensor'){
        openDashboardState('water_state');
    } else if(device.type == 'temperature sensor'){
        openDashboardState('temperature_state');
    } else {
        // fallback here if I mistaken with device.types
        openDashboardState('temperature_state');
    }
});

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

    widgetContext.stateController.openState(stateId, params, false);
}
我的Chromiun错误:

NullInjectorError: R3InjectorError(e)[deviceService -> deviceService -> deviceService -> deviceService]: 
  NullInjectorError: No provider for deviceService!
    at e.get (http://my-server-addr:8880/polyfills.e5ed3e112692f855567f.js:1:692603)
    at e.get (http://my-server-addr:8880/polyfills.e5ed3e112692f855567f.js:1:764401)
    at e.get (http://my-server-addr:8880/polyfills.e5ed3e112692f855567f.js:1:764401)
    at e.get (http://my-server-addr:8880/polyfills.e5ed3e112692f855567f.js:1:764401)
    at e.get (http://my-server-addr:8880/polyfills.e5ed3e112692f855567f.js:1:764401)
    at t.get (http://my-server-addr:8880/polyfills.e5ed3e112692f855567f.js:1:862099)
    at Object.get (http://my-server-addr:8880/polyfills.e5ed3e112692f855567f.js:1:846305)
    at Qn (http://my-server-addr:8880/polyfills.e5ed3e112692f855567f.js:1:706656)
    at e.get (http://my-server-addr:8880/polyfills.e5ed3e112692f855567f.js:1:708213)
    at eval (eval at e.handleWidgetAction (http://my-server-addr:8880/1.22c948d0d38c2bc05630.js:1:584011), <anonymous>:5:11)
e.handleWidgetAction @ 1.22c948d0d38c2bc05630.js:1
e.onRowClick @ 1.22c948d0d38c2bc05630.js:1
e_mat_row_25_Template_mat_row_click_0_listener @ template.html:87
gl @ polyfills.e5ed3e112692f855567f.js:1
i @ polyfills.e5ed3e112692f855567f.js:1
(anonymous) @ polyfills.e5ed3e112692f855567f.js:1
e.invokeTask @ polyfills.e5ed3e112692f855567f.js:1
onInvokeTask @ polyfills.e5ed3e112692f855567f.js:1
e.invokeTask @ polyfills.e5ed3e112692f855567f.js:1
t.runTask @ polyfills.e5ed3e112692f855567f.js:1
t.invokeTask @ polyfills.e5ed3e112692f855567f.js:1
h @ polyfills.e5ed3e112692f855567f.js:1
f @ polyfills.e5ed3e112692f855567f.js:1

NullInjectorError:R3InjectorError(e)[设备服务->设备服务->设备服务->设备服务]:
NullInjectorError:没有deviceService的提供程序!
在e.get(http://my-server-addr:8880/polyfills.e5ed3e112692f855567f.js:1:692603)
在e.get(http://my-server-addr:8880/polyfills.e5ed3e112692f855567f.js:1:764401)
在e.get(http://my-server-addr:8880/polyfills.e5ed3e112692f855567f.js:1:764401)
在e.get(http://my-server-addr:8880/polyfills.e5ed3e112692f855567f.js:1:764401)
在e.get(http://my-server-addr:8880/polyfills.e5ed3e112692f855567f.js:1:764401)
在t.get(http://my-server-addr:8880/polyfills.e5ed3e112692f855567f.js:1:862099)
at Object.get(http://my-server-addr:8880/polyfills.e5ed3e112692f855567f.js:1:846305)
在Qn(http://my-server-addr:8880/polyfills.e5ed3e112692f855567f.js:1:706656)
在e.get(http://my-server-addr:8880/polyfills.e5ed3e112692f855567f.js:1:708213)
评估时(评估时为e.handleWidgetAction(http://my-server-addr:8880/1.22c948d0d38c2bc05630.js:1:584011), :5:11)
e、 handleWidgetAction@1.22c948d0d38c2bc05630.js:1
e、 onRowClick@1.22c948d0d38c2bc05630.js:1
e_mat_row_25_Template_mat_row_单击_0_listener@Template.html:87
gl@polyfills.e5ed3e112692f855567f.js:1
i@polyfills.e5ed3e112692f85567f.js:1
(匿名)@polyfills.e5ed3e112692f85567f.js:1
e、 invokeTask@polyfills.e5ed3e112692f85567f.js:1
onInvokeTask@polyfills.e5ed3e112692f85567f.js:1
e、 invokeTask@polyfills.e5ed3e112692f85567f.js:1
t、 runTask@polyfills.e5ed3e112692f85567f.js:1
t、 invokeTask@polyfills.e5ed3e112692f85567f.js:1
h@polyfills.e5ed3e112692f855567f.js:1
f@polyfills.e5ed3e112692f85567f.js:1

我检查了同样的问题。我找到了解决办法

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

$injector.get(widgetContext.servicesMap.get('deviceService')).getDevice(entityId.id).subscribe(function(device) {
        if (device.type == 'energy sensor') {
            openDashboardState('energy_state')
        }
        else if(device.type == 'water sensor') {
            openDashboardState('water_state')
        }
        else {
            openDashboardState('temperature_state')
        }
});

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

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

我希望这对你有帮助。祝你好运!:)

谢谢你,李桑军。实体视图也有同样的问题:(我不知道是否可以在这里发送直接消息,是否允许出价/尝试租用……)