繁体   English   中英

角度2。 无法设置班级属性

[英]Angular2. Can't set class property

我开始学习angular2,但遇到了问题。 有一些课

export class UserComponent {
  user: User;
  errorMessage: string;

  constructor(
     private usersService: UsersService,
     private route: ActivatedRoute
  ) {
     let id = +route.params._value.id;
     this.usersService.getUser(id).subscribe(
        user => this.user = user,
        error => this.errorMessage = <any>error
     );
  console.log(this);
}

我可以在控制台中看到属性“ user”,但看不到“ errorMessage”。 http://screen.mindklab.com/incoming/82c673e18ae8f89d7c6175a57c33.png

如果我将console.log(this)更改为console.log(this.user),我在控制台中会得到“未定义”。 为什么班级的自有财产没有变化? 因此,我无法在模板中使用“用户”

这是服务类:

@Injectable()
export class UsersService {
private usersUrl = 'http://gye.hz/component/chart/fixscripts?task=';

constructor(private http: Http) {}

getUsers(): Observable<User[]> {
    return this.http
        .get(this.usersUrl+'getUsers')
        .map((r: Response) => r.json().data);
}

getUser(id: number): Observable<User> {
    return this.http
        .get(this.usersUrl+'getUser&id='+id)
        .map((r: Response) => r.json().data);
}

saveUser(user: User): Observable<User> {
    let body = JSON.stringify(user);
    let headers = new Headers({ 'Content-Type': 'application/json' });
    let options = new RequestOptions({ headers: headers });
    return this.http
        .post(this.usersUrl+'saveUser', body, options)
        .map((r: Response) => r.json().data);
}
}

服务返回必要的数据(在控制台中显示),但未将其写入属性

我认为您在服务中缺少一些错误处理。

   getUser(id: number): Observable<User> {
        return this.http
            .get(this.usersUrl+'getUser&id='+id)
            .map((r: Response) => r.json().data)
            .catch(error => this.onError(error)); <!-- NEW -->
    }

    onError(error: any) {

        //Log error?

        let errMsg = error.message || 'Server error';
        console.error(errMsg);
        return Observable.throw(errMsg);
    }

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM