订阅时出现Angular2错误

时间:2016-08-26 09:22:43

标签: angular

我已经声明了一个person对象并在构造函数中定义了一些数组。我在init方法中调用一个方法来获取所有种族。但是我在行中得到了未定义的错误消息" this.person.races.push($(val).attr(" title"));"即使我已经在构造函数中声明它。

export class PersonInvolvedComponent {
    person = {}

    constructor(private _globalService:GlobalService) {
        this.person = {
            races: [],
            gender: [],
            builds: [],
            eyeColors: [],
            hairColors: []
        }
    }

    ngOnInit() { 
        this._globalService.applyLanguage("xml/"+this._globalService.getLanguage()+".xml"); 
        this.appendRace();
        this.appendGender();
        this.appendBuild();
        this.appendEyeColor();
        this.appendHairColor();
    }

    appendRace(){
        var config = this._globalService.loadConfiguration('config/personConfig.xml');
        config.subscribe(
            data => { 
                $(data._body).find("racename").each(function(i,val)
                    {
                        this.person.races.push($(val).attr("title"));
                    }
                )},
            err => console.error(err),
            () => console.log('done')
        );
    }
}

1 个答案:

答案 0 :(得分:3)

将您的调用修改为.each,如下所示:

config.subscribe(
        data => { 
            $(data._body).find("racename").each((i,val) => 
                {
                    this.person.races.push($(val).attr("title"));
                }
            )},
        err => console.error(err),
        () => console.log('done')
    );

使用关键字function unscope this调用匿名函数;使用lambda而不是this仍然代表你的班级