angular2如何更改组件的默认前缀以停止tslint警告


142

看来,当我使用Angular cli创建Angular 2应用程序时。我的默认组件前缀是AppComponent的app-root。现在,当我将选择器更改为其他名称时,说“ abc-root”

@Component({
  selector: 'abc-root',
  templateUrl: './app.component.html',
  styleUrls: ['./app.component.css']
})

vscode警告我,

[tslint] The selector of the component "AppComponent" should have prefix "app"

Answers:


285

您需要修改两个文件tslint.json和.angular-cli.json,假设您想更改为myprefix

在tslint.json文件中,只需修改以下2个属性:

"directive-selector": [true, "attribute", "app", "camelCase"],
"component-selector": [true, "element", "app", "kebab-case"],

将“ app”更改为“ myprefix”

"directive-selector": [true, "attribute", "myprefix", "camelCase"],
"component-selector": [true, "element", "myprefix", "kebab-case"],

在angular.json文件中,只需修改属性前缀:( 对于小于6的Angular版本,文件名为.angular-cli.json)

"app": [
  ...
  "prefix": "app",
  ...

将“ app”更改为“ myprefix”

"app": [
  ...
  "prefix": "myprefix",
  ...

如果您需要多个前缀,如@Salil Junior指出:

"component-selector": [true, "element", ["myprefix1", "myprefix2"], "kebab-case"],

如果使用Angular cli创建新项目,请使用此命令行选项

ng new project-name --prefix myprefix

2
ng generate component即使在更新后,我也收到警告tslint.jsonYou are using different prefix from app, you might get lint errors. Please update "tslint.json" accordingly.我必须更新apps.prefix属性.angular-cli.json以摆脱该警告。
natchiketa

我已经尝试了上述方法,但仍然遇到错误-[tslint]组件“ PrgAxcShiftChartComponent”的选择器应带有前缀“ app”(angular.io/styleguide#style-02-07)(组件选择器)。请帮忙。将选择器用作:'prg-axc-shift-chart',
ManZ

如果您不想强制使用前缀,但仍想强制使用camelCase怎么办?那有可能吗?我使用了数组语法,并向其中添加了一个空字符串,这似乎可行,但是不确定这是否是理想的方法。
美眉

11
请注意,在Angular 6 tslint.json中可以找到一个附加文件,<your-project>/src/tslint.json其中包含组件和指令选择器规则。如果您已应用上述修复程序,但仍无法使用,请确保您检查此文件是否没有覆盖全局配置。(github.com/mgechev/codelyzer/issues/620#issuecomment-394131604
西蒙

19
  1. 调整您的angular-cli.json:“ prefix”:“ defaultPrefix”,以便angular-cli将其用于生成组件。
  2. Ajust tslint.json是这样的:

    "directive-selector": [
      true,
      "attribute",
      ["prefix1", "prefix2", "prefix3"],
      "camelCase"
    ],
    "component-selector": [
      true,
      "element",
      ["prefix1", "prefix2", "prefix3"],
      "kebab-case"
    ],
    

16

实际上,使用Angular Cli,您只需angular-cli.json在根应用程序的上的“ apps”数组内更改“ prefix”标签即可。

像这样更改“ TheBestPrefix”。

"apps": [
  {
    "root": "src",
    "outDir": "dist",
    "assets": [
      "assets",
      "favicon.ico"
    ],
    "index": "index.html",
    "main": "main.ts",
    "test": "test.ts",
    "tsconfig": "tsconfig.json",
    "prefix": "TheBestPrefix",
    "mobile": false,
    "styles": [
      "styles.css"
    ],
    "scripts": [],
    "environments": {
      "source": "environments/environment.ts",
      "dev": "environments/environment.ts",
      "prod": "environments/environment.prod.ts"
    }
  }
]

使用CLI生成新组件时,ng g component mycomponent 组件标签将具有以下名称"TheBestPrefix-mycomponent"


但这不能解决在某些地方(故意)通过cli生成的前缀与基本应用程序前缀不同的某些位置的问题
user292701 '17

1
对于WebStorm,这对我不起作用。必须更改tslint.json以防止问题中提到的警告。更改angular-cli.json仅有助于生成新的组件/指令。
camden_kid

16

对于angular 6/7以后会有一个tslint.json你里面/src的文件夹,其保存tslist为组件和指令的规则。

{
    "extends": "../tslint.json",
    "rules": {
        "directive-selector": [
            true,
            "attribute",
            "directivePrefix",
            "camelCase"
        ],
        "component-selector": [
            true,
            "element",
            "compoenent-prefix",
            "kebab-case"
        ]
    }
}

更改该文件将解决此问题。


2
或删除它,以便它停止覆盖主tslint.json文件。
扎里菲斯

怎么改变?更改前后显示的是什么?
Paul Rooney

@PaulRooney您可以为directive-selector我添加"directivePrefix"的指令看到前缀,指令的前缀与组件的相同
Aniruddha Das

这在Angular 8中消失了吗?

0

感谢@Aniruddha指出了角度7的变化:

创建tslint.jsonsrc/app/shared延长app/tslint.json

{
  "extends": "../../tslint.json",
  "rules": {
    "directive-selector": [
      true,
      "attribute",
      "shared",
      "camelCase"
    ],
    "component-selector": [
      true,
      "element",
      "shared",
      "kebab-case"
    ]
  }
}

一件事-如果在app.component.spec中模拟共享模块中的组件,它将抱怨您的模拟选择器以“ shared”开头,而不是以“ app”开头。我想这是有道理的-我应该从它们来的模块中创建我的模拟。


-1

tslint.json

“组件选择器”:[true,“ element”,“ app”,“ kebab-case”]

这个“ kebab-case”强制任何组件选择器都使用“-” case。

例如,您可以像这样使用选择器,例如“ app-test ”,“ app-my ”。

就您所关心的错误而言,您必须使用示例中刚刚提到的“ app”启动组件选择器。

我认为您不应该对tslint.json进行任何更改,尽管它可以解决您的问题,但是更改tslint并不是一个好习惯。

谢谢

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.