【问题标题】:Resolve router error: Uncaught Error: Can't resolve all parameters for MemberListResolver:解决路由器错误:未捕获错误:无法解析 MemberListResolver 的所有参数:
【发布时间】:2020-04-06 15:17:54
【问题描述】:

我在 Angular 中创建解析器时遇到问题。当我开始申请时,我给出了一个 未捕获的错误:无法解析 MemberListResolver 的所有参数:(?)。错误。 有人可以帮我吗?

我的解析器类:

Injectable({providedIn: 'root'})
export class MemberListResolver implements Resolve<User[]> {
  constructor(private userService: UserService){}

  resolve() {
    return this.userService.getUsers();
  }
}

我在路由器中注册了

{ path: 'members', component: MemberlistComponent, 
  resolve: { users: MemberListResolver }
},

在 app.module.ts 中:

providers: [  MemberListResolver ]

然后我调用组件:

export class MemberlistComponent implements OnInit {

  constructor(private userService: UserService, 
    private alertify: AlertifyService, 
    private route: ActivatedRoute
  ) { 
  }

  users: User[];

  ngOnInit() {
    this.route.data.subscribe(data => {
      this.users = data['users'];
    });
  }
}

【问题讨论】:

  • 今后,请不要将常规文本放入代码样式中。将其向下移动 4 个空格。
  • 您能说明您是如何注册UserService 以进行依赖注入的吗?是与@Injectable 合作还是作为提供者?
  • @Injectable({ providedIn: 'root' }) 导出类 UserService { baseUrl = environment.apiUrl;用户:用户;构造函数(私有 http:HttpClient){}getUsers():Observable{return this.http.get(this.baseUrl + 'users'); } getUser(id): Observable { return this.http.get(this.baseUrl + 'users/' + id); } } 在 app.module.ts 提供者中:[UserService]

标签: angular


【解决方案1】:

有很多原因可以做到这一点:

1- 看来您在MemberListResolver 中的Injectable 关键字之前忘记了@ 装饰器

应该是@Injectable 而不是Injectable

2- 如果这也不起作用,您需要将此 polyfill 导入到 src/polyfills.ts 文件中

import 'core-js/es7/reflect';

3- 如果您更新了Angular 版本或Angular/CLI 版本,则删除node_modules 并运行npm install

注意:你不需要将Service添加到app.module.ts中的providers数组中,只要你使用了{ providedIn: 'root' },这将使该服务的相同版本在整个应用程序中可用太

因此,只要您需要使该服务实例在应用程序范围内可用,请选择两种方式之一

希望这会有所帮助

【讨论】:

    猜你喜欢
    • 2018-08-22
    • 2018-12-18
    • 2018-09-21
    • 2023-03-16
    • 2019-12-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多