Búsqueda de sitios web

typescript - Objeto Window en servicio de angular 5


Tengo un proyecto en Angular, específicamente el panel de usuario. Toda la página está en PHP, solo el panel en Angular. ¿Cómo usar el objeto window en un servicio?

Quiero usar window.location exactamente para la misma acción que href="/" en HTML, lo cual me devuelve afuera del proyecto de Angular (panel) al sitio principal. ¿Por qué? Cuando intentaba obtener el usuario y devuelve un estado, por ejemplo 401, 404, el usuario no puede acceder al panel, y debe navegar al sitio principal.

Probé varias opciones con la ruta navigate o navigateByURl, pero la dirección siempre se establecía en baseHref en Angular, así que no podía salir. Intenté pasar {provide: Window, useValue: window } en los proveedores, inyectar window en el constructor del servicio y esto funcionaba en mi localhost, pero cuando ejecuto ng build en la CLI me envía un error:

ERROR en Error: No se pueden resolver todos los parámetros para UserService en ../my-app/src/app/user.service.ts: (?, [object Object], [object Object], [object Object], [object Object]).

¿Alguien, por favor?

En AppModule:

providers: [UserService, DatePipe, {provide: Window, useValue: window }],

en UserService:

constructor(private window: Window, private location: Location, private HttpClient: HttpClient, private route: ActivatedRoute, private router: Router){};

y función en UserService para navegar según el estado:

if(data == 403) {
  this.setError('You must log in', 'danger');

  this.window.location.assign("/");
  ...
}

Respuesta #1

ERROR in Error: Can't resolve all parameters for UserService in ../my-
app/src/app/user.service.ts: (?, [object Object], [object Object], 
[object Object], [object Object]).

Este error ocurre porque Angular está intentando inyectar Window y Location en su servicio y no puede encontrar clases correspondientes con el decorador @Injectable. El decorador @Injectable indica que el sistema DI de Angular se utiliza para crear una o más instancias de la clase. Además, window es un objeto accesible globalmente.

Entonces, en lugar de this.window.location.assign("/"); podrías usar window.location.assign("/");

O cualquiera de esto:

  1. window.location.href = 'http://...';
  2. window.location = 'http://...';