angular2 как изменить префикс компонента по умолчанию, чтобы остановить предупреждения tslint

150

Кажется, когда я создаю приложение Angular 2 с помощью Angular cli. Мой префикс компонента по умолчанию - это app-root для AppComponent. Теперь, когда я меняю селектор на другое, скажите "abc-root"

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

vscode предупреждает меня,

[tslint] The selector of the component "AppComponent" should have prefix "app"
Нехал Дамания
источник

Ответы:

298

Вам нужно изменить два файла tslint.json и .angular-cli.json, предположим, вы хотите изменить на myprefix :

В файле tslint.json просто измените следующие 2 атрибута:

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

измените "приложение" на "мой префикс"

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

В файле angular.json просто измените префикс атрибута: (Для версии angular меньше 6 имя файла - .angular-cli.json)

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

измените "приложение" на "мой префикс"

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

Если в этом случае вам нужно более одного префикса, как указывает @Salil Junior :

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

При создании нового проекта с использованием Angular cli используйте этот параметр командной строки

ng new project-name --prefix myprefix
Нехал Дамания
источник
2
Я также получил предупреждение ng generate componentдаже после обновления tslint.json: You are using different prefix from app, you might get lint errors. Please update "tslint.json" accordingly.мне пришлось обновить apps.prefixсвойство, .angular-cli.jsonчтобы избавиться от этого предупреждения.
натчикета 04
Я пробовал вышеуказанные методы, но все равно получаю ошибку - [tslint] Селектор компонента «PrgAxcShiftChartComponent» должен иметь префикс «app» ( angular.io/styleguide#style-02-07 ) (компонент-селектор). Пожалуйста помоги. Используя селектор как: 'prg-axc-shift-chart',
Махи
Что делать, если вы не хотите применять префикс, но все же хотите применить camelCase? Это возможность? Я использовал синтаксис массива и добавил к нему пустую строку, и это, похоже, сработало, но не уверен, идеальный ли это способ или нет.
Crush
11
Обратите внимание, что в Angular 6 tslint.jsonможно найти дополнительный файл, в <your-project>/src/tslint.jsonкотором содержатся правила выбора компонентов и директив. Если вы применили вышеуказанное исправление, но оно по-прежнему не работает, убедитесь, что вы проверяете, что этот файл не отменяет вашу глобальную конфигурацию. ( github.com/mgechev/codelyzer/issues/620#issuecomment-394131604 )
Саймон
20
  1. Отрегулируйте ваш angular-cli.json: "prefix": "defaultPrefix", чтобы angular-cli использовал его для генерации компонентов.
  2. Просто tslint.jsonтак:

    "directive-selector": [
      true,
      "attribute",
      ["prefix1", "prefix2", "prefix3"],
      "camelCase"
    ],
    "component-selector": [
      true,
      "element",
      ["prefix1", "prefix2", "prefix3"],
      "kebab-case"
    ],
    
user3765825
источник
16

На самом деле, с Angular Cli вы можете просто изменить тег «prefix» внутри массива «apps» на вашем angular-cli.json, расположенном в корневом приложении.

Меняем на "TheBestPrefix", вот так.

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

Когда вы создаете новый компонент с помощью интерфейса командной строки, ng g component mycomponent тег компонента будет иметь следующее имя"TheBestPrefix-mycomponent"

Андерсон Сильва
источник
но это не исправляет, где (специально) некоторые компоненты были сгенерированы через cli с префиксом, отличным от префикса основного приложения
user292701
1
Для WebStorm это не сработало. Пришлось изменить tslint.json, чтобы предотвратить предупреждение, указанное в вопросе. Изменение angular-cli.json помогает только при создании новых компонентов / директив.
camden_kid
16

В angular 6/7дальнейшем tslint.jsonвнутри вашей /srcпапки будет находиться папка, содержащая tslistправила для вашего компонента и директивы.

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

Изменение этого файла устранит проблему.

Анируддха Дас
источник
2
Или удалить его, чтобы он перестал перезаписывать основной tslint.jsonфайл.
Zarepheth
Как это изменить? То, что вы показываете до или после изменения?
Пол Руни
@PaulRooney, вы можете видеть directive-selectorдобавленное мной, "directivePrefix"которое будет префиксом для директивы и то же самое для компонентов
Aniruddha Das
Это исчезло в Angular 8?
eflat
0

Спасибо @Aniruddha, указав на изменения в angular 7:

создать tslint.jsonв , src/app/sharedчтобы продлить app/tslint.json:

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

Одна вещь - если в app.component.spec вы имитируете компонент из общего модуля, он будет жаловаться, что ваш селектор mocks начинается с «shared», а не с «app». Полагаю, это имеет смысл - я должен создавать свои макеты в модуле, откуда они пришли.

Роберт Кинг
источник
-1

tslint.json

"компонент-селектор": [истина, "элемент", "приложение", "кебаб-кейс"]

этот 'kebab-case' заставляет любой селектор компонентов использовать этот '-' регистр.

например, у вас может быть такой селектор, как « app-test », « app-my ».

И что касается вашей ошибки, вы должны запустить селектор компонентов с помощью «приложения», как я только что упомянул в примере.

Я не думаю, что вам следует вносить какие-либо изменения в tslint.json, хотя это решит вашу проблему, но не рекомендуется изменять tslint.

Благодарность

Чандра Пракаш Вариани
источник