Angular Signal-Effect未触发通知:组件无法感知服务Signal值更新
Angular Signal未触发组件Effect更新的问题解决
你的问题核心出在服务实例不共享上:
AuthService已经通过providedIn: 'root'声明为应用级单例,但你在AppComponent的providers数组里又重复添加了AuthService,这会导致组件创建一个局部的服务实例。而实际处理auth状态监听的是root级的单例服务,它更新的是自己的currentUser Signal,但组件的effect监听的是局部实例的currentUser,两者不是同一个对象,自然收不到更新通知。
解决方法
直接移除AppComponent的providers数组里的AuthService即可:
修改后的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 { // 必须调用这个方法启动auth状态监听 this.authService.listenForAuthService(); } }
另外注意:你当前的AppComponent的ngOnInit里没有调用listenForAuthService,这会导致auth状态监听根本没启动,currentUser也不会被更新,记得补上这行调用。
补充说明:当服务设置providedIn: 'root'时,Angular会自动在应用根注入器创建单例,所有组件注入的都是同一个实例。如果在组件的providers里重复声明,就会覆盖根注入器的实例,创建组件自己的局部实例,这是状态不共享的常见坑点。
内容的提问来源于stack exchange,提问作者Jose Raul Perera
相关产品推荐
相关产品推荐

