angular2 cómo cambiar el prefijo predeterminado del componente para detener las advertencias de tslint


142

Parece que cuando creo una aplicación Angular 2 usando Angular cli. Mi prefijo de componente predeterminado es raíz de la aplicación para AppComponent. Ahora, cuando cambio el selector a otra cosa, diga "abc-root"

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

vscode me advierte

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

Respuestas:


285

Debe modificar dos archivos tslint.json y .angular-cli.json, suponga que desea cambiar a myprefix :

En el archivo tslint.json solo modifique los siguientes 2 atributos:

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

cambiar "aplicación" a "myprefix"

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

En el archivo angular.json solo modifique el prefijo de atributo: (Para la versión angular menor que 6, el nombre del archivo es .angular-cli.json)

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

cambiar "aplicación" a "myprefix"

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

Si en el caso necesita más de un prefijo como @Salil Junior señala:

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

Si crea un nuevo proyecto usando Angular cli, use esta opción de línea de comando

ng new project-name --prefix myprefix

2
También recibí una advertencia ng generate componentincluso después de la actualización tslint.json: You are using different prefix from app, you might get lint errors. Please update "tslint.json" accordingly.tuve que actualizar la apps.prefixpropiedad .angular-cli.jsonpara deshacerme de esa advertencia.
natchiketa

He intentado los métodos anteriores pero aún obtengo el error - [tslint] El selector del componente "PrgAxcShiftChartComponent" debería tener el prefijo "app" ( angular.io/styleguide#style-02-07 ) (selector de componentes). Por favor ayuda. Usando el selector como: 'prg-axc-shift-chart',
ManZ

¿Qué sucede si no desea imponer un prefijo, pero aún desea imponer camelCase? ¿Es eso una posibilidad? Utilicé la sintaxis de la matriz y le agregué una cadena vacía y parecía funcionar, pero no estoy seguro de si esa es la forma ideal o no.
enamorado

11
Tenga en cuenta que en Angular 6 tslint.jsonse puede encontrar un archivo adicional <your-project>/src/tslint.jsonque contiene las reglas del componente y del selector de directivas. Si ha aplicado la solución anterior y aún no funciona, asegúrese de verificar que este archivo no anule su configuración global. ( github.com/mgechev/codelyzer/issues/620#issuecomment-394131604 )
Simon

19
  1. Ajuste su angular-cli.json: "prefix": "defaultPrefix" para que angular-cli lo use para generar componentes.
  2. Ajust tslint.jsonasí:

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

16

En realidad, con Angular Cli, puede cambiar la etiqueta "prefijo", dentro de la matriz de "aplicaciones" en su angular-cli.json, ubicada en la aplicación raíz.

Cambiando por "TheBestPrefix", así.

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

Cuando genera un nuevo componente usando CLI, ng g component mycomponent la etiqueta del componente tendrá el siguiente nombre"TheBestPrefix-mycomponent"


pero que fix doesnt donde (a propósito) algunos componentes se han generado a través de CLI con un prefijo diferente que el prefijo de la solicitud de base
user292701

1
Para WebStorm, esto no funcionó para mí. Tuve que cambiar tslint.json para evitar la advertencia como se menciona en la pregunta. Cambiar angular-cli.json solo ayuda a generar nuevos componentes / directivas.
camden_kid

16

En angular 6/7adelante habrá un tslint.jsondentro de su /srccarpeta que contiene las tslistreglas para sus componentes y directivas.

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

Cambiar en ese archivo solucionará el problema.


2
O eliminarlo, por lo que deja de anular el tslint.jsonarchivo principal .
Zarepheth

¿Cambiarlo cómo? ¿Es lo que estás mostrando antes o después del cambio?
Paul Rooney

@PaulRooney se puede ver para el directive-selectoragregado "directivePrefix"que será el prefijo de la directiva y lo mismo para los componentes
Aniruddha Das

¿Se fue esto en Angular 8?
Elat

0

Gracias a @Aniruddha señalando los cambios en angular 7:

crear tslint.jsonen src/app/sharedextender el app/tslint.json:

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

Una cosa: si en app.component.spec se burla de un componente del módulo compartido, se quejará de que su selector de simulacros comienza con 'compartido' en lugar de comenzar con 'aplicación'. Supongo que eso tiene sentido: debería crear mis simulacros en el módulo de donde vinieron.


-1

tslint.json

"selector de componentes": [verdadero, "elemento", "aplicación", "caso kebab"]

este 'caso kebab' obliga a cualquier selector de componentes a estar con este caso '-'.

por ejemplo , puede tener un selector como ' app-test ', ' app-my ' como este.

Y en lo que respecta a su error, debe iniciar el selector de componentes con 'aplicación' como acabo de mencionar en el ejemplo.

No creo que deba hacer ningún cambio en tslint.json, aunque resolvería su problema, pero no es una buena práctica cambiar en tslint.

Gracias

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.