我有一个角度前端,它将来自sails 后端(使用sails-mysql 适配器)的数据填充到ui-grid 中。该数据集很大,在页面显示包含任何数据之前需要一段时间才能加载。
我有从风帆启动和运行流式传输的基础知识:
findAllStream: function (req, res) {
Model.stream().pipe(res);
}
到目前为止,这会将每个单独的数据从模型流式传输到前端。我正在使用 angular-oboe 来消耗这个流:
vm.myData = [];
var obj = {};
var count = 0;
Oboe({
url: '/api/model/findAllStream',
pattern: '*',
start: function(stream) {
// handle to the stream
vm.stream = stream;
vm.status = 'started';
},
done: function(parsedJSON) {
vm.status = 'done';
}
}).then(function() {
// promise is resolved
console.log('done');
}, function(error) {
// handle errors
console.log('error');
}, function(node) {
// node received
switch (count) {
case 0:
obj['id'] = node;
break;
case 1:
regObj['property'] = node;
break;
case 2:
regObj['function'] = node;
break;
}
if (++count === 3) {
vm.myData.push(regObj);
count = 0;
obj = {};
}
});
本质上,数据的节点似乎以相同的顺序出现,所以我只是跟踪我收到了多少节点并以这种方式构建对象。然后我将每个对象推入一个数组中以在 uigrid 中使用。
例如,find() 返回的数据是:
[
{
id: 1,
property: foo,
function: bar
},
{
id: 2,
property: stuff,
function: things
}
]
这适用于 angular 和 uigrid。但是通过流我会得到:
1
foo
bar
2
stuff
things
这并不理想,尤其是在模型发生变化时。有没有办法发送密钥而不仅仅是值?或者也许从流中发送 JSON?就像是:
id: 1,
property: foo,
function: bar
id: 2,
property: stuff,
function: things
谢谢!