标签内动态数据处理指南">标签内动态数据处理指南" />
在Node-RED UI模板的`
Node-RED的UI模板节点(ui-template)结合了Mustache模板引擎和AngularJS框架来渲染用户界面。理解其工作原理是正确处理动态数据的关键:
这意味着,Mustache引擎会将{{...}}替换为字符串,然后浏览器再尝试执行替换后的JavaScript代码。
用户尝试使用{{msg.payload.ranges1}}来替换多行JavaScript变量赋值:
} else if ($scope.msg.topic === "temperature_avg") {
// 期望此处能动态生成 high = 88; mid = 65; low = 60; size= "0.9em";
{{msg.payload.ranges1}}
}这种做法通常无法按预期工作,原因如下:
Node-RED UI模板基于AngularJS,提供了一个$scope对象,它是AngularJS控制器和视图之间的数据绑定桥梁。通过$scope.msg,你可以在JavaScript代码中安全、动态地访问传入的Node-RED消息对象。为了响应消息的更新,我们使用$scope.$watch来监听$scope.msg的变化。
以下是实现动态变量赋值的推荐方法:
示例代码:
假设你的Node-RED流发送的消息结构如下:
msg.topic = "temperature_avg";
msg.payload = {
ranges1: {
high: 95,
mid: 70,
low: 55,
size: "1.2em"
}
};
return msg;UI模板节点中的JavaScript部分应这样编写:
Node-RED流程示例 (用于测试上述UI模板):
function 节点代码:
// 模拟发送带有动态数据的消息
msg.topic = "temperature_avg";
msg.payload = {
ranges1: {
high: Math.floor(Math.random() * (100 - 80 + 1)) + 80, // 80-100
mid: Math.floor(M
ath.random() * (75 - 55 + 1)) + 55, // 55-75
low: Math.floor(Math.random() * (60 - 40 + 1)) + 40,