我有2个组件和1个服务文件,有一个登录组件和一个仪表板组件。
这是我的登录组件,它订阅服务文件中的http请求。当我在控制台记录this.userService.user
时,它会正确返回。当我路由到dashboard
并在仪表板组件中记录this.userService.user
时,它是未定义的。
import { Component, OnInit } from "@angular/core";
import { RouterExtensions } from "nativescript-angular/router";
import { UserService } from "../../shared/services.module";
@Component({
selector: "login",
moduleId: module.id,
templateUrl: "./login.component.html",
styleUrls: ["./login.css"],
})
export class LoginComponent implements OnInit {
email: string;
password: string;
constructor(private router: RouterExtensions, private userService: UserService) { }
signUp() {
this.userService.login(this.email, this.password)
.subscribe(res => {
console.log(this.userService.user)
this.router.navigate(["/dashboard"], { clearHistory: true, animated: false });
});
}
ngOnInit(): void {
}
}
这是我的仪表板组件,当我记录this.userService.user
它未定义。
import { Component, OnInit, Input } from "@angular/core";
import { RouterExtensions } from "nativescript-angular/router";
import { UserService } from "../../shared/services.module";
@Component({
selector: "dashboard",
moduleId: module.id,
templateUrl: "./dashboard.component.html",
styleUrls: ["./dashboard.css"],
})
export class DashboardComponent implements OnInit {
constructor(private router: RouterExtensions, private userService: UserService) {
}
ngOnInit(): void {
console.log(this.userService.user)
console.log(this.userService.getUserName())
}
}
这是我的服务文件
import { Injectable } from "@angular/core";
import { HttpClient } from '@angular/common/http';
import { HttpHeaders } from '@angular/common/http';
import { Config } from "../config";
import { catchError } from 'rxjs/operators';
import { map, delay, retryWhen, take } from 'rxjs/operators';
import { HttpErrorHandler, HandleError } from '../../http-error-handler.service';
import { User } from '../../models/user/user'
const httpOptions = {
headers: new HttpHeaders({
'Content-Type': 'application/json',
})
};
@Injectable()
export class UserService {
user: any;
private handleError: HandleError;
constructor(private http: HttpClient, httpErrorHandler: HttpErrorHandler) {
this.handleError = httpErrorHandler.createHandleError('HeroesService');
}
getUserName() {
console.log("return name");
console.log(this.user)
if (!this.user) {
return "failed";
}
console.log(this.user.name)
return this.user.name
}
login(email, password) {
let data = JSON.stringify({'email': email,'password': password})
return this.http.post(Config.userUrl + 'login', data, httpOptions)
.map((res: any) => {
let u = res.user
this.user = new User(u.name, u.email)
console.log(this.user)
return res
})
.pipe(
catchError(this.handleError('login', null))
);
}
}
奇怪的是,当我使用像getUserName
这样的帮助器函数返回名称时,即使在服务文件中它仍然是未定义的。
知道它为什么返回未定义的内容吗?任何帮助都将不胜感激。谢谢
发布于 2018-12-05 09:10:48
我想当你这样声明的时候
@Injectable({providedIn:'root'})
它对整个应用程序都可用
https://stackoverflow.com/questions/53621927
复制相似问题