美文网首页web前端
angular-安装primeng

angular-安装primeng

作者: 姜治宇 | 来源:发表于2020-11-28 13:44 被阅读0次

我们做开发时必然要安装组件库,angular的组件库十分丰富,primeng就是其中之一。
primeng这个库还是比较强大的,但缺点是版本兼容性不咋地,安装时由于版本不一致导致的各种报错,很容易让你怀疑人生。

package.json

我的angular版本是8,相应的primeng也只能装对应的版本。

{
  "name": "prime",
  "version": "0.0.0",
  "scripts": {
    "ng": "ng",
    "start": "ng serve",
    "build": "ng build",
    "test": "ng test",
    "lint": "ng lint",
    "e2e": "ng e2e"
  },
  "private": true,
  "dependencies": {
    "@angular/animations": "~8.0.1",
    "@angular/cdk":"^8.0.2",
    "@angular/common": "~8.0.1",
    "@angular/compiler": "~8.0.1",
    "@angular/core": "~8.0.1",
    "@angular/forms": "~8.0.1",
    "@angular/platform-browser": "~8.0.1",
    "@angular/platform-browser-dynamic": "~8.0.1",
    "@angular/router": "~8.0.1",


    "chart.js": "^2.8.0",
    "core-js": "^3.8.0",
    "font-awesome": "^4.7.0",
    "primeicons": "^1.0.0",
    "primeng": "^8.0.0",
    "quill": "^1.3.6",

    
    "rxjs": "~6.4.0",
    "tslib": "^1.9.0",
    "zone.js": "~0.9.1"
  },
  "devDependencies": {
    "@angular-devkit/build-angular": "~0.800.6",
    "@angular/cli": "~8.0.6",
    "@angular/compiler-cli": "~8.0.3",
    "@angular/language-service": "~8.0.3",
    "@types/node": "~8.9.4",
    "@types/jasmine": "~3.3.8",
    "@types/jasminewd2": "~2.0.3",
    "codelyzer": "^5.0.0",
    "jasmine-core": "~3.4.0",
    "jasmine-spec-reporter": "~4.2.1",
    "karma": "~4.1.0",
    "karma-chrome-launcher": "~2.2.0",
    "karma-coverage-istanbul-reporter": "~2.0.1",
    "karma-jasmine": "~2.0.1",
    "karma-jasmine-html-reporter": "^1.4.0",
    "protractor": "~5.4.0",
    "ts-node": "~7.0.0",
    "tslint": "~5.15.0",
    "typescript": "~3.4.3"
  }
}

大家对照这份清单安装,如果报错的话,就按报错信息安装对应的依赖库。

报错信息

我在安装的时候遇到了这个问题:

ERROR in ./node_modules/@angular-devkit/build-angular/src/angular-cli-files/models/jit-polyfills.js
Module not found: Error: Can't resolve 'core-js/proposals/reflect-metadata' in 'D:\app2\prime\node_modules\@angular-devkit\build-angular\src\angular-cli-files\models'

大概是说core-js里面的reflect-metadata文件没找到,去node_module找了一下确实没找见这个文件,我的解决办法是卸载掉core-js重新安装最新版本,如果能找到报错的文件,那就ok了。
然后还遇到这个这个问题:

    ERROR in node_modules/@angular/cdk/bidi/dir.d.ts(26,9): error TS1086: An accessor cannot be declared in an ambient context.

一看便知是@angular/cdk这个库出问题了,我当时是直接按照文档安装的:

npm install @angular/cdk --save

但这么做会给你安装最新版的(11),容易造成跟现有angular版本(8)冲突,解决办法就是指定安装8这个版本。
cdk是与弹出层有关的模块,如select,dropdown,picker等,在弹出来的时候自动创建覆盖全局的cdk,挂载在body下面,需要点击cdk才能关闭已打开的下拉。
cdk虽然是angular自带的模块,但是脚手架默认却不会安装,因为它不是核心模块,手动安装就涉及到版本号问题,这个有点坑。。。

angular.json

