我正在使用带有 Typescript 的 Angular2
假设我的应用组件模板中有以下内容:
...
<coffee-cup [coffee]=""
...
我的coffee-cup
组件:
@Component({
selector: 'coffee-cup',
...
})
export class CoffeeCup {
@Input()
public coffee = 0;
}
我目前不确定我的输入应该是什么样子。它可能看起来像这样:
@Input()
public coffee = 0;
或者
@Input()
private coffee = 0;
我目前倾向于将成员变量咖啡设为私有。
- 我想为组件定义一个清晰的公共 API
- 我只想公开通过模板设置咖啡属性
- 我目前没有任何理由允许直接从父组件读取或设置咖啡。如果需要,我可以删除 private 修饰符。
我查看组件的方式是有两个单独的 API 可以与之交互:
- 模板 API,由
@Inputs
和@Outputs
- 由所有公共属性和方法组成的 Typescript API
我没有检查以下情况会发生什么,但是,它可能会改变答案:
- 假设咖啡会员是公开的。如果我
appComponent
可以CoffeeCup
使用@ViewChild
并设置咖啡成员,生命周期钩子(如ngOnChange
)会触发吗?
重申这个问题:Angular2 应该@Input
是公开的还是我们可以/应该通过将它们设为私有来拥有更严格的 API?