rxjs和angularJS - 在成功回调内联函数中使用它引用组件属性

时间:2017-04-02 14:49:18

标签: javascript angularjs rxjs

我有以下组件

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;。请有人告诉我如何从内联函数声明中引用模块/组件的属性。

提前致谢。

1 个答案:

答案 0 :(得分:0)

你是对的,问题出在&#34;这个&#34;。箭头功能自动使用&#34;这个&#34;外部范围的上下文,与正常函数不同。尝试使用bind访问该范围,     this._subjectService.getSubject(ID).bind(本).subscribe ....