信号-效果未通知

问题描述 投票:0回答:1

我遇到一个问题,我在服务中创建了信号,并且我想确保注入此服务的组件在信号中设置值时得到通知。我的代码目前没有发生这种情况:

@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
永远不会再次记录新值,因此这意味着我的组件永远不会收到新值的通知。

任何帮助将不胜感激。

angular signals
1个回答
0
投票

这是错误:

providers: [AuthService]

我完全忘记了这会创建一个新的服务实例。

© www.soinside.com 2019 - 2024. All rights reserved.