2016-10-20 112 views
0

我開始學習angular2,並且遇到問題。 有一些類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); 
} 

我可以看到控制檯財產「用戶」,而不是「的errorMessage」。 http://screen.mindklab.com/incoming/82c673e18ae8f89d7c6175a57c33.png

如果我將console.log(this)更改爲console.log(this.user),則在控制檯中會顯示「undefined」。爲什麼班'自己的財產不變? 因爲這個我不能在模板

使用「用戶」這是服務類:

@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); 
} 
} 

服務返回所需的數據(其顯示在控制檯),但它不寫入性能

+0

請添加服務代碼。 – Sefa

+0

與您的問題並不真正相關,但您不應該在構造函數中進行服務調用。 – vidalsasoon

+0

我嘗試通過ngOnInit(){}進行調用。結果是一樣的 –

回答

0

我想你錯過了服務中的一些錯誤處理。

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); 
    } 
+0

好的。但沒有錯誤。 getUser方法返回right observable –