生产模式中的 AoT 错误

AoT errors in production mode

所以在我的项目中,我有组件和服务,并且在我需要的地方包含了服务。为此,我在构造函数中将所有服务声明为私有。例如:

constructor(private myService: MyService) {}

但是在html模板中我使用了像([ngModel])="myService.name"这样的服务。这就是问题所在,当我尝试在生产模式下构建时,我遇到了很多 AoT 错误,说我正在使用私有 属性,对于我在其中使用的每个服务,它只能在 class 中访问一个 html 模板。所以我想知道将所有服务声明为 public 以避免 AoT 错误是否是一个好习惯。

您可以

  • 将 public 访问器添加到调用服务的组件上的 属性。

    get name():string {return this.myService.name;}
    
  • 在构造函数中将private改为public

    constructor(public myService: MyService) {}
    

至于这两个中的哪一个是"correct"见仁见智。

是的,如果您想在模板中使用它们,您需要将实例变量(例如您的服务)声明为 public。 或者,在您的 class 中声明一个 public 方法,这样您就不必直接使用您的服务:

constructor(private userService: UserService) {}

getUsers(): User[] {
  return this.userService.getUsers();
}

此外,我建议您在开发过程中使用 AOT,以便立即收到有关这些错误的通知。应该不会再花太长时间了。 ng serve --aot