You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Angular的canActivate函数中正确使用inject?

修复方案

错误原因是inject()只能在Angular的注入上下文中调用,你当前把注入语句放在了函数外部的顶层作用域,不属于合法的注入上下文,因此触发报错。

直接将注入操作移到canActivateCartGuard函数内部即可,同时不需要额外使用effect(守卫是路由激活前的一次性检查,无需监听购物车的实时变化):

export const canActivateCartGuard: CanActivateFn = (route, state) => {
  const cartService = inject(CartService);
  const toastr = inject(ToastrService);
  
  const numberOfCartItems = cartService.cartSignal().length;
  
  if(numberOfCartItems) {
    return true;
  }
  toastr.error("Your cart is currently empty!", "")
  return false;
};

补充说明

  • CanActivateFn类型的守卫函数本身属于Angular的注入上下文,允许在内部直接调用inject()获取服务实例。
  • 原代码中的effect是用于响应式状态的持续监听,而守卫只需要在路由激活时做一次即时检查,因此完全不需要这个逻辑。

内容的提问来源于stack exchange,提问作者koque

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.15 23:37:33