{
  "$schema": "./node_modules/@angular/cli/lib/config/schema.json",
  "version": 1,
  "newProjectRoot": "projects",
  "projects": {
    "prime": {
      "projectType": "application",
      "schematics": {},
      "root": "",
      "sourceRoot": "src",
      "prefix": "app",
      "architect": {
        "build": {
          "builder": "@angular-devkit/build-angular:browser",
          "options": {
            "outputPath": "dist/prime",
            "index": "src/index.html",
            "main": "src/main.ts",
            "polyfills": "src/polyfills.ts",
            "tsConfig": "tsconfig.app.json",
            "aot": false,
            "assets": [
              "src/favicon.ico",
              "src/assets"
            ],
            "styles": [
              "src/styles.css",
              "node_modules/primeicons/primeicons.css",
              "node_modules/primeng/resources/themes/nova-light/theme.css",
              "node_modules/primeng/resources/primeng.min.css"
            ],
            "scripts": []
          },
          "configurations": {
            "production": {
              "fileReplacements": [
                {
                  "replace": "src/environments/environment.ts",
                  "with": "src/environments/environment.prod.ts"
                }
              ],
              "optimization": true,
              "outputHashing": "all",
              "sourceMap": false,
              "extractCss": true,
              "namedChunks": false,
              "aot": true,
              "extractLicenses": true,
              "vendorChunk": false,
              "buildOptimizer": true,
              "budgets": [
                {
                  "type": "initial",
                  "maximumWarning": "2mb",
                  "maximumError": "5mb"
                }
              ]
            }
          }
        },
        "serve": {
          "builder": "@angular-devkit/build-angular:dev-server",
          "options": {
            "browserTarget": "prime:build"
          },
          "configurations": {
            "production": {
              "browserTarget": "prime:build:production"
            }
          }
        },
        "extract-i18n": {
          "builder": "@angular-devkit/build-angular:extract-i18n",
          "options": {
            "browserTarget": "prime:build"
          }
        },
        "test": {
          "builder": "@angular-devkit/build-angular:karma",
          "options": {
            "main": "src/test.ts",
            "polyfills": "src/polyfills.ts",
            "tsConfig": "tsconfig.spec.json",
            "karmaConfig": "karma.conf.js",
            "assets": [
              "src/favicon.ico",
              "src/assets"
            ],
            "styles": [
              "src/styles.css"
            ],
            "scripts": []
          }
        },
        "lint": {
          "builder": "@angular-devkit/build-angular:tslint",
          "options": {
            "tsConfig": [
              "tsconfig.app.json",
              "tsconfig.spec.json",
              "e2e/tsconfig.json"
            ],
            "exclude": [
              "**/node_modules/**"
            ]
          }
        },
        "e2e": {
          "builder": "@angular-devkit/build-angular:protractor",
          "options": {
            "protractorConfig": "e2e/protractor.conf.js",
            "devServerTarget": "prime:serve"
          },
          "configurations": {
            "production": {
              "devServerTarget": "prime:serve:production"
            }
          }
        }
      }
    }},
  "defaultProject": "prime"
}

我们可以在angular的配置文件配置一下styles选项,注入primeng相关的样式。

app.module.ts:

import { BrowserModule } from '@angular/platform-browser';
import { NgModule } from '@angular/core';
import { FormsModule } from '@angular/forms';
import { BrowserAnimationsModule, NoopAnimationsModule} from '@angular/platform-browser/animations'

import {DropdownModule} from 'primeng/dropdown';
import { AppComponent } from './app.component';

@NgModule({
  declarations: [
    AppComponent
  ],
  imports: [
    BrowserModule,
    FormsModule,
    DropdownModule,
    BrowserAnimationsModule,
    NoopAnimationsModule
  ],
  providers: [],
  bootstrap: [AppComponent]
})
export class AppModule { }

primeng的每个功能不是组件而是模块,这里我引入了dropdown这个模块,需要在imports引入。不过这个模块还需要依赖其他模块,都需引入。

app.component.ts

import { Component } from '@angular/core';
import {SelectItem} from 'primeng/api';
@Component({
  selector: 'app-root',
  templateUrl: './app.component.html',
  styleUrls: ['./app.component.css']
})
export class AppComponent {
  title = 'prime';
  cars: SelectItem[];

  selectedCar: string;

  constructor() {
    this.cars = [
        {label: 'Audi', value: 'Audi'},
        {label: 'BMW', value: 'BMW'},
        {label: 'Fiat', value: 'Fiat'},
        {label: 'Ford', value: 'Ford'},
        {label: 'Honda', value: 'Honda'},
        {label: 'Jaguar', value: 'Jaguar'},
        {label: 'Mercedes', value: 'Mercedes'},
        {label: 'Renault', value: 'Renault'},
        {label: 'VW', value: 'VW'},
        {label: 'Volvo', value: 'Volvo'},
    ];
}

  
}

app.component.html

<p-dropdown [options]="cars" [(ngModel)]="selectedCar" [style]="{'width':'150px'}">
<!--选中的项-->
  <ng-template let-item pTemplate="selectedItem">
    
    <span style="color:red;">{{item.label}}</span>
  </ng-template>

<!--列表项-->
  <ng-template let-car pTemplate="item">

    <div style="color:darkgreen;">{{car.label}}</div>
  </ng-template>
</p-dropdown>


<p>选中的项是:{{selectedCar}}</p>

相关文章

  • angular-安装primeng

    我们做开发时必然要安装组件库,angular的组件库十分丰富,primeng就是其中之一。primeng这个库还是...

  • angular-安装material

    angular生态肥肠强大,配套设施十分健全,material就是其中表现之一。material是材料库的意思,它...

  • 使用PrimeNG开发angular web项目

    前言 这里列出了目前angular4的ui框架,最终选择PrimeNG作为web端ui框架.因为PrimeNG组件...

  • angular-安装指定版本

    我们使用angular肯定免不了要装一些第三方插件,但第三方插件依赖angular的版本可能不同,一般来说我们需要...

  • angular.js(2) 数据的渲染

    angular-(2) 把数据添加到组件中 eg:ng generate component user-item在...

  • PrimeNG源码解析

    首先很多人向我推荐这个库了。兼容到手机端的 Angular 库,稳定强大。但当我看到这个官网的时候,还是被吓了一跳...

  • 2019-01-02

    技术栈 前端 框架angular UI 库primeng 语言Typescript 后端 框架 .NET Core...

  • angular-随笔

    And God said,Let there be light:and there was light. 前端知名...

  • Angular-路由

    路由与导航 在用户使用应用程序时,Angular 的路由器能让用户从一个视图导航到另一个视图。 概览 Angula...

  • angular-管道

    管道其实是一些简单的函数,可以在模板表达式中用来接受输入值,并返回一个转换后的值。管道分为内置管道和自定义管道两种...

网友评论

    本文标题:angular-安装primeng

    本文链接:https://www.haomeiwen.com/subject/kkbqwktx.html