1

我有一个角度前端,它将来自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

谢谢!

4

1 回答 1

2

原来我错误地使用了双簧管。我将匹配模式更改为“{id}”,一切都很好。

Oboe({
    url: '/api/model/findAllStream',
    pattern: '{id}',
    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
    vm.gridOptions.data.push(node);
});
于 2017-08-10T17:40:55.797 回答