angular - 我应该为 Angular 中的模板可访问方法提供什么样的访问修饰符?
问题描述
我试图让我的 Angular 应用程序对其他程序员来说是直接可读的,我遇到了这个困境,我的组件中有一个方法:
onAddPost(): void {
console.log('adding a post!');
}
我想从我的模板(同一组件)中的按钮单击时调用它:
<button (click)="onAddPost()">Save Post</button>
到目前为止一切都很好,但是我想提供访问修饰符以仅在给定组件内运行“onAddPost”,但似乎没有任何效果。
private onAddPost(): void {
console.log('adding a post!');
}
给了我以下错误:
"Property 'onAddPost' is private and only accessible within class 'PostCreateComponent'"
我得到了类似“受保护”的东西,有人可以帮助我了解我对 Angular 的遗漏吗?为什么模板不是组件类的一部分?我可以限制对组件中使用的方法的访问吗?
解决方案
正如@ kurt -hamilton 的回答所说,该方法必须是公开的才能被模板访问。
就个人而言,这也让我感到厌烦。我也更喜欢一种使组件的方法和属性仅对模板可用的方法。不幸的是,据我所知,没有办法做到这一点。
为了清楚起见,我所做的是声明一个接口,其中包含要公开给模板的方法和属性,然后让组件实现该接口。
通过一些额外的努力,您可以将组件的方法和属性设为私有,并在接口(公共)中公开它们。
最后,组件有一个用于“view”的公共“getter”,它简单地返回组件的“this”指针。
那么,模板通过接口访问组件的方法和属性,例如,(click)=view.onClick($event)
它不会阻止模板中的任何内容直接访问事物,但是如果您始终如一地使用此模式,那么当模板进行直接访问而不是通过接口进行访问时就会变得很明显。
你可能会也可能不会觉得这是值得的,YMMV。就个人而言,我发现它有点重,并停止使用该模式。
推荐阅读
- python - How do I create a new dataframe column based on certain conditons as it gives me a TypeError: where() takes from 1 to 3 pos args but 4 were given?
- python - 如何更改txt中的某些单词?
- python - 如何在Python中找到每一行的总和?
- python - 熊猫框架中的 IBM 色调分析器输出具有重复值
- vue.js - 看不到 vuetify 'v-select' 组件
- jquery - 如何限制用户从父节点 Kendo Tree 视图 MVC 中仅选择一个子节点
- delphi - 在我的 Delphi REST API 中验证 Azure AD 客户端令牌
- java - 支持带有特殊字符连字符的帐号的正则表达式模式,在我们应该允许可选的数字模式之后
- tron - 未找到 TronGrid API 获取交易标志
- java - Java如何清除控制台中的一行