2017-03-09 65 views
0

在我的角度2項目中,當應用程序加載並顯示第一個組件時,我可以單擊固定按鈕以顯示菜單。但是,如果我轉到另一條路線並嘗試點擊按鈕,則什麼都不會發生。事情是,按鈕點擊事件是在jquery文件中描述的,我在組件初始化後像這樣加載 - $ .getScript('assets/js/app.js',function(){});因爲我正在將jquery網站移植到角度。 我的導航欄標籤放置在路由器外部,視圖上方。這可能是原因嗎?在瀏覽頁面改變後,我感覺父DOM不可見。應用程序的angular 2訪問標籤外部路由器外(組件)

結構:

<navbar></navbar> 
    <router-outlet></router-outlet> 
<pageFooter></pageFooter> 

家組件:

ngAfterViewInit() { 
... 
     $.getScript('assets/js/app.js', function(){}); 
} 

我還試圖直接操縱和孩子導航欄,使用jQuery來簡單的添加類,但它不不會發生。

有什麼建議嗎?

+0

父DOM不是可見的孩子 – DNRN

回答

0

您需要創建一個「服務」來在子組件和父組件之間進行通信。

我已經回答了類似的問題在這裏: Angular 2 - Using RXJS Observables

如果您需要任何幫助,只是要求在評論:)

+0

好的謝謝,生病先嚐試 – d123546

+0

但後來的問題是,如何服務將改變視圖外的DOM?或者該服務如何在navbar組件中調用toggleMenu函數? – d123546

+0

您將在您的「routeroutlet」組件中產生某種事件,這些事件需要傳播到父組件,navbar是其中的一部分。爲此,您使用該服務。調用BroadcastService的announceBoradcast(),並在父級中訂閱broadcastAnnounce $。 – DNRN

0

基本上,現在,我解決它通過將導航欄標籤內組件視圖。我知道它不是一個最好的解決方案,需要將navbar標籤放在每個組件中,但它的工作原理。但希望有更好的辦法。我不知道如何使用服務,以使我的導航欄組件操縱一個DOM。

+0

它不是操縱DOM的服務,它是父組件。但是,您需要一項服務將該事件從小孩傳達給父母。 – DNRN

0

如果你知道在編譯時的組件(標籤)的類型,你可以把它注射:

constructor(private navBar:NavBarComponent) {} 

這將給該類型的最近的祖先組件。