2017-09-27 101 views
2

我一直在使用Angular 2和AdminLTE,它需要运行一些脚本才能正确加载。所以我在我的.anglular-cli.json加入他们:通过Angular 2中的所有组件加载脚本

"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" 
], 

不幸的是,这是行不通的所有时间。第一次加载的页面正确,但是当我路由到另一个页面时,不会为组件模板重新加载脚本。

我找不到任何关于这个信息,这对我来说是非常令人惊讶的,因为我认为这将是一个普遍的问题!我可能会完全失去这个!

+0

你可能会使用一些覆盖它们的脚本 –

+0

恐怕我没有使用任何其他脚本 – m33n

回答

1

您可以删除和每次你需要的时候,这样的重建在DOM脚本元素:

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

我张贴在GitHub上的一个问题,我解释如何做到这一点。

2

我找到一个简单的解决方案,只是为登录后打开的任何链接添加window.location.href = '...'。下面是我点击登录按钮时的功能。

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

所以,如果你正在使用的身份验证,然后你可以把上面的代码在你登录成功响应的结束,它会刷新页面藏汉为用户带到任何地方都成功登录后。

这不是最好的解决方案,但它是我能想到的最简单的一个,它需要太多的改变。希望它有帮助:)

+0

这是一个非常有趣的解决方案! – m33n