我想要商店响应并在全球范围内使用它

时间:2017-06-19 05:46:44

标签: angular

以下代码用于登录功能。在这个回复中我得到了特定用户的全部数据。我想存储当前用户的全部数据,并在其他页面中使用它来编辑个人资料。

login(username: string, password: string): Observable<boolean> {
    var body = 'username=' + username + '&password=' + password;
    var headers = new Headers();
    headers.append('Content-Type', 'application/x-www-form-urlencoded; charset=UTF-8');
    let options = new RequestOptions({ headers: headers });
    return this.http.post(this.loginUrl, body, options)
        .map((response: Response) => {
            let success = response.json() && response.json().success;
            if (success) {
                this.token = success;
               user logged in between page refreshes
                localStorage.setItem('currentUser', JSON.stringify({ username: username, token: success }));
                return true;
            } else {
                return false;
            }
        });
}

1 个答案:

答案 0 :(得分:0)

看到一点TypeScript,我相信这是Angular(不是AngularJS,虽然不确定)。

使用Angular,您可以通过创建服务并在模块级提供程序中提供它来实现此目的。

在app.module.ts中,将服务注册为:

@NgModule({
      imports: [BrowserModule, FormsModule, HttpModule ], 
      declarations: [AppComponent],
      bootstrap: [AppComponent],
      providers: [
          MyGlobalService
      ]
})

创建此服务,inject是您component/service/directive函数所在的相应login的依赖项。此后,一旦收到数据,您可以将其存储到服务中,如:

    if (success) {
            this.token = success;
           user logged in between page refreshes
            localStorage.setItem('currentUser', JSON.stringify({ username: 
            username, token: success }));
            this.myGlobalService.setUserData(response);
            return true;
        }

当然,您必须在服务中实现setUserData功能。像:

@Injectable()
export class MyGlobalService{

private userData :any;

  setUserData(data){
    this.userData = data;
  }

  getUserData(){
    return this.userData
  }
}

完成上述设置后,您应该可以在应用程序的任何位置注入MyGlobalService,并且应该使用服务实例获取数据,如:

let userDataStored = this.myGlobalServcie.getUserData();

希望它有所帮助。