spa*_*610 4 typescript angular angular6
在阅读本教程时,我遇到了一个奇怪的情况。
在您将服务注入组件中时,如果错过了访问修饰符,则会出现以下错误,但将其添加为私有或公共运行会很好。
如果错过了访问修饰符,我们在Angular中没有任何默认范围吗?
export class UserDetailsComponent implements OnInit {
name="";
lastName="";
constructor(userService : UserServiceService) { }
ngOnInit() {
}
save(){
this.userService.saveUser();
}
}
Run Code Online (Sandbox Code Playgroud)
类型'UserDetailsComponent'上不存在属性'userService'。
已经提供的所有答案都非常清楚并且有很好的信息。因此,简单来说,这是发生的事情:
你的构造函数是一个函数。在任何编程语言(到目前为止我遇到过)中,函数的参数只存在于函数本身的范围内。因此,在构造函数中传递的参数在整个类中不可用,除非将其值显式分配给类成员(如 Samuel J Matthew 提供的第二段代码所示。
参数中的访问修饰符的作用是指示 Angular 使用提供的访问修饰符创建与参数同名的类成员,并将其初始化为参数类型的实例。换句话说,参数成为类成员/属性。正如已经说过的,这被称为参数属性,这是一个非常合适的名称。
Ken 提供的文档非常有帮助。绝对值得一读。
Typescript 为您提供了依赖注入常见模式的快捷方式。
\n\n您可以将其放入构造函数中:
\n\n this.userService = userService\nRun Code Online (Sandbox Code Playgroud)\n\n并创建一个属性声明:
\n\n userService: UserService;\nRun Code Online (Sandbox Code Playgroud)\n\n或者,您可以将 \xe2\x80\x98public\xe2\x80\x99 放在 ctor 函数参数上,Typescript 会为您完成所有这些工作。对于 \xe2\x80\x98private\xe2\x80\x99 也是如此。但如果尝试在模板中使用私有属性,AOT 可能会失败。
\n\n\n| 归档时间: |
|
| 查看次数: |
1061 次 |
| 最近记录: |