Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

354
Views
Cómo ejecutar un servicio cuando la aplicación se inicia en Angular 2

Creé un servicio SocketService, básicamente inicializa el socket para permitir que la aplicación escuche en el puerto. Este servicio también interactúa con algunos componentes.

// socket.servicio.ts

 export class SocketService { constructor() { // Initializes the socket } ... }

Sé que el código en el constructor() de SocketService solo comienza a ejecutarse cuando un componente usa SocketService.

Y, por lo general, el código en app.ts se ve así:

// aplicación.ts

 import {SocketService} from './socket.service'; ... class App { constructor () {} } bootstrap(App, [SocketService]);

Sin embargo, quiero que este servicio se ejecute cuando se inicie la aplicación. Así que hice un truco, solo agregue private _socketService: SocketService en el constructor de la aplicación (). Así que ahora los códigos se ven así:

// aplicaciones.ts (nuevo)

 import {SocketService} from './socket.service'; ... class App { constructor (private _socketService: SocketService) {} } bootstrap(App, [SocketService]);

Ahora funciona. El problema es que a veces se ejecutan los códigos en el constructor() de SocketService, a veces no. Entonces, ¿cómo debo hacerlo correctamente? Gracias

over 4 years ago · Santiago Trujillo
3 answers
Answer question

0

La respuesta de Stuart apunta en la dirección correcta, pero no es fácil encontrar información sobre APP_INITIALIZER. La versión corta es que puede usarla para ejecutar el código de inicialización antes de que se ejecute cualquier otro código de aplicación. Busqué un rato y encontré explicaciones aquí y aquí , que resumiré por si desaparecen de la web.

APP_INITIALIZER se define en angular/core. Lo incluyes en tu app.module.ts así.

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

APP_INITIALIZER es un OpaqueToken (o un InjectionToken desde Angular 4) que hace referencia al servicio ApplicationInitStatus. ApplicationInitStatus es un proveedor múltiple . Admite múltiples dependencias y puede usarlo en su lista de proveedores varias veces. Se usa así.

 @NgModule({ providers: [ DictionaryService, { provide: APP_INITIALIZER, useFactory: (ds: DictionaryService) => () => return ds.load(), deps: [DictionaryService], multi: true }] }) export class AppModule { }

Esta declaración de proveedor le dice a la clase ApplicationInitStatus que ejecute el método DictionaryService.load(). load() devuelve una promesa y ApplicationInitStatus bloquea el inicio de la aplicación hasta que se resuelve la promesa. La función load() se define así.

 load(): Promise<any> { return this.dataService.getDiscardReasons() .toPromise() .then( data => { this.dictionaries.set("DISCARD_REASONS",data); } ) }

Configurado así, el diccionario se carga primero y las otras partes de la aplicación pueden depender de él de manera segura.

Editar: tenga en cuenta que esto aumentará el tiempo de carga inicial para su aplicación por el tiempo que tarde el método load(). Si desea evitar eso, puede usar un resolver en su ruta.

over 4 years ago · Santiago Trujillo Report

0

Mueva la lógica en su constructor de SocketService a un método en su lugar y luego llámelo en el constructor de su componente principal o ngOnInit

ServicioSocket

 export class SocketService{ init(){ // Startup logic here } }

aplicación

 import {SocketService} from './socket.service'; ... class App { constructor (private _socketService: SocketService) { _socketService.init(); } } bootstrap(App, [SocketService]);
over 4 years ago · Santiago Trujillo Report

0

Consulte también APP_INITIALIZER , que se describe como;

Una función que se ejecutará cuando se inicialice una aplicación.

over 4 years ago · Santiago Trujillo Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!