生产模式下的AoT错误

时间:2018-07-25 20:43:29

标签: angular typescript aot

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

constructor(private myService: MyService) {}

但是在html模板中,我使用了([ngModel])="myService.name"之类的服务。这就是问题所在,当我尝试以生产模式进行构建时,我遇到了许多AoT错误,说我使用的是私有属性,该属性只能在该类中为html模板中使用的每个服务访问。因此,我想知道是否将所有服务都声明为公共服务以避免AoT错误是一种好习惯。

2 个答案:

答案 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