Javascript TS如何在方法内部使用类变量?
这让我发疯。我知道我错过了一些非常愚蠢的东西,但在浏览了论坛并疯狂地用谷歌搜索了半天之后,我放弃了!请帮忙。这是我第一个使用Angular的应用程序,看起来我并不擅长 我有一个类varJavascript 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
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调用。你也可以暂停一下,希望一切顺利。。。