angular2 comment changer le préfixe par défaut du composant pour arrêter les avertissements tslint


142

Il semble que lorsque je crée une application Angular 2 en utilisant Angular cli. Mon préfixe de composant par défaut est app-root pour AppComponent. Maintenant, quand je change le sélecteur pour quelque chose d'autre, dites "abc-root"

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

vscode me prévient,

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

Réponses:


285

Vous devez modifier deux fichiers tslint.json et .angular-cli.json, supposons que vous vouliez changer en mon préfixe :

Dans le fichier tslint.json, modifiez simplement les 2 attributs suivants:

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

changer "app" en "myprefix"

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

Dans le fichier angular.json, modifiez simplement le préfixe de l'attribut: (Pour la version angulaire inférieure à 6, le nom du fichier est .angular-cli.json)

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

changer "app" en "myprefix"

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

Si dans le cas vous avez besoin de plus d'un préfixe comme @Salil Junior, faites-le remarquer:

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

Si vous créez un nouveau projet en utilisant Angular cli, utilisez cette option de ligne de commande

ng new project-name --prefix myprefix

2
J'ai également reçu un avertissement ng generate componentmême après la mise à jour tslint.json: You are using different prefix from app, you might get lint errors. Please update "tslint.json" accordingly.j'ai dû mettre à jour la apps.prefixpropriété .angular-cli.jsonpour me débarrasser de cet avertissement.
natchiketa

J'ai essayé les méthodes ci-dessus mais j'obtiens toujours une erreur - [tslint] Le sélecteur du composant "PrgAxcShiftChartComponent" devrait avoir le préfixe "app" ( angular.io/styleguide#style-02-07 ) (component-selector). Veuillez aider. Utilisation du sélecteur comme: 'prg-axc-shift-chart',
ManZ

Que faire si vous ne voulez pas appliquer de préfixe, mais que vous voulez quand même appliquer camelCase? Est-ce une possibilité? J'ai utilisé la syntaxe du tableau et y ai ajouté une chaîne vide et cela semblait fonctionner, mais je ne sais pas si c'est la manière idéale ou non.
écraser

11
Veuillez noter que dans Angular 6, un tslint.jsonfichier supplémentaire peut être trouvé dans <your-project>/src/tslint.jsonlequel contient les règles de sélection de composant et de directive. Si vous avez appliqué le correctif ci-dessus et que cela ne fonctionne toujours pas pour vous, assurez-vous de vérifier que ce fichier ne remplace pas votre configuration globale. ( github.com/mgechev/codelyzer/issues/620#issuecomment-394131604 )
Simon

19
  1. Ajustez votre angular-cli.json: "prefix": "defaultPrefix" afin qu'angular-cli l'utilise pour générer des composants.
  2. Juste tslint.jsoncomme ça:

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

16

En fait, avec Angular Cli, vous pouvez simplement changer la balise "prefix", dans le tableau "apps" sur votre angular-cli.json, situé sur l'application racine.

Changer pour "TheBestPrefix", comme ceci.

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

Lorsque vous générez un nouveau composant à l'aide de la CLI, ng g component mycomponent la balise de composant aura le nom suivant"TheBestPrefix-mycomponent"


mais cela ne corrige pas où (exprès) certains composants ont été générés via cli avec un préfixe différent du préfixe de l'application de base
user292701

1
Pour WebStorm, cela n'a pas fonctionné pour moi. J'ai dû changer tslint.json pour éviter l'avertissement comme mentionné dans la question. Changer angular-cli.json aide uniquement à générer de nouveaux composants / directives.
camden_kid

16

Pour les angular 6/7versions ultérieures , il y aura un à l' tslint.jsonintérieur de votre /srcdossier contenant les tslistrègles de votre composant et des directives.

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

La modification de ce fichier résoudra le problème.


2
Ou en le supprimant, il arrête de remplacer le tslint.jsonfichier principal .
Zarepheth

Le changer comment? Est-ce que ce que vous montrez avant ou après le changement?
Paul Rooney

@PaulRooney vous pouvez voir pour le que directive-selectorj'ai ajouté "directivePrefix"qui sera le préfixe pour la directive et même pour les composants
Aniruddha Das

Cela a-t-il disparu dans Angular 8?
eflat le

0

Merci à @Aniruddha en soulignant les changements de angulaire 7:

créer tslint.jsondans src/app/sharedde prolonger le app/tslint.json:

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

Une chose - Si dans app.component.spec vous vous moquez d'un composant d'un module partagé, il se plaindra que votre sélecteur de simulation commence par «shared» au lieu de commencer par «app». Je suppose que cela a du sens - je devrais créer mes simulacres dans le module d'où ils viennent.


-1

tslint.json

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

ce 'kebab-case' force tout sélecteur de composant à être avec ce cas '-'.

par exemple, vous pouvez avoir un sélecteur comme ' app-test ', ' app-my ' comme ceci.

Et en ce qui concerne votre erreur, vous devez démarrer le sélecteur de composants avec 'app' comme je viens de le mentionner dans l'exemple.

Je ne pense pas que vous devriez apporter des modifications à tslint.json, même si cela résoudrait votre problème, mais ce n'est pas une bonne pratique de modifier tslint.

Merci

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.