angular2 how to change the default prefix of component to stop tslint warnings

It seems, when I create an Angular 2 app using Angular cli. My default component prefix is app-root for AppComponent. Now, when I change the selector to something else say "abc-root"

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

vscode warns me,

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

Solution 1:

You need to modify two files tslint.json and .angular-cli.json, suppose you want to change to myprefix:

In the tslint.json file just modify the following 2 attributes:

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

change "app" to "myprefix"

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

In the angular.json file just modify the attribute prefix: (For angular version less than 6, the file name is .angular-cli.json)

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

change "app" to "myprefix"

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

If in the case you need more than one prefix as @Salil Junior point out:

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

If creating a new project using Angular cli use this command line option

ng new project-name --prefix myprefix

Solution 2:

  1. Adjust your angular-cli.json: "prefix": "defaultPrefix" so that angular-cli will use that for generating components.
  2. Ajust tslint.json like this:

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

Solution 3:

For angular 6/7 onwards there will be a tslint.json inside your /src folder which holds the tslist rules for your component and directives.

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

Changing in that file will fix the problem.