Búsqueda de sitios web

javascript - Cargar scripts a través de todos los componentes en Angular 2


He estado usando Angular 2 con AdminLTE, que necesita ejecutar algunos scripts para cargarse correctamente. Así que los he agregado en mi .angular-cli.json:

"scripts": [
    "../node_modules/jquery/dist/jquery.min.js",
    "../node_modules/bootstrap/dist/js/bootstrap.min.js",
    "../node_modules/admin-lte/dist/js/adminlte.min.js",
    "../node_modules/moment/min/moment.min.js"
],

Desafortunadamente, esto no funciona todo el tiempo. La página se carga bien la primera vez, pero cuando navego a otra página, los scripts no se recargan para la plantilla del componente.

No pude encontrar ninguna información sobre esto, lo cual es muy sorprendente para mí ya que pensaba que sería un problema general. ¡Podría estar totalmente perdido con esto!

Respuesta #1

Una solución simple que encontré fue simplemente agregar un window.location.href='...' al enlace que estés abriendo después del inicio de sesión. Aquí está mi función para cuando se hace clic en el botón de inicio de sesión.

this.authService.authenticateMember(member).subscribe(data => {
  if (data.success) {
      ...
      window.location.href = '/'
      ...
  } else {
      ...
  }
}

Así que si estás usando autenticación, entonces puedes colocar ese código anterior al final de la respuesta de éxito de inicio de sesión y refrescará la página, además de llevar al usuario a donde sea que vaya después de un inicio de sesión exitoso.

Esta no es la mejor solución, pero es la más simple que puedo pensar y que no requiere demasiados cambios. Espero que ayude :)

Respuesta #2

Puedes eliminar y volver a crear tus elementos de script en el DOM cada vez que lo necesites, así:

document.getElementById("myScript").remove();
var testScript = document.createElement("script");
testScript.setAttribute("id", "myScript");
testScript.setAttribute("src", "assets/js/script.js");
document.body.appendChild(myScript);

Publiqué una pregunta en GitHub donde explico cómo hacerlo.