生产模式中的 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
所以在我的项目中,我有组件和服务,并且在我需要的地方包含了服务。为此,我在构造函数中将所有服务声明为私有。例如:
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