Search code examples
angularionic2injectable

Ionic 2 - Services unexpected token error


I am trying to use an Injectable in my code in an Ionic 2 app and I get this error.

Module build failed: SyntaxError: /home.js: Unexpected token (10:25)

export class HomePage {
constructor(myservice: WpService) {
                     ^
         this.service = myservice;
        this.data = null;
     }

This is my code: (home.js file).

import {Page} from 'ionic-framework/ionic';
import {WpService} from './wpservice';

@Page({
  templateUrl: 'build/pages/home/home.html',
    providers: [WpService]
})
export class HomePage {
    constructor(myservice: WpService) {
        this.service = myservice;
        this.data = null;
    }

    retrieve() {
        this.service.loadData();
        setTimeout(() => {
            this.data = this.service.getData();
            console.log(this.data);
        }, 5000);
    }
}

and this is the wpservice file:

import {Injectable} from 'angular2/core';
import {Http} from 'angular2/http';
import 'rxjs/Rx'

@Injectable
export class WpService {
    constructor(http: Http) {
        this.http = http;
        this.data = null;
    }

    loadData() {
        this.http.get('<some rest api>').subscribe(data => {
            this.data = data.json() 
        });
        }

    getData() {
        return this.data;
    }
    }

Strangely this error is occurring only from feb 26 evening. Before that it was working fine.


Solution

  • Thanks guys, I resolved this issue. I'll post how I did it below so that anyone else facing the same would get benefited.

    I wrote a get parameters() method as shown below. (After having a look at the ionic conferencing app from the drifty co team on github).

    import {Page} from 'ionic-framework/ionic';
    import {Inject} from 'angular2/core;
    import {WpService} from './wpservice';
    
    @Page({
      templateUrl: 'build/pages/home/home.html',
        providers: [WpService]
    })
    export class HomePage {
        static get parameters(){
           return [WpService];
          }
        constructor(wpservice) {
            this.service = wpservice;
            this.data = null;
        }
    
        retrieve() {
            this.service.loadData();
            setTimeout(() => {
                this.data = this.service.getData();
                console.log(this.data);
            }, 5000);
        }
    }
    

    And I changed the service file as below:

    import {Injectable, Inject} from 'angular2/core';
    import {Http} from 'angular2/http';
    import 'rxjs/Rx'
    
    @Injectable()
    export class WpService {
        static get parameters(){
          return [Http];
          }
        constructor(http) {
            this.http = http;
            this.data = null;
        }
    
        loadData() {
            this.http.get('<some rest api>').subscribe(data => {
                this.data = data.json() 
            });
            }
    
        getData() {
            return this.data;
        }
        }
    

    Incase you decide to inject more than one service then you need to give the return statement in the get parameters method like below:

    return [[service1],[service2]];
    

    Hope this helps someone else facing the same issue. Thanks.