Ionic Tabs应用程序上的Leaftlet只显示第一个磁贴
Leaftlet on Ionic Tabs App shows only first tile
我有一个Ionic Tabs应用程序(我在Visual Studio 2015上使用了Cordova模板),第二个选项卡上有一张传单地图。在第一个选项卡上,我有一些POI的搜索参数,我想用标记在地图上显示。一切都很好,包括地图显示所有瓷砖,直到我开始与第一个选项卡上的控件交互。特别是,当我输入输入控件并出现软键盘时,如果我转到第二个选项卡,地图只显示第一个瓷砖。如果放大或缩小,地图会刷新,但只显示第一个磁贴。不过,如果我改变设备的方向,问题就解决了。
软键盘并不是造成问题的唯一原因。例如,在Ripple上,软键盘不会显示(我使用笔记本电脑键盘),但在操作第一个选项卡上的搜索参数一段时间后,地图停止正常工作。
此外,我尝试使用Mapbox API而不是传单,但问题的发生方式完全相同。
L.Map
实例无法正确获取/计算其维度,因为在初始化时实例的父容器具有display: none
样式。当包含地图的选项卡显示时,您可以在地图实例上调用invalidateSize
,使其重新计算其尺寸:
检查贴图容器大小是否发生了更改,如果发生了更改则更新贴图——在动态更改贴图大小后调用它,默认情况下还会设置平移动画。
http://leafletjs.com/reference.html#map-无效大小
到目前为止,我还不是离子专家,但根据文档/参考资料,ion-tab
有一个on-select
回调,您可以在其中执行此操作:
选择此选项卡时调用。
http://ionicframework.com/docs/api/directive/ionTab/
<ion-tab on-select="onTabSelected()"></ion-tab>
function onTabSelected () {
//Assuming 'map' holds a reference to your map instance.
map.invalidateSize();
}
正如问题发布者在下面的评论中所提到的,上述方法有效,但监听$ionicView.enter
事件并在其回调中使用invalidateSize
也是如此:
$scope.$on('$ionicView.enter', function () {
map.invalidateSize();
});
- 而循环只设置php中输入字段中的第一个值
- dataTables-如何自定义分页类型以显示最后一个页码后面的省略号,
- 错误:$injector:modulerr模块错误(我的第一个SPA应用程序)
- bootstrap消除模态并显示另一个模态
- IE11中的第二个调用取消了第一个Fetch API调用
- Javascript XMLHttpRequest——只有第一个POST请求有效
- 根据前两个下拉ID显示第三个下拉列表
- 使用javascript或angularjs特定过滤器搜索字符串中第一个img标记的json值
- json结果显示第一个值
- NodeJS应用程序只显示第一个JSON对象.为什么?
- jquery-select2显示默认选择的第一个值
- 角度下拉列表不显示第一个值
- html嵌套表通过单击表行第一个td来隐藏或显示表行
- 如何检查多维数组中是否存在字符串,然后显示数组中找到该字符串的第一个项
- 使用if计算基于年龄的点数.Else语句中,脚本只显示第一个值
- PHP变量正在更新,但javascript函数总是显示第一个值
- 渐明,淡出DIV上循环工作良好-但不显示第一个DIV
- jQuery AJAX在第一个PHP条件之后不显示输出
- 如何始终显示第一个 TAB
- 如果按下按钮,显示从json中获得的第一个X元素