在Angular 2+(4)routing tutorial中,它显示使router
成为私人成员,例如:
constructor(
private router: Router, // <- router is private
private heroService: HeroService) { }
...
) {}
但它没有提供关于为什么路由器在这里是私有的任何解释。私有化使得测试更加困难,那么它是私有的原因是什么?它只是最佳实践,还是有一些安全隐含的公开?
另外,具体来说,如何测试路由,在不同情况下导航到正确的路由?本教程没有提到测试路由器/路由的所有?
答案 0 :(得分:2)
添加private
,public
或protected
隐式添加了一个类级别字段,其中传递了构造函数参数。
这是一个TypeScript功能,用于较少的样板。
您现在可以使用
访问传递的值someMethod() {
this.router...
}
而不是
class MyComponent {
router:Router;
constructor(
router: Router, // <- router is private
private heroService: HeroService) { }
...
) {
this.router = router;
}
someMethod() {
this.router...
}
}
如果没有具体原因public
或protected
,private
是正确的选择。这就是他们所做的。
答案 1 :(得分:1)
封装。使您的字段私有和功能公开。使用您的class in this case
的客户只需知道它可以做什么,而不知道它是怎么做的。
TypeScript中有3个访问级别public, private, protected
。仅在Typescript级别支持这些关键字。
如果您将variable/function
设为私人,则该课程外 将不可见。
如果您将variable/function
公开,则会在课堂外显示。
如果您使variable/function
受保护,则仅在类本身和任何继承该类的类中可见。
答案 2 :(得分:1)
这个特定示例中的路由器并不特别......在OOP中,问题总是“这应该被外部代码作为这个类的公共接口的一部分来访问吗?”你是否期望router
来自ctrl.router
以外的其他任何地方?如果没有,那么保持private
是唯一谨慎的做法。将公开的公共接口限制为仅包含真正必要的部分,可以更容易地找出使用的内容,并在以后根据需要重构它,因为没有外部代码绑定到它。