You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

是否有ESLint规则强制Angular组件使用自闭合标签?

强制Angular组件使用自闭合标签的ESLint方案

目前**@angular-eslint官方套件中没有专门针对Angular组件强制自闭合标签的内置规则**,你尝试的html-eslint/require-closing-tags规则主要针对原生HTML标签,对Angular组件的识别和约束效果有限,这就是它无效的原因。

替代方案:自定义ESLint规则

你可以基于@angular-eslint/utils编写自定义规则,实现当Angular组件标签无内容时强制使用自闭合格式的需求。

1. 自定义规则示例

创建规则文件(比如rules/force-component-self-closing.ts):

import { ESLintUtils } from '@typescript-eslint/utils';
import { parseTemplate } from '@angular-eslint/utils';

const createRule = ESLintUtils.RuleCreator(name => name);

export default createRule({
  create(context) {
    const sourceCode = context.getSourceCode();
    const template = parseTemplate(sourceCode.text, context.parserServices);

    template.traverse({
      Element(node) {
        // 匹配Angular组件选择器(这里以app-开头为例,可根据项目规则调整)
        if (node.name.startsWith('app-')) {
          const hasContent = node.children.length > 0;
          const usesClosingTag = node.endTag !== null;

          // 空内容且使用闭合标签时触发规则
          if (!hasContent && usesClosingTag) {
            context.report({
              node: sourceCode.getNodeByRangeIndex(node.startTag.end),
              message: '空内容的Angular组件必须使用自闭合标签',
              fix(fixer) {
                // 替换为自闭合标签,移除闭合标签部分
                return [
                  fixer.replaceTextRange(
                    [node.startTag.end - 1, node.startTag.end],
                    '/>'
                  ),
                  fixer.removeRange([node.startTag.end, node.endTag.end]),
                ];
              },
            });
          }
        }
      },
    });

    return {};
  },
  meta: {
    type: 'layout',
    docs: {
      description: '强制空内容的Angular组件使用自闭合标签',
      recommended: 'error',
    },
    fixable: 'code',
    schema: [],
  },
  name: 'force-component-self-closing',
  defaultOptions: [],
});

2. 在ESLint配置中引入规则

在.eslintrc.json中添加配置:

{
  "overrides": [
    {
      "files": ["*.component.html"],
      "parser": "@angular-eslint/template-parser",
      "rules": {
        "./rules/force-component-self-closing": "error"
      }
    }
  ]
}

补充说明

Angular模板本身完全支持自闭合组件标签,自定义规则仅在代码风格层面做约束,不会影响Angular编译逻辑。你可以根据项目中组件选择器的实际规则(比如统一前缀)调整自定义规则中的匹配逻辑。

内容的提问来源于stack exchange,提问作者Brice Leclerc

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.16 06:01:12