我遇到一个问题,我在服务中创建了信号,并且我想确保注入此服务的组件在信号中设置值时得到通知。我的代码目前没有发生这种情况:
@Injectable({
providedIn: 'root'
})
export class AuthService {
firebaseApp = inject(FirebaseApp);
auth = getAuth(this.firebaseApp);
db = getFirestore(this.firebaseApp);
currentUser = signal<CUser | null>(null);
router = inject(Router);
constructor() {}
listenForAuthService() {
return new Promise<boolean>(resolve => {
onAuthStateChanged(this.auth, async (user) => {
if (user) {
const uid = user.uid;
const cUser = {
user: user,
uid: uid
};
this.currentUser.set(cUser);
resolve(true);
} else {
this.currentUser.set(null);
this.router.navigateByUrl("/login");
resolve(false);
}
});
});
}
}
现在这是appComponent:
@Component({
selector: 'app-root',
standalone: true,
imports: [RouterOutlet],
templateUrl: './app.component.html',
styleUrl: './app.component.scss',
providers: [AuthService]
})
export class AppComponent implements OnInit {
title = 'corpclient';
constructor(private authService: AuthService) {
effect(() => {
console.log(this.authService.currentUser());
});
}
ngOnInit(): void {
// this.authService.signOut();
}
}
当我刷新页面时,我看到
effect
的一次性执行为空值,之后服务中的方法执行并将该值设置为 User
对象,这就是问题,effect
永远不会再次记录新值,因此这意味着我的组件永远不会收到新值的通知。
任何帮助将不胜感激。
这是错误:
providers: [AuthService]
我完全忘记了这会创建一个新的服务实例。