【问题标题】:Angular2. Can't set class property角2。无法设置类属性
【发布时间】:2016-10-20 12:55:56
【问题描述】:

我开始学习 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);
}
}

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

【问题讨论】:

  • 请添加服务代码。
  • 与您的问题并不真正相关,但您不应该从构造函数内部进行服务调用。
  • 我尝试从 ngOnInit(){} 拨打电话。结果是一样的
  • 我明白了!我的服务需要一些时间才能返回数据。而当模板尝试使用属性时,它还不存在。有什么方法可以说等待 ngOnInit 方法完成?
  • 如果有人感兴趣,我找到了解决这个问题的方法。我用 *ngIf="user" 包装了整个模板。如果有人知道更好的方法,请写在这里

标签: angular


【解决方案1】:

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

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

【讨论】:

  • 好的。但是没有错误。 getUser 方法返回正确的 observable
猜你喜欢
  • 1970-01-01
  • 2019-07-04
  • 2021-01-21
  • 2017-07-17
  • 2021-02-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多