在Element UI 對話方塊裡面載入高德地圖的時候發現:被包裹在對話方塊元件中的地圖無法顯示,而寫在普通頁面的地圖則沒有這種問題

在普通頁面地圖顯示正常

在彈窗中地圖無法顯示 我們可以看到同樣的程式碼,如果不寫在對話方塊裡,顯示就沒有問題。看了element ui的原始碼,終於發現問題的原因: 可以看到,對話方塊裡的內容由此div包裹,而這個div的顯示或隱藏是使用了v-if指令,查閱vue官方文件,可以瞭解到v-if的特性:

這也就是說,當對話方塊未開啟之前,我們寫在鉤子函式中的初始化地圖的方法雖然執行了,但因為v-if繫結的狀態為假,實際上地圖並沒有初始化成功,而當我們開啟對話方塊,也就是將v-if渲染條件設為真的時候,mounted方法不會執行,所以對話方塊裡裝的只是一個沒有經過高德建構函式渲染的普通div,那麼我們看到的也就只會是一片空白了。


地圖顯示出來了 還有一種方式也可以載入地圖
將地圖放入一個元件中,在彈窗中引入這個子元件也可以載入地圖

同樣是通過對話方塊顯示狀態的那個變數來判斷地圖的載入