web-dev-qa-db-fra.com

Angular 7: NullInjectorError: Aucun fournisseur pour PagerService

J'essaie d'implémenter la pagination mais cela ne fonctionne pas. Voici mon code:

pager.service.ts:

  import * as _ from 'underscore';
  @Injectable({
      providedIn: 'root',
  })
export class PagerService {
  getPager(totalItems: number, currentPage: number = 1, pageSize: number = 10) {

    // calculate total pages
    let totalPages = Math.ceil(totalItems / pageSize);

    let startPage: number, endPage: number;
    if (totalPages <= 10) {
      // less than 10 total pages so show all
      startPage = 1;
      endPage = totalPages;
    } else {
      // more than 10 total pages so calculate start and end pages
      if (currentPage <= 6) {
        startPage = 1;
        endPage = 10;
      } else if (currentPage + 4 >= totalPages) {
        startPage = totalPages - 9;
        endPage = totalPages;
      } else {
        startPage = currentPage - 5;
        endPage = currentPage + 4;
      }
    }

    // calculate start and end item indexes
    let startIndex = (currentPage - 1) * pageSize;
    let endIndex = Math.min(startIndex + pageSize - 1, totalItems - 1);

    // create an array of pages to ng-repeat in the pager control
    let pages = _.range(startPage, endPage + 1);

    // return object with all pager properties required by the view
    return {
      totalItems: totalItems,
      currentPage: currentPage,
      pageSize: pageSize,
      totalPages: totalPages,
      startPage: startPage,
      endPage: endPage,
      startIndex: startIndex,
      endIndex: endIndex,
      pages: pages
    };
  }
}

quick-worker-list.component.ts:

import { JobService } from '@app/services';
import { PagerService } from './../../../services/pager.service';
import { Component, OnInit, Input } from '@angular/core';

import * as _ from 'underscore';

@Component({
  selector: 'app-quick-worker-list',
  templateUrl: './quick-worker-list.component.html',
  styles: []
})
export class QuickWorkerListComponent implements OnInit {
  S3ImageUrl: string;

  // array of all items to be paged
  private workerData: any[];

  // pager object
  pager: any = {};

  // paged items
  pagedItems: any[];


  constructor(private pagerService: PagerService, private jobService: JobService) {
  }

  ngOnInit() {
    this.jobService.getQuickJobWorkerList(1301, 1)
      .map((response: Response) => response.json())
      .subscribe(data => {
        // set items to json response
        this.workerData = data;

        // initialize to page 1
        this.setPage(1);
      });
  }

  setPage(page: number) {
    if (page < 1 || page > this.pager.totalPages) {
      return;
    }

    // get pager object from service
    this.pager = this.pagerService.getPager(this.allItems.length, page);

    // get current page of items
    this.pagedItems = this.allItems.slice(this.pager.startIndex, this.pager.endIndex + 1);
  }
}

Je reçois cette erreur:

QuickWorkerListComponent_Host.ngfactory.js? [sm]: 1 ERREUR Erreur: StaticInjectorError (AppModule) [QuickWorkerListComponent -> PagerService]: StaticInjectorError (Platform: noyau) [QuickWorkerListComponent -> PagerService]: NullInjectorError (NullInjectorError: aucun fournisseur pour PagerService!). à NullInjector.Push ../ node_modules/@angular/core/fesm5/core.js.NullInjector.get (core.js: 3228) à resolToken (core.js: 3473) à tryResolveToken (core.js: 3417) à StaticInjector .Push ../ node_modules/@angular/core/fesm5/core.js.StaticInjector.get (core.js: 3314) à resolToken (core.js: 3473) à tryResolveToken (core.js: 3417) à StaticInjector.Push ../node_modules/@angular/core/fesm5/core.js.StaticInjector.get (core.js: 3314) à resolNgModuleDep (core.js: 19784) à NgModuleRef_.Push ../ node_modules/@ angular/core/fesm5 /core.js.NgModuleRef_.get (core.js: 20473) à resolNgModuleDep (core.js: 19784)

11
user10791322

Après le texte d'erreur, vous devez importer et ajouter votre PagerService dans la partie Fournisseur de votre app.module.ts fichier:

providers: [
    PagerService,
  ],

Et n'oubliez pas de le déclarer comme Injectable:

@Injectable()
export class PagerService {

   // ...

}
17
veben

Votre erreur est liée à PagerService, pas au trait de soulignement

NullInjectorError: Pas de fournisseur pour PagerService! à

assurez-vous que votre service est inscrit dans la liste des fournisseurs sur app.module ou a la déclaration Injectable en haut:

@Injectable({
  providedIn: 'root',
})

un exemple courant de service dans angular 7 est ci-dessous:

import { Injectable } from '@angular/core';

@Injectable({
  providedIn: 'root',
})
export class MyService{

  constructor() { }

}

veuillez reportez-vous à la documentation pour plus de détails.

9
nircraft

L'attribut Injectable doit être appliqué aux services de page ou de service de travail ou pour vérifier si vous injectez quelque chose dans ces services. La même chose s'applique à cela également.

0
Vikram Jangra