¿Cómo usar el servicio angular 2 con Ionic 2?


Soy nuevo en Ionic 2. He leído en angular 2 docs, que el servicio necesita ser inyectado mientras bootstrap aplicación. Pero no se podía ver cualquier cosa bootstrap mientras se va a través de Ionic 2 tutorial.

Cualquier ayuda es muy apreciada.

Author: sebaferreras, 2016-01-13

3 answers

No hay uso de Bootstrap() en Ionic2, solo uso de @App para declarar tu app. Todavía necesitas declarar tu servicio en tu componente @Page.

Crea tu servicio

import {Injectable} from "angular2/core";
import {Http} from "angular2/http";

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

  retrieveData() {
    this.http.get('./mocks/test.json')
    .subscribe(data => {
      this.data = data;
    });
  }

  getData() {
    return this.data;
  }
}

Luego úsalo en tu @ Página

import {Page} from 'ionic/ionic';
import {DataService} from './service';

@Page({
  templateUrl: 'build/test.html',
  providers: [DataService]
})
export class TestPage {
  constructor(data: DataService) {
    data.retrieveData()
  }
}
 36
Author: Raphael,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-01-13 08:49:28

Actualización de RC:

A partir de Ionic2 RC, ahora los servicios deben incluirse en el array providers desde el @NgModule para hacer que esos servicios funcionen como singletons (lo que significa que la misma instancia se utilizará en toda la aplicación).

@NgModule({
  declarations: [
    MyApp,

    // Pages
    Page1,
    Page2,

    // Pipes
    MyCustomPipe,

    // Directives
    MyCustomDirective,
  ],
  imports: [
    IonicModule.forRoot(MyApp)
  ],
  bootstrap: [IonicApp],
  entryComponents: [
    MyApp,

    // Pages
    Page1,
    Page2
  ],
  providers: [ DataService, NavigationService, Storage, ... ] // <- here!
})
export class AppModule {}

Respuesta antigua (2.0.0-beta.8)

Por si acaso esto podría ayudar a otros desarrolladores de Ionic2, con el lanzamiento de 2.0.0-beta.8 , ahora podemos usar ionicBootstrap para hacer que nuestros servicios funcionen como singletons lo que significa que la misma instancia se utilizará en toda la aplicación.

Los cambios necesarios para hacer esto son mínimos; sus servicios seguirán siendo los mismos

/* Notice that the imports have slightly changed*/
import {Injectable} from "@angular/core";
import {Http} from "@angular/http";
import 'rxjs/Rx';

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

  retrieveData() {
    this.http.get('./mocks/test.json')
    .subscribe(data => {
      this.data = data;
    });
  }

  getData() {
    return this.data;
  }
}

Pero en lugar de inyectarlo como provider en su Component (lo que causará que se cree una nueva instancia de service cada vez que se cargue el component)

import {Component} from '@angular/core';
import {DataService} from './service';

@Component({
  templateUrl: 'build/test.html'
  /* This should not be done anymore */
  /* providers: [DataService] */
})
export class TestPage {
  constructor(data: DataService) {
    data.retrieveData()
  }
}

Simplemente inclúyalo en el ionicBootstrap de su archivo app.ts, para asegurarse de que la misma instancia del servicio se utilizará en el toda la aplicación.

ionicBootstrap(MyApp, [DataService], {});

Guía de estilo Angular:

Siguiendo Guía de estilo Angular2

Proporcionar servicios al inyector Angular 2 en la parte superior componente donde serán compartidos.

¿Por qué? El inyector Angular 2 es jerárquico.

¿Por qué? Al proporcionar el servicio a un componente de nivel superior, que la instancia se comparte y está disponible para todos los componentes secundarios de esa parte superior nivel componente.

¿Por qué? Esto es ideal cuando un servicio está compartiendo métodos o estado.

Y

Funcionará. No es una buena práctica. El proveedor de bootstrap la opción está diseñada para configurar y sobrescribir la propia de Angular servicios pre-registrados, como su soporte de enrutamiento .

Así que en lugar de registrar el servicio en el ionicBootstrap, tendríamos que registrarlo en el componente más alto de nuestra Aplicación (si queremos usar la misma instancia en toda la aplicación ), así:

@Component({
  templateUrl: 'build/app.html',
  directives: [...],
  providers: [..., DataService]
})
class MyApp{ 
  // ...
} 
 24
Author: sebaferreras,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-07-11 08:04:39

Buscar Proveedor Iónico, en ionic en lugar de servicios angulares utilizamos Proveedor iónico, proporcionan el concepto de Inyección de Dependencias en Ionic.

Generar el proveedor iónico

ionic generate provider <provider name>

Y luego importar el proveedor en la página raíz o la página en la que necesita ser utilizado

Y poner en matriz de proveedores

 0
Author: kuldeep kumar,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-09-09 11:54:33