angular2 làm thế nào để thay đổi tiền tố mặc định của thành phần để dừng cảnh báo tslint


142

Có vẻ như, khi tôi tạo một ứng dụng Angular 2 bằng cách sử dụng Angular cli. Tiền tố thành phần mặc định của tôi là root ứng dụng cho AppComponent. Bây giờ, khi tôi thay đổi bộ chọn thành một cái gì đó khác nói "abc-root"

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

vscode cảnh báo tôi,

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

Câu trả lời:


285

Bạn cần sửa đổi hai tệp tslint.json và .angular-cli.json, giả sử bạn muốn thay đổi thành myprefix :

Trong tệp tslint.json chỉ cần sửa đổi 2 thuộc tính sau:

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

thay đổi "ứng dụng" thành "myprefix"

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

Trong tệp angular.json chỉ cần sửa đổi tiền tố thuộc tính: (Đối với phiên bản góc nhỏ hơn 6, tên tệp là .angular-cli.json)

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

thay đổi "ứng dụng" thành "myprefix"

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

Nếu trong trường hợp bạn cần nhiều hơn một tiền tố như @Salil Junior chỉ ra:

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

Nếu tạo một dự án mới bằng Angular cli, hãy sử dụng tùy chọn dòng lệnh này

ng new project-name --prefix myprefix

2
Tôi cũng nhận được cảnh báo ng generate componentngay cả sau khi cập nhật tslint.json: You are using different prefix from app, you might get lint errors. Please update "tslint.json" accordingly.Tôi phải cập nhật apps.prefixtài sản .angular-cli.jsonđể thoát khỏi cảnh báo đó.
natchiketa

Tôi đã thử các phương pháp trên nhưng vẫn gặp lỗi - [tslint] Bộ chọn của thành phần "PrgAxcShiftChartComponent" nên có tiền tố "ứng dụng" ( angular.io/styleguide#style-02-07 ) (bộ chọn thành phần). Xin vui lòng giúp đỡ. Sử dụng bộ chọn như: 'prg-axc-shift-chart',
ManZ

Điều gì xảy ra nếu bạn không muốn thực thi một tiền tố, nhưng vẫn muốn thực thi camelCase? Đó có phải là một khả năng? Tôi đã sử dụng cú pháp mảng và thêm một chuỗi trống vào nó và nó dường như hoạt động, nhưng không chắc đó có phải là cách lý tưởng hay không.
nghiền nát

11
Xin lưu ý rằng trong Angular 6 tslint.jsoncó thể tìm thấy một tệp bổ sung <your-project>/src/tslint.jsonchứa các quy tắc chọn thành phần và chỉ thị. Nếu bạn đã áp dụng cách khắc phục ở trên và nó vẫn không hoạt động cho bạn, hãy đảm bảo bạn kiểm tra xem tệp này không bị áp đảo cấu hình toàn cầu của bạn. ( github.com/mgechev/codelyzer/issues/620#issuecomment-394131604 )
Simon

19
  1. Điều chỉnh angular-cli.json: "tiền tố": "defaultPrefix" để angular-cli sẽ sử dụng điều đó để tạo các thành phần.
  2. Bất công tslint.jsonnhư thế này:

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

16

Trên thực tế, với Angular Cli, bạn chỉ có thể thay đổi thẻ "tiền tố", bên trong mảng "ứng dụng" trên của bạn angular-cli.json, nằm trên ứng dụng gốc.

Thay đổi cho "TheBestPrefix", như thế này.

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

Khi bạn tạo một thành phần mới bằng CLI, ng g component mycomponent thẻ thành phần sẽ có tên sau"TheBestPrefix-mycomponent"


nhưng điều đó không khắc phục được (một mục đích) một số thành phần đã được tạo thông qua cli với tiền tố khác với tiền tố của ứng dụng cơ bản
user292701

1
Đối với WebStorm, điều này không làm việc cho tôi. Phải thay đổi tslint.json để ngăn cảnh báo như được đề cập trong câu hỏi. Thay đổi angular-cli.json chỉ giúp tạo ra các thành phần / chỉ thị mới.
camden_kid

16

Đối với angular 6/7trở đi sẽ có một tslint.jsonbên trong /srcthư mục của bạn chứa các tslistquy tắc cho thành phần và chỉ thị của bạn.

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

Thay đổi trong tập tin đó sẽ khắc phục vấn đề.


2
Hoặc loại bỏ nó, vì vậy nó dừng ghi đè tslint.jsontập tin chính .
Zarepheth

Thay đổi nó như thế nào? Là những gì bạn đang hiển thị trước hoặc sau khi thay đổi?
Paul Rooney

@PaulRooney bạn có thể thấy đối với directive-selectorTôi đã thêm "directivePrefix"sẽ là tiền tố cho chỉ thị và tương tự cho các thành phần
Aniruddha Das

Điều này đã biến mất trong Angular 8?
eflat

0

Cảm ơn @Aniruddha chỉ ra những thay đổi trong góc 7:

tạo tslint.jsontrong src/app/sharedđể mở rộng app/tslint.json:

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

Một điều - Nếu trong app.component.spec bạn giả định một thành phần từ mô-đun được chia sẻ, nó sẽ phàn nàn rằng bộ chọn giả của bạn bắt đầu bằng 'chia sẻ' thay vì bắt đầu bằng 'ứng dụng'. Tôi cho rằng điều đó có ý nghĩa - tôi nên tạo ra các mô phỏng của mình trong mô-đun từ khi chúng đến.


-1

tslint.json

"bộ chọn thành phần": [true, "phần tử", "ứng dụng", "kebab-case"]

'trường hợp kebab' này buộc bất kỳ bộ chọn thành phần nào phải ở trong trường hợp '-' này.

ví dụ: bạn có thể có bộ chọn như ' kiểm tra ứng dụng ', ' ứng dụng của tôi ' như thế này.

Và theo như lỗi của bạn, bạn phải bắt đầu bộ chọn thành phần với 'ứng dụng' như tôi vừa đề cập trong ví dụ.

Tôi không nghĩ bạn nên thực hiện bất kỳ thay đổi nào trong tslint.json, mặc dù điều đó sẽ giải quyết vấn đề của bạn, nhưng thực tế không tốt khi thay đổi trong tslint.

Cảm ơn

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.