使用带有下划线前缀的 Angular API 方法是否安全?



角度材料分页器有一个以_开头的方法。

_changePageSize(pageSize: number) {
// Current page needs to be updated to reflect the new page size. Navigate to the page
// containing the previous page's first item.
const startIndex = this.pageIndex * this.pageSize;
const previousPageIndex = this.pageIndex;
this.pageIndex = Math.floor(startIndex / pageSize) || 0;
this.pageSize = pageSize;
this._emitPageEvent(previousPageIndex);
}

此方法在分页器 API 文档中列出。然而,它在这样的答案中被引用。

在同一分页器组件中,定义为私有且在 IDE 中不可用的方法。

private _updateDisplayedPageSizeOptions() {
if (!this._initialized) { return; }
// If no page size is provided, use the first page size option or the default page size.
if (!this.pageSize) {
this._pageSize = this.pageSizeOptions.length != 0 ?
this.pageSizeOptions[0] :
DEFAULT_PAGE_SIZE;
}

在AOT中,成功编译后会给出错误。

i 「wdm」:编译成功。

ERROR in src/app/models/models.component.ts(153,22):

错误 TS2341:属性"_updateDisplayedPageSizeOptions"是私有的 并且只能在"MatPaginator"类中访问。

我知道约定_是指 Javascript 中的私有方法概念,而不是直接私有方法概念。只需要更多信息:

  • 这是不应该依赖的内部方法吗?
  • 在角度(或角度材料(中,以_方法开始的方法和常规方法之间有什么区别?
  • 如果是更改页面大小不是私有方法,为什么_后缀?如果是私有方法,为什么不标记为私有方法?这是不一致还是我在这里缺少什么?

是的- 下划线前缀是私有成员的常见编程约定。任何不属于公共 API 的内容都可能在将来的版本(甚至可能是下一个版本(中更改或删除,因此不可靠。公共 API 更改至少受语义版本控制规则的约束,并显示在更改日志中。

具有下划线前缀的函数与除前缀本身外没有下划线前缀的函数之间没有区别。关注的是组件及其函数等的预期用途,下划线用于标识不打算在组件外部使用的成员。

如果你的问题是:"我应该在我的代码中做同样的事情吗?那么不,使用private changePageSize(){...}- 如果你担心安全,让TypeScript帮助你,这就是它的目的。

如果您想知道约定,那么不建议使用此函数,因为 API 不保证将以相同的方式工作,甚至存在于未来的更新中。

最新更新