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"
Nehal Damania
la source

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
Nehal Damania
la source
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"
    ],
    
user3765825
la source
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"

Anderson Silva
la source
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.

Aniruddha Das
la source
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.

Robert King
la source
-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

Chandra Prakash Variyani
la source