在angular 2中的subscribe方法之后,变量变为null

时间:2017-05-15 21:30:47

标签: angular typescript service

我在组件中调用服务时遇到了麻烦,因此数据变为空。这是一个例子:

服务方法:

getOneUser() {
    return this._http.get(globals.serverIp + '/user/getOneUser/' + this._ls.getCurrentUserName(), { headers: this.headers})
      .map((response: Response) => <UserParser> response.json());
  }

组件中的方法:

updateParametre(message: string){
    let currentUser = new User();

    this._us.getOneUser().subscribe(
      data =>currentUser = data.data,
      error => console.log('error from updateParam ParamtereComponenet ' + error),
      () => console.log(currentUser)
    );
let anotherinstance : User = currentuser ;
console.log(currentUser);
  }

尝试在subscribe方法中控制currentUser:

    {id: 9,
 initials: "YCI",
 nom: "CHABLI",
 prenom: "Yassin",
 password: "$2a$10$iWVnXs/2TwOk7CBr5RuQ.e/1c/BTlxsvkjHyYrtOgKUiRMll2EupO"}

但是对象anotherintance为null,并且还试图将readUser中的currentUser控制为null ..

请问是什么问题?

1 个答案:

答案 0 :(得分:0)

anotherInstance的范围是该函数。您需要在该范围之外声明它以引用它。

subscribe方法是异步的。您将anotherInstance设置为currentUser,但那时currentUser只是new User();然后,当函数完成时,它将被定义。

适当地调整变量的范围,并在实际拥有数据时设置它们的值:

anotherInstance: User;

updateParametre(message: string){
    let currentUser = new User();

    this._us.getOneUser().subscribe(
      (data) => { 
         currentUser = data.data,
         this.anotherInstance = currentUser
      }
      (error) => console.log(`error from updateParam ParamtereComponenet: ${error}`),
      () => console.log(currentUser)
    );
  }

然后anotherInstance将成为您班级的属性,并且可以在updateParameter方法之外访问。