我有一個谷歌地圖與10個標記上它和Angular2 SideNav添加到頁面這樣的:延遲事件偵聽器添加到谷歌標記
<mat-sidenav-container>
<div id="map">Google Map [Code omitted]</div>
<mat-sidenav #sidenav position="end" align="end" class="user-sidenav"></mat-sidenav>
</mat-sidenav-container>`
在我的部分,我有:
@ViewChild(MatSidenav) sidenav: MatSidenav;
// ...
每個標記有一個事件監聽器添加到它用下面的代碼:
google.maps.event.addListener(gmr, 'click', (function(marker) {
return function() {
self.handleMarkerClick(marker);
};
})(gmr));
gmr
是一個google.maps.Marker
和self
= this
handleMarkerClick
看起來是這樣的:
private handleMarkerClick(marker: any) {
this.sidenav.open();
console.log('sidenav open');
}
它是唯一打開一個角材料Sidenav。點擊標記後,在打開sidenav之前會有2-3秒的延遲。在console.log()
的幫助下,我可以看到「sidenav open」打印的效果與點擊標記時相同,但是在2-3秒後啓動sidenav動畫。
只是爲了測試目的,我添加了一個按鈕,我的HTML:
<button mat-button (click)="sidenav.toggle()">Open sidenav</button>
而且sidenav這個瞬間打開。
有沒有人有線索爲什麼延遲從組件打開sidenav而不是從HTML打開?
編輯:延時範圍從1秒到3秒。有時速度更快,有時速度更慢。
Edit2:我做了另一個測試,想出了一個自定義的sidenav解決方案(一些html,動畫等基本上覆制了Angular Material sidenav)。從組件調用時它仍然很慢,所以它不是Angular Material問題。任何線索?
你能告訴我們你的**完整代碼**嗎?它可能有幫助。 – Edric
Edric,這是負責sidenav的唯一代碼。我更新了我的問題,並提供了更多細節。 –
原來,它與Angular Material沒有任何關係,但事件監聽器已添加到Google標記中。 –