因此,在我的项目中,我具有组件和服务,并且在需要的地方包含了服务。为此,我在构造函数中将所有服务声明为私有。例如:
constructor(private myService: MyService) {}
但是在html模板中,我使用了([ngModel])="myService.name"
之类的服务。这就是问题所在,当我尝试以生产模式进行构建时,我遇到了许多AoT错误,说我使用的是私有属性,该属性只能在该类中为html模板中使用的每个服务访问。因此,我想知道是否将所有服务都声明为公共服务以避免AoT错误是一种好习惯。
答案 0 :(得分:2)
您可以
向调用服务的组件的属性添加公共访问器。
get name():string {return this.myService.name;}
在构造函数中将private
更改为public
constructor(public myService: MyService) {}
就这2个中的哪一个“正确”而言,是有意见的。
答案 1 :(得分:1)
是的,如果要在模板中使用实例变量,则需要将其声明为公共变量。 或者,在您的类中声明一个公共方法,这样您就不必直接使用服务:
constructor(private userService: UserService) {}
getUsers(): User[] {
return this.userService.getUsers();
}
此外,我建议您在开发期间使用AOT,以便立即收到有关这些错误的通知。它应该不再需要更长的时间了。 ng serve --aot