Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angular/29.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript TS如何在方法内部使用类变量?_Javascript_Angular_Typescript_Chart.js_Angular Chart - Fatal编程技术网

Javascript TS如何在方法内部使用类变量?

Javascript TS如何在方法内部使用类变量?,javascript,angular,typescript,chart.js,angular-chart,Javascript,Angular,Typescript,Chart.js,Angular Chart,这让我发疯。我知道我错过了一些非常愚蠢的东西,但在浏览了论坛并疯狂地用谷歌搜索了半天之后,我放弃了!请帮忙。这是我第一个使用Angular的应用程序,看起来我并不擅长 我有一个类varstats4Graphs,它是从.NETCore3.1中的服务接收的。我知道该服务可以工作,因为当我在组件的html部分使用stats4Graphs时,它会正确显示数据。但是,当我在调用服务的函数中检索数据时,我无法使用该变量,即使是像:console.log('Labels in:'+this.stats4Gra

这让我发疯。我知道我错过了一些非常愚蠢的东西,但在浏览了论坛并疯狂地用谷歌搜索了半天之后,我放弃了!请帮忙。这是我第一个使用Angular的应用程序,看起来我并不擅长

我有一个类var
stats4Graphs
,它是从.NETCore3.1中的服务接收的。我知道该服务可以工作,因为当我在组件的html部分使用
stats4Graphs
时,它会正确显示数据。但是,当我在调用服务的函数中检索数据时,我无法使用该变量,即使是像:
console.log('Labels in:'+this.stats4Graphs.label)这样的小事也不能使用该变量,正如控制台显示的“标签在:未定义”一样,我不知道还能做什么

这是我的stats4Graphs模型

    export class Stats4Graphs {
    axisLabels: string[] = [];
    label: string;
    points: number[] = [];
}
我不知道我是否需要在这里初始化数组,这只是我不顾一切的尝试之一

这是我的组件

import { Component, OnInit } from '@angular/core';
import { Stats4Graphs } from 'src/app/shared/models/stats4-graphs.model';
import { ProfileService } from '../profile.service';

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

  public stats4Graphs: Stats4Graphs = new Stats4Graphs();

  // ADD CHART OPTIONS. 
  chartOptions = {
    responsive: true    // THIS WILL MAKE THE CHART RESPONSIVE (VISIBLE IN ANY DEVICE).
  }

  labels =  [];

  // STATIC DATA FOR THE CHART IN JSON FORMAT.
  chartData = [
    {
      label: '',
      data: [] 
    }
  ];

  // CHART COLOR.
  colors = [
    { // 1st Year.
      backgroundColor: 'rgba(77,83,96,0)',
      borderColor: 'rgba(77,83,96,0.2)',
      borderWidth : 2
    }
  ]

  // CHART CLICK EVENT.
  onChartClick(event) {
    console.log(event);
  }
  constructor(private profileService: ProfileService) { }

  ngOnInit() {
    this.profileService.getEngagement('UC__8h96Jwsaptaqh227Q9gg')
    .subscribe(stats4Graphs => {
      this.stats4Graphs = stats4Graphs;
    });
    //this.chartData = this.stats.points as any [];
    //this.chartData = this.stats.label as any;
    console.log('Labels in engagement: ' + this.stats4Graphs.label);
    this.labels = this.stats4Graphs.axisLabels as any;
  }

}
正如您所看到的,我尝试做的是一个折线图(使用chart.js和ng2图表)这将显示
stats4Graphs
中包含的数据。我也不知道如何将
stats4Graphs.points
stats4Graphs.label
中的数据放入
chartData
中,如果您能帮我的话,这也将非常好

但是现在,我怎么知道这项服务确实有效呢?因为我可以在component.html中使用它,它显示来自服务的值

