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"
Nehal Damania
fuente

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
Nehal Damania
fuente
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"
    ],
    
usuario3765825
fuente
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"

Anderson Silva
fuente
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.

Aniruddha Das
fuente
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.

robert king
fuente
-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

Chandra Prakash Variyani
fuente