我有以下组件
export class SubjectDetailComponent implements OnInit
{
pageTitle: string = "Subject Detail";
resultID: number = 0;
pupilID: number = 0;
subjectResult: ISubjectResult;
errorMessage: string = "";
private sub: Subscription;
constructor(private _route: ActivatedRoute,
private _router: Router,
private _subjectService : SubjectService)
{
}
ngOnInit(): void
{
this.sub = this._route.params.subscribe(params => {
this.resultID = params['result_id'];
if ('pupil_id' in params)
{
this.pupilID = params['pupil_id'];
}
this.getSubject(this.resultID);
});
}
getSubject(id: number)
{
this._subjectService.getSubject(id).subscribe(
x => this.subjectResult = x,
error => this.errorMessage = <any>error);
}
}
以下服务(忽略刚玩的手绘地图):
getSubject(id: number): Observable<ISubjectResult> {
return this.getSubjects()
.map(function(srs: ISubjectResult[])
{
let temp = srs.find(s => s.result_id == id);
return temp;
});
}
我的代码可以使用上面的代码更新SubjectDetailComponent中的subjectResult属性。但是,当我尝试使用内联函数而不是箭头函数(仅因为我可以)实现getSubject时,这样:
getSubject(id: number)
{
this._subjectService.getSubject(id).subscribe(
function(x) { this.subjectResult = x; },
error => this.errorMessage = <any>error);
}
属性subjectResult没有所需的更新值。这可能是由于范围和&#34;这&#34;。请有人告诉我如何从内联函数声明中引用模块/组件的属性。
提前致谢。
答案 0 :(得分:0)
你是对的,问题出在&#34;这个&#34;。箭头功能自动使用&#34;这个&#34;外部范围的上下文,与正常函数不同。尝试使用bind访问该范围, this._subjectService.getSubject(ID).bind(本).subscribe ....