我正在开发我的第一个Angular项目,并且我一直在考虑用这个问题说出一段时间的最佳方式,但是我要给这个镜头。更新来自不同来源的AngularJS数据
我正在构建一个使用Veralite(MiOS)以json格式返回设备数据的应用程序。第一个请求返回系统中的所有设备(下面的示例)。
"devices":[
{
"name":"Bedroom Light",
"altid":"4",
"id":6,
"category":2,
"subcategory":0,
"room":0,
"parent":1,
"status":"0",
"level":"0",
"state":-1,
"comment":""
},
{
"name":"Office Light",
"altid":"6",
"id":18,
"category":2,
"subcategory":0,
"room":0,
"parent":1,
"level":"0",
"status":"0",
"state":-1,
"comment":""
}
一旦所有的设备都返回,我的脚本开始长时间轮询维拉引擎。一旦对设备进行了更改,则返回长轮询的结果,但结果只包括已更改的设备(下面的示例)。
"devices":[
{
"altid":"6",
"id":"18",
"subcategory":"0",
"room":"0",
"parent":"1",
"level":"20",
"status":"1",
"state":"4",
"comment":"Office Light: Transmit was ok"
}
什么我想绕到我的头,是更新现有设备阵列与最新更新的数据的正确方法。我是否需要将它们转换为数组,然后遍历每个数组并尝试通过键匹配它们?
希望我尽可能清楚地问到这一点。
编辑:只是为了更新这一点,任何人都发现了这一点,特别是有兴趣为Veralite开发的人。从原始请求返回的ID将作为整数返回,但当长轮询引擎时,ID将作为字符串返回。因此,即使所选答案是正确的,您仍然需要将更新后的设备ID解析为整数(parseInt),或者在过滤设备时仅使用==而不是== ==。
不够公平,但我该如何将新值推送到$ scope变量? – Chris 2014-10-29 21:34:25
如果你只是更新字段值,你根本没有更新$ scope变量(我认为它是数组,$ scope.devices)。 – 2014-10-29 21:36:16
假设在轮询之后返回了多个更新的设备,这是否是相同的方法?我会窝窝吗? – Chris 2014-10-29 21:50:20