我在谷歌和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
。