使用Element UI创建坐标拾取页面时存在问题。对话框组件包裹的地图3358www.Sina.com/,但是普通页面上写的地图没有这样的问题
坐标拾取是一个借用高德地图的工具。 http://lbs.AMAP.com/API/JavaScript-API/example/map/click-to-get-LNG lat
想实现的效果是点击经纬度的输入框
将显示一个对话框,其中显示坐标选择工具
选择坐标后单击确认关闭对话框,并将获取的经纬度数据放入经纬度输入框。 (截图中坐标出现差异时,请自己无视。 )
但是问题是地图不显示在对话框中
这是一个例子。 在https://jsfiddle.net/mw51L8mu/中,您可以看到对话框打开后是空白的
而且,如果不在对话框中写入同样的代码,显示就没有问题:
https://jsfiddle.net/u1ghuhh5/
研究了很久,最后跑去看了element ui的源代码,终于发现了问题的原因:
divclass=' El-dialog _ _ body ' v-if=' rendered ' slot/slot/div
对话框包含此div,但使用v-if命令显示或隐藏此div,以便您可以通过查看vue官方文档了解v-if的特性。
也就是说,在对话框未打开的情况下,执行了初始化写入挂接函数的映射的方法,但由于v-if绑定的状态为假,因此实际上映射没有初始化成功,但打开对话框,即v-if记录由于不执行mounted方法,因此对话框中只有未使用高级构造函数进行渲染的普通div
如果知道原因的话,就能找到解决方案。 可以在watch监视对话框中显示状态变量
watch:{visible(curval,oldVal ) if ) curval==true ) varmap=newamap.map ) container、{健康鸡翅:9} letcliclet function(e ) e ) document.getelementbyid ) lnglat ).value=e.LNG lat let auto=new AMAP.autocomplete ({ input : ' 60 ' ) amap.event.addlistener(auto,' select ',select ); //注册拦截,并在当选某条记录时注册functionselect(e ) if ) e.poie.poi.location ) map.setzoom ) 15 ); map.setcenter(e.poi.location; } } } } }这样在对话框中正常渲染内容后,初始化地图即可。
然后复制和粘贴黄金样品,坐标拾取工具就差不多完成了。
最后还有一个小问题。 即使您在输入框中输入地址,但由于金牌设置为区域下拉选项的z-index级别低于element ui对话框中的(似乎是金牌1024,element对话框2000或更高),也仍然会出现下拉框
. AMAP-sug-result { z-index :3000; }