angular2 como alterar o prefixo padrão do componente para parar os avisos do tslint

142

Parece que, quando eu crio um aplicativo Angular 2 usando o Angular cli. Meu prefixo de componente padrão é app-root para AppComponent. Agora, quando mudo o seletor para outra coisa, diga "abc-root"

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

vscode me avisa,

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

Respostas:

285

Você precisa modificar dois arquivos tslint.json e .angular-cli.json, suponha que você queira alterar para myprefix :

No arquivo tslint.json, modifique os 2 atributos a seguir:

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

mude "app" para "myprefix"

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

No arquivo angular.json, modifique o prefixo do atributo: (para versão angular menor que 6, o nome do arquivo é .angular-cli.json)

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

mude "app" para "myprefix"

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

Se, no caso, você precisar de mais de um prefixo, como aponta o @Salil Junior :

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

Se criar um novo projeto usando Angular CLI, use esta opção de linha de comando

ng new project-name --prefix myprefix
Nehal Damania
fonte
2
Também recebi um aviso ng generate componentmesmo após a atualização tslint.json: You are using different prefix from app, you might get lint errors. Please update "tslint.json" accordingly.tive que atualizar a apps.prefixpropriedade .angular-cli.jsonpara me livrar desse aviso.
Nathketa
Eu tentei os métodos acima, mas ainda recebo erro - [tslint] O seletor do componente "PrgAxcShiftChartComponent" deve ter o prefixo "app" ( angular.io/styleguide#style-02-07 ) (seletor de componente). Por favor ajude. Usando o seletor como: 'prg-axc-shift-chart',
ManZ
E se você não deseja impor um prefixo, mas ainda deseja impor camelCase? Isso é uma possibilidade? Eu usei a sintaxe da matriz e adicionei uma string vazia a ela, que parecia funcionar, mas não tenho certeza se essa é a maneira ideal ou não.
esmagar
11
Observe que no Angular 6 tslint.jsonpode ser encontrado um arquivo adicional <your-project>/src/tslint.jsonque contém as regras do seletor de componentes e diretivas. Se você aplicou a correção acima e ela ainda não está funcionando, verifique se esse arquivo não está substituindo sua configuração global. ( github.com/mgechev/codelyzer/issues/620#issuecomment-394131604 )
Simon
19
  1. Ajuste seu angular-cli.json: "prefix": "defaultPrefix" para que o angular-cli use isso para gerar componentes.
  2. Ajust tslint.jsonassim:

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

Na verdade, com o Angular Cli, você pode alterar a tag "prefix", dentro da matriz "apps" do seu angular-cli.json, localizada no aplicativo raiz.

Alterando para "TheBestPrefix", assim.

"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"
    }
  }
]

Quando você gera um novo componente usando a CLI, ng g component mycomponent a tag component terá o seguinte nome"TheBestPrefix-mycomponent"

Anderson Silva
fonte
mas essa correção doesnt onde (de propósito) alguns componentes foram gerados via cli com um prefixo diferente do prefixo da aplicação básica
user292701
1
Para o WebStorm, isso não funcionou para mim. Teve que mudar o tslint.json para evitar o aviso, conforme mencionado na pergunta. Alterar angular-cli.json apenas ajuda na geração de novos componentes / diretivas.
Camden_kid
16

A angular 6/7partir de então, haverá uma pasta tslint.jsondentro da sua /srcpasta que contém as tslistregras para seu componente e diretrizes.

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

Alterar esse arquivo corrigirá o problema.

Aniruddha Das
fonte
2
Ou removê-lo, para que ele pare de substituir o tslint.jsonarquivo principal .
Zarepheth 20/03/19
Mudar como? É o que você está mostrando antes ou depois da mudança?
Paul Rooney
@PaulRooney você pode ver pelo que directive-selectoreu adicionei, "directivePrefix"que será o prefixo da diretiva e o mesmo para os componentes #
31419 Aniruddha Das
Isso desapareceu no Angular 8?
eflat 3/01
0

Graças a @Aniruddha, apontando as mudanças no angular 7:

criar tslint.jsonem src/app/sharedestender a app/tslint.json:

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

Uma coisa: se no app.component.spec você zombar de um componente do módulo compartilhado, ele reclamará que o seletor de zombaria começa com 'shared' em vez de começar com 'app'. Suponho que faça sentido - eu deveria estar criando minhas simulações no módulo de onde elas vieram.

Robert King
fonte
-1

tslint.json

"seletor de componentes": [true, "elemento", "app", "kebab-case"]

este 'kebab-case' força qualquer seletor de componente a estar com este '-' case.

por exemplo, você pode ter um seletor como ' app-test ', ' app-my ' assim.

E no que diz respeito ao seu erro, você deve iniciar o seletor de componentes com 'app', como acabei de mencionar no exemplo.

Não acho que você deva fazer alguma alteração no tslint.json, embora isso resolva o problema, mas não é uma boa prática alterar o tslint.

obrigado

Chandra Prakash Variyani
fonte