angular2 come modificare il prefisso predefinito del componente per interrompere gli avvisi tslint


142

Sembra, quando creo un'app Angular 2 usando Angular cli. Il mio prefisso componente predefinito è app-root per AppComponent. Ora, quando cambio il selettore in qualcos'altro, dico "abc-root"

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

vscode mi avverte,

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

Risposte:


285

È necessario modificare due file tslint.json e .angular-cli.json, supponendo di voler passare a myprefix :

Nel file tslint.json basta modificare i seguenti 2 attributi:

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

cambia "app" in "myprefix"

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

Nel file angular.json basta modificare il prefisso dell'attributo: (Per la versione angolare inferiore a 6, il nome del file è .angular-cli.json)

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

cambia "app" in "myprefix"

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

Se hai bisogno di più di un prefisso come sottolinea @Salil Junior :

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

Se si crea un nuovo progetto usando Angular cli utilizzare questa opzione della riga di comando

ng new project-name --prefix myprefix

2
Ho anche ricevuto un avviso ng generate componentanche dopo l'aggiornamento tslint.json: You are using different prefix from app, you might get lint errors. Please update "tslint.json" accordingly.ho dovuto aggiornare la apps.prefixproprietà .angular-cli.jsonper liberarmi di quell'avviso.
natchiketa,

Ho provato i metodi sopra ma ho ancora l'errore - [tslint] Il selettore del componente "PrgAxcShiftChartComponent" dovrebbe avere il prefisso "app" ( angular.io/styleguide#style-02-07 ) (selettore componente). Per favore aiuto. Usando il selettore come: 'prg-axc-shift-chart',
ManZ il

Che cosa succede se non si desidera applicare un prefisso, ma si desidera comunque applicare camelCase? È una possibilità? Ho usato la sintassi dell'array e ho aggiunto una stringa vuota e sembrava funzionare, ma non sono sicuro che sia il modo ideale o meno.
schiaccia il

11
Si noti che in Angular 6 è tslint.jsonpossibile trovare un file aggiuntivo in <your-project>/src/tslint.jsoncui sono contenute le regole di selezione dei componenti e delle direttive. Se hai applicato la correzione di cui sopra e continua a non funzionare per te, assicurati di controllare che questo file non abbia la precedenza sulla tua configurazione globale. ( github.com/mgechev/codelyzer/issues/620#issuecomment-394131604 )
Simon

19
  1. Modifica il tuo angular-cli.json: "prefisso": "defaultPrefix" in modo che angular-cli lo utilizzi per generare componenti.
  2. Proprio tslint.jsoncosì:

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

16

In realtà, con Angular Cli, puoi semplicemente cambiare il tag "prefisso", all'interno dell'array "app" sul tuo angular-cli.json, situato sull'app root.

Cambiando per "TheBestPrefix", in questo modo.

"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 si genera un nuovo componente utilizzando l'interfaccia ng g component mycomponent della riga di comando, il tag del componente avrà il seguente nome"TheBestPrefix-mycomponent"


ma ciò non risolve dove (di proposito) alcuni componenti sono stati generati tramite cli con un prefisso diverso rispetto al prefisso dell'applicazione di base
user292701

1
Per WebStorm, questo non ha funzionato per me. Ho dovuto cambiare tslint.json per evitare l'avvertimento come indicato nella domanda. La modifica di angular-cli.json aiuta solo a generare nuovi componenti / direttive.
camden_kid,

16

Per ora angular 6/7ci sarà un tslint.jsoninterno alla /srccartella che contiene le tslistregole per il componente e le direttive.

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

La modifica in quel file risolverà il problema.


2
O rimuovendolo, quindi smette di sovrascrivere il tslint.jsonfile principale .
Zarepheth,

Cambialo come? È quello che stai mostrando prima o dopo la modifica?
Paul Rooney,

@PaulRooney puoi vedere per l' directive-selectorho aggiunto "directivePrefix"che sarà il prefisso per la direttiva e lo stesso per i componenti
Aniruddha Das,

È andato via in Angular 8?
eflat,

0

Grazie a @Aniruddha sottolineando i cambiamenti nell'angolare 7:

creare tslint.jsonin src/app/sharedper estendere il app/tslint.json:

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

Una cosa: se in app.component.spec deridi un componente dal modulo condiviso, si lamenterà che il tuo selettore mock inizia con 'condiviso' invece di iniziare con 'app'. Suppongo che abbia senso: dovrei creare le mie beffe nel modulo da cui provengono.


-1

tslint.json

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

questo "caso kebab" forza qualsiasi selettore di componenti a stare con questo caso "-".

ad esempio puoi avere un selettore come ' app-test ', ' app-my ' in questo modo.

E per quanto riguarda il tuo errore, devi avviare il selettore di componenti con "app", come ho appena menzionato nell'esempio.

Non credo che dovresti apportare modifiche a tslint.json, anche se risolverebbe il tuo problema, ma non è una buona pratica cambiare in tslint.

Grazie

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.