属性'user'在其初始化之前使用 - 在 Angular 中



我在谷歌和StackOverflow中搜索了这个错误,但我无法修复这个错误,有人能帮我吗?

这是我的身份验证服务.ts文件:

import { Injectable } from '@angular/core';
import { CanActivate, Router } from '@angular/router';
import { LoginService } from './login.service';
import { User } from '../interfaces/Ilogin';
@Injectable({
providedIn: 'root'
})
export class AuthService implements  CanActivate {
user:User;
constructor(public loginService: LoginService, public router: Router) {}
canActivate(): boolean {
this.loginService.loggedIn.subscribe(next => {
this.user = next;
});
if (this.user) {
return true;
}
this.router.navigate(['home']);
return false; 
}
}

这是我的登录.组件.ts文件:

import { Component, OnInit, Inject } from '@angular/core';
import { MatDialogRef, MAT_DIALOG_DATA } from '@angular/material/dialog';
import { LoginService } from '../services/login.service';
import { FormBuilder, FormGroup } from '@angular/forms';
import { Router } from '@angular/router';
import { User } from '../interfaces/Ilogin';
@Component({
selector: 'app-login',
templateUrl: './login.component.html',
styleUrls: ['./login.component.scss']
})
export class LoginComponent implements OnInit {
loginForm: FormGroup;
user = {} as User;
constructor(
public dialogRef: MatDialogRef<LoginComponent>,
@Inject(MAT_DIALOG_DATA) public data: any, 
private loginService: LoginService, 
private fb: FormBuilder,
private router: Router) {}
ngOnInit() {
this.loginForm = this.fb.group({
mobileNumber: [''],
password: ['']
})
}
login(){
if (this.loginForm.valid){
this.user.mobileNumber = this.loginForm.value.mobileNumber;
this.loginService.loggedIn.next(this.user);
this.onNoClick();
}
}

onNoClick(): void {
this.dialogRef.close();
}
}

这是我的Ilogin.ts接口文件:

export interface User {
mobileNumber: string;
}

这是我的登录.service.ts文件:

import { Injectable } from '@angular/core';
import { BehaviorSubject } from 'rxjs';
import { User } from '../interfaces/Ilogin';
@Injectable({
providedIn: 'root'
})
export class LoginService {
user: User;
loggedIn = new BehaviorSubject(this.user);
constructor() { }
isLoggedIn(): boolean {
console.log(this.loggedIn);
return true;
}
}

我收到的错误消息:

src/app/services/login.service.ts:10:39-错误TS2729:属性"user"在初始化之前使用。

loggedIn=新的BehaviorSubject(this.user(;~~~~

src/app/services/login.service.ts:9:3user:用户;~~~~此处声明了"user"。

我认为错误来自login.service,因为您使用未初始化的用户设置loggedIn

试试这个loggedIn = new BehaviorSubject(null);

如果一开始不需要初始化user,那么应该使用Subject而不是BehaviorSubject

最新更新