<p>{{ stats4Graphs.label }}
        <br />
        {{ stats4Graphs.axisLabels }}
        <br />
        {{ stats4Graphs.points }}
    </p>
{{stats4Graphs.label}

{{stats4Graphs.axisLabels}
{{stats4Graphs.points}}


提前感谢您的所有帮助

您是
控制台。在订阅之外登录。由于服务的
getEngagement()
方法看起来像是返回一个可观察的,所以您需要做的就是在订阅中设置值,或者将
stats4Graphs
类属性设置为
Observable
,并在模板中使用
async
管道,如下所示:

stats4Graph: Observable<Stats4Graph>;

ngOnInit() {
  this.stats4Graph = this.profileService.getEngagement('UC__8h96Jwsaptaqh227Q9gg');
}
stats4Graph:可观察;
恩戈尼尼特(){
this.stats4Graph=this.profileService.getEngagement('UC_u8h96jwsaptaqh227q9gg');
}


使用此方法,您不必主动订阅服务的
getEngagement
方法,并且
async
管道会在组件被销毁后自动处理取消订阅。

您是
console.log
订阅之外的用户。由于服务的
getEngagement()
方法看起来像是返回一个可观察的,所以您需要做的就是在订阅中设置值,或者将
stats4Graphs
类属性设置为
Observable
,并在模板中使用
async
管道,如下所示:

stats4Graph: Observable<Stats4Graph>;

ngOnInit() {
  this.stats4Graph = this.profileService.getEngagement('UC__8h96Jwsaptaqh227Q9gg');
}
stats4Graph:可观察;
恩戈尼尼特(){
this.stats4Graph=this.profileService.getEngagement('UC_u8h96jwsaptaqh227q9gg');
}

使用此方法,您不必主动订阅服务的
getEngagement
方法,并且
async
管道在您的组件被销毁后自动处理取消订阅。

console.log('Labels in:'+this.stats4Graphs.label)
是未定义的,因为调用this.profileService.getEngagement('UC_uu8h96jwsaptaqh227q9gg')
是异步的,所以还没有完成

正确的方法是将语句放入
subscribe

this.profileService.getEngagement('UC__8h96Jwsaptaqh227Q9gg')
  .subscribe(stats4Graphs => {
    this.stats4Graphs = stats4Graphs;

    console.log('Labels in engagement: ' + this.stats4Graphs.label);
    this.labels = this.stats4Graphs.axisLabels as any;
  });
希望它有帮助

console.log('Labels in:'+this.stats4Graphs.label)
是未定义的,因为调用this.profileService.getEngagement('UC_uu8h96jwsaptaqh227q9gg')
是异步的,所以还没有完成

正确的方法是将语句放入
subscribe

this.profileService.getEngagement('UC__8h96Jwsaptaqh227Q9gg')
  .subscribe(stats4Graphs => {
    this.stats4Graphs = stats4Graphs;

    console.log('Labels in engagement: ' + this.stats4Graphs.label);
    this.labels = this.stats4Graphs.axisLabels as any;
  });

希望有帮助

问题是:
这个.profileService.getEngagement
是异步的。因此,在您立即尝试记录该异步调用的值之前,您的订阅尚未完成。移动
console.log('Labels in engagement:'+this.stats4Graphs.label)
进入回调函数(就在
this.stats4Graphs=stats4Graphs;
)的正下方)。问题是:
this.profileService.getEngagement
是异步的。因此,在您立即尝试记录该异步调用的值之前,您的订阅尚未完成。移动
console.log('Labels in engagement:'+this.stats4Graphs.label)
进入回调函数(在this.stats4Graphs=stats4Graphs;的右下方)。我会吹毛求疵。这并不是因为该方法是异步的,而是因为只有subscribe方法内部的内容等待AJAX调用。你也可以暂停一下,希望一切顺利……我会吹毛求疵的。这并不是因为该方法是异步的,而是因为只有subscribe方法内部的内容等待AJAX调用。你也可以暂停一下,希望一切顺利。。。