簡體   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