2017-09-27 105 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