【发布时间】:2021-06-10 15:38:24
【问题描述】:
在我们的项目中,我们使用来自AirBnB 的 linting-config。 The is a rule,表示类方法必须使用 this 或声明为静态。从理论上讲,这条规则对我来说很有意义,但在角度上下文中似乎会引起一些问题。想象一下这样的组件 (Stackblitz):
import { Component, VERSION } from '@angular/core';
@Component({
selector: 'my-app',
template: '<p>{{doSomething("hello stack overflow")}}'
})
export class AppComponent {
doSomething(string: string): string {
return string.toLocaleUpperCase();
}
}
现在,linter 会抱怨 doSomething 没有使用它。 Wen 现在可以将函数设为静态来满足它 - 但我们将无法在模板中使用该函数。
一个结论是,doSomething 不应该是 AppComponent 的一部分,而是另一个服务。但是,我们将不得不再次将静态函数包装在非静态函数中。最后包装的功能比原来的小不了多少,所以整个外包到服务的事情似乎有点毫无意义。特别是因为我们谈到了明确只对组件模板有用的函数。这似乎是有问题的,尤其是对于ngForOf 的trackBy 的跟踪功能-它们本质上往往不使用this 关键字,并且仅在模板中使用,因此它们不能是静态的。
那么是否有一个有意义的模式来处理模板中使用的函数以及这个规则,或者它只是不是一个有用的角度规则?
【问题讨论】:
-
我想说您可以使用 Angular 管道 (angular.io/guide/pipes) 来实现这些模板数据转换功能。事实上,你也可以在 trackBy 中使用它们 (bennadel.com/blog/…)。但是随后 linter 会抱怨管道。因此,由于管道是 Angular 的重要组成部分,我会说它可能不适合 Angular 的规则(除非您可以从中排除管道)
标签: javascript angular typescript