Stephan K.
Stephan K.

Reputation: 15702

reflective_provider.js: Uncaught Cannot resolve all parameters for Service

The Error

reflective_provider.js:240 Uncaught Cannot resolve all parameters for 'NavService'(?). Make sure that all the parameters are decorated with Inject or have valid type annotations and that 'NavService' is decorated with Injectable.

NavService

import {Injector, Injectable} from '@angular/core'
import {NavParams, NavController, ViewController} from 'ionic-angular'

import {IdentityPage} from '../../../pages/transaction/identity/identity';
import {AddressPage} from '../../../pages/transaction/address/address';
import {PersonalInfoPage} from '../../../pages/transaction/personal-info/personal-info';
import {PaymentDetailsPage} from '../../../pages/transaction/payment-details/payment-details';

@Injectable()

export class NavService {

    private identityPage = IdentityPage
    private personalInfoPage = PersonalInfoPage
    private paymentDetailsPage = PaymentDetailsPage
    private addressPage = AddressPage

    constructor (
        private _pagesToLoad = []
    ) {}

    public lookAround(currentPage){

        let prvIndex = this._pagesToLoad.indexOf(currentPage)-1
        let nxtIndex = this._pagesToLoad.indexOf(currentPage)+1

        let neighboursTuple = {
            prvIndex: this._pagesToLoad[prvIndex],
            nxtIndex: this._pagesToLoad[nxtIndex]
        }
        return neighboursTuple
    }
}

Component consuming NavService

import {NavService} from '../../../providers/services/nav-service/nav-service';

import {OnInit, AfterViewInit, ViewChildren, ContentChild} from '@angular/core'
import {TranslateService, TranslatePipe} from 'ng2-translate/ng2-translate'
import {NavParams, NavController, ViewController, Events, MenuController, Nav, Slides} from 'ionic-angular'

import {ControlGroup, FormBuilder, Validators} from '@angular/common'
import {Component, ViewChild, Directive, ElementRef, Input, DynamicComponentLoader, Injector,provide} from '@angular/core'


@Component({
    templateUrl:    'build/pages/transaction/personal-info/personal-info.html'
    providers:      [NavService]
})

export class PersonalInfoPage {

    infoForm: ControlGroup

    constructor (
        public formBuilder: FormBuilder, 
        private authService: AuthService,
        private navService: NavService,
        private navController: NavController,
        private viewController: ViewController
    ) { ...

I cant see whats wrong here?

Update - The Test

 describe('NavService', () => {

        it ('should have instantiated nav service with List of Pages and receive neighbours', () => {

            let navService = new NavService([PersonalInfoPage,AddressPage,IdentityPage,PaymentDetailsPage])
            let ResultNeighboursTuple = navService.lookAround(AddressPage)

            expect(ResultNeighboursTuple.prvIndex).toEqual((PersonalInfoPage))
            expect(ResultNeighboursTuple.nxtIndex).toEqual((IdentityPage))
         })

Upvotes: 0

Views: 213

Answers (2)

Stephan K.
Stephan K.

Reputation: 15702

Turns out my test caused the error, just make sure you provide in the test before injecting, as in here:

describe('Service: LanguagesService', () => {
  let service;

  //setup
  beforeEachProviders(() => [
    LanguagesService
  ]);

  beforeEach(inject([LanguagesService], s => {
    service = s;
  }));

  //specs
  it('should return available languages', () => {
    let languages = service.get();
    expect(languages).toContain('en');
    expect(languages).toContain('es');
    expect(languages).toContain('fr');
    expect(languages.length).toEqual(3);
  });
}) 

https://gist.github.com/gsans/cd72e5b0f5302bc9dbc8#file-languagesservice-spec-js

Upvotes: 0

micronyks
micronyks

Reputation: 55443

export class NavService {

    private identityPage = IdentityPage
    private personalInfoPage = PersonalInfoPage
    private paymentDetailsPage = PaymentDetailsPage
    private addressPage = AddressPage;
private _pagesToLoad = [];

    constructor (
        // private _pagesToLoad = []  <---- put it out side of constructor
    ) {}

    public lookAround(currentPage){

        let prvIndex = this._pagesToLoad.indexOf(currentPage)-1
        let nxtIndex = this._pagesToLoad.indexOf(currentPage)+1

        let neighboursTuple = {
            prvIndex: this._pagesToLoad[prvIndex],
            nxtIndex: this._pagesToLoad[nxtIndex]
        }
        return neighboursTuple
    }
}

Upvotes: 1

Related Questions