2017-05-30 15 views
0

我正試圖在angular4上重寫我的jquery網站。在我家的分量我加載使用此功能的外部.js文件:angular4清除組件負載上的外部腳本

public loadScript(url) { 
     console.log('preparing to load...') 
     let node = document.createElement('script'); 
     node.src = url; 
     node.type = 'text/javascript'; 
     document.getElementsByTagName('head')[0].appendChild(node); 
} 

它工作得很好,直到我開始頁面之間進行導航。問題是,每次腳本加載時,都會在我的網站的不同部分應用動畫,所以當我在某處導航並返回時,動畫會應用兩次,這看起來很奇怪。

請爲那些角度專家,不要建議我完全在角度重寫代碼。

我的問題是,如何刷新或刷新所有以前加載的js 對組件加載的影響?

可能嗎?如果是的話,你能否就此提出建議。

我的第二個問題是什麼導致所有這些行爲?是jquery層 完全分離角?

PS。我已經嘗試了其他接近外部腳本加載的方法,但所有這些都以這種方式結束。如果我想快速轉換角度小的現有項目,此方法非常有用。

更新1: 腳本在onAfterViewInit(加載)和這樣的: this._dataService.loadScript( '/資產/ JS/home.js');

我無法訪問功能,但動畫和效果應用於元素,這對我的目標來說已經足夠了。

+0

你可以把相同的代碼如何調用這個所謂的外部函數,它是什麼意思?奇怪的問題。 – Gary

回答

0

基本上我找到了一個簡單的解決方案。每當我加載一個組件時,我生成一個隨機的uuid數字並將其應用到我的html標籤。然後當外部腳本被加載時,它不會影響我當前的元素,並且所有內容都能正確顯示。

外部JS:

function textLoader(uid) { 

    var u = $("div."+uid+"[id^='block-']").hide(), 
    h = 0; 

    if (function d() { 

     $("."+uid+" .text-block").hide(); 
... 

組件TS:

constructor(private _dataService : DataService, private userService : UserService) 
    { 
     console.log('home constructor'); 

     this.uuid = "cc_" + this._dataService.getUUID(); 
    ... 

ngAfterViewInit() { 

     this._dataService.loadScript('/assets/js/home.js');  
     textLoader(this.uuid); 

如果您對我的做法或任何其他可能的解決方案您個人的看法,我會很高興聽到這個消息。我在angular2中只有一箇中級知識,當然這種代碼是不可取的。