动态图表:日期预期错误!在Angular 7项目中将数组用作数据源时

动态图表:日期预期错误!在Angular 7项目中将数组用作数据源时,angular,dygraphs,Angular,Dygraphs,ASP中的Api项目 [Route("api/[controller]")] public class SampleDataController : Controller { ... [HttpGet("[action]")] public Array GetGraphData() { var tsData = timeFloatService_.GetLatestDataRecords(4

ASP中的Api项目

[Route("api/[controller]")]
    public class SampleDataController : Controller
    {
        ...

        [HttpGet("[action]")]
        public Array GetGraphData()
        {
            var tsData = timeFloatService_.GetLatestDataRecords(4790, DataRecordStatus.Live, DataRecordAbnormal.Normal, 1).Get();
            object[][] result = tsData.Select(x => new object[] { x.Index.ToString("yyyy/MM/dd HH:mm:ss"), x.Value }).Take(10).ToArray();
            return result;
        }

在调用的角度项目中接收到的:

import { Component, OnInit, Inject } from '@angular/core';
import { HttpClient } from '@angular/common/http';

@Component({
  selector: 'app-test',
  templateUrl: './test.component.html',
  styleUrls: ['./test.component.css']
})
export class TestComponent implements OnInit {

  private forecasts: any;

  constructor(http: HttpClient, @Inject('BASE_URL') baseUrl: string) {
    http.get<any[]>(baseUrl + 'api/SampleData/GetGraphData').subscribe(result => {
      this.forecasts = result;
    }, error => console.error(error));
  }

<p>
  test works!
</p>
<pre>{{forecasts|json}}</pre>
<ng-dygraphs [data]="forecasts"
             [options]=VALID OPTIONS NOT SHOWN FOR BREVITY
</ng-dygraphs>
不幸的是,这行不通!(除非我犯了错误。)


需要将DOM/Html页面中的字符串更改为日期,因为更改后的数组仍将日期显示为字符串

您需要从字符串创建日期对象。您可以使用rxjs
map
来实现这一点

例如:

import { of } from 'rxjs';
import { map } from 'rxjs/operators';
// ...
httpGet = of([
    [
      "2013/01/01 00:00:00",
      58096
    ], [
      "2013/01/02 00:00:00",
      50893
    ]
]);

constructor() {
  this.httpGet
    .pipe(map(item => item.map(i => [ new Date(i[0]), i[1] ])))
    .subscribe(result => console.log(result));
}
在您的例子中,您显然不会映射到单个日期对象,而是映射到由日期对象和值组成的数组

编辑:

好的,这里有一个更完整的例子:

或者实际上,通过在订阅回调中使用
array.map
,您可以使事情变得更简单:


谢谢如何对多个字段(即日期字段、值1字段、值2字段等)进行管道传输,并且从可以创建100-500k行数据的数据库中读取的数据不会是文字。由于您的数据源是一个数组数组,因此示例中的“ds”不是字符串而是数组,您只需通过索引访问即可。所以一个
map(item=>[newdate(item[0]),item[1]])应该可以。构造函数(http:HttpClient,@Inject('BASE_URL')baseUrl:string){http.get(baseUrl+'api/SampleData/GetGraphData')。订阅(result=>{this.predictions=from(result)。管道(map(item=>[newdate(item[0]),item[1]]);},error=>console.error(error));上面将数组更改为以下{u-isScalar:false,“source”:{u-isScalar:false,“array”:[[“2013/01/01 00:00:00”,58096],“2013/01/02 00:00:00”,50893],上面的Dresch:我认为需要在html中修改数组,因为修改后的数组仍将日期显示为string@AndrewDay我添加了一个更适合您的案例的示例。
{
  "_isScalar": false,
  "source": {
    "_isScalar": false,
    "array": [
      [
        "2013/01/01 00:00:00",
        58096
      ],
      [
        "2013/01/02 00:00:00",
        50893
      ],
import { from } from 'rxjs';
import { map } from 'rxjs/operators';
// ...
// observable array
const dates = from([
  "2013/01/01 00:00:00",
  "2013/01/02 00:00:00"
]);

dates.pipe(map(ds => new Date(ds))).subscribe(date => console.log(date));
import { of } from 'rxjs';
import { map } from 'rxjs/operators';
// ...
httpGet = of([
    [
      "2013/01/01 00:00:00",
      58096
    ], [
      "2013/01/02 00:00:00",
      50893
    ]
]);

constructor() {
  this.httpGet
    .pipe(map(item => item.map(i => [ new Date(i[0]), i[1] ])))
    .subscribe(result => console.log(result));
}
this.httpGet
    .subscribe(result => {
      const converted = result.map(i => [ new Date(i[0]), i[1] ]);
      console.log(converted);
    });