无未使用变量的TSLint规则不适用于私有@HostBinding

时间:2018-10-01 16:08:18

标签: angular angular6 encapsulation tslint angular2-hostbinding

在我的TSLint文件中,我有:

"no-unused-variable": true

在我的组件中,有时会有:

// tslint:disable-next-line:no-unused-variable
@HostBinding('class') private classes = 'my-theme';

由于classes是私有的,TSLint抱怨,所以我必须每次禁用TSLint。

由于封装原因,我不想公开@HostBinding

解决此问题的推荐方法是什么?

2 个答案:

答案 0 :(得分:2)

据我所知,您有两种选择。

1-使用protected。自我说明:

@HostBinding('class') protected classes = 'my-theme';

2-使用ignore-pattern。根据{{​​3}},此规则将忽略与指定模式匹配的变量和导入名称。该模式是一个正则表达式,^_表示以_开头的任何字符串。

tslint.json:

...
"no-unused-variable": [true, {"ignore-pattern": "^_"}]
...

组件:

@HostBinding('class') private _classes = 'my-theme';

奖金

如果变量是只读的,则也可以执行其中之一。它不会防止tslint错误,但是如果您担心封装问题,它将防止意外修改变量。

@HostBinding('class') private readonly classes = 'my-theme';
@HostBinding('class') private get classes() { return 'my-theme'; }

答案 1 :(得分:0)

经过研究,解决方案是简单地使其public

@HostBinding('class') public classes = 'my-theme';

这是因为从Angular的角度来看,它访问组件,类似于component.classes。因此,从语义上讲,它是公开的。这就是@Input应该公开的原因,即使您不在模板中使用它。

来源:

https://stackoverflow.com/a/38469573/3481582