首页 > 解决方案 > 我应该为 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 的遗漏吗?为什么模板不是组件类的一部分?我可以限制对组件中使用的方法的访问吗?

标签: angular

解决方案


正如@ kurt -hamilton 的回答所说,该方法必须是公开的才能被模板访问。

就个人而言,这也让我感到厌烦。我也更喜欢一种使组件的方法和属性仅对模板可用的方法。不幸的是,据我所知,没有办法做到这一点。

为了清楚起见,我所做的是声明一个接口,其中包含要公开给模板的方法和属性,然后让组件实现该接口。

通过一些额外的努力,您可以将组件的方法和属性设为私有,并在接口(公共)中公开它们。

最后,组件有一个用于“view”的公共“getter”,它简单地返回组件的“this”指针。

那么,模板通过接口访问组件的方法和属性,例如,(click)=view.onClick($event)

它不会阻止模板中的任何内容直接访问事物,但是如果您始终如一地使用此模式,那么当模板进行直接访问而不是通过接口进行访问时就会变得很明显。

你可能会也可能不会觉得这是值得的,YMMV。就个人而言,我发现它有点重,并停止使用该模式。


推荐阅读