高德地图 JS API (jsp + miniui(子页面数据返回父页面并设值) + 单个点标记 + 点标记经纬度 + 回显 + 限制地图显示范围)...

-*-  父页面js

function mapFocus(){
        //console.log("-*-");
        var longitude = mini.get("jd").getValue(); // 经度
        var latitude = mini.get("wd").getValue(); // 纬度
        var url = "<%=basePath %>project/construction/Map.jsp";
            //console.log(latitude);
            //console.log(longitude);
        if(longitude!="" && latitude!="" ){
            //console.log("不为空");
            url = "<%=basePath %>project/construction/Map.jsp?longitude="+longitude+"&latitude="+latitude;
        }
        mini.open({
            url: url, 
            title: '',
               width: 800,
            height: 600,
            ondestroy: function (action) { 
                // grid.reload(); 
            }, ondestroy: function (action) {  //弹出页面关闭前
                if (action == "ok") {       //如果点击“确定”
                    var iframe = this.getIFrameEl(); //获取选中、编辑的结果
                    var data = iframe.contentWindow.GetData(); // 调用子页面方法,此方法返回子页面数据,
                    data = mini.clone(data);    //必须。克隆数据。 
                    //console.log(data[0]);
                    //console.log(data[1]);
                    mini.get("jd").setValue(data[0]);
                    mini.get("wd").setValue(data[1]);
                    //$("#jd").val(data[0]);
                    //$("#wd").val(data[1]);
                    /*grid.load({
                            "goodsId":data.goodsId,
                            "demandId":data.demandId
                      });*/
                }
            }  
        
        });
    }

-*- 子页面

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@page import="com.e6soft.base.util.WebUtil"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";

    String longitude = WebUtil.getParam("longitude");
    String latitude = WebUtil.getParam("latitude");
%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <base href="<%=basePath%>">
    
    <title>地图显示</title>
    
    <meta http-equiv="pragma" content="no-cache">
    <meta http-equiv="cache-control" content="no-cache">
    <meta http-equiv="expires" content="0">    
    <meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
    <meta http-equiv="description" content="This is my page">
    <!--
    <link rel="stylesheet" type="text/css" href="styles.css">
    -->
    <%-- --%>
    <script src="<%=basePath %>common/boot.web.miniui.js" type="text/javascript"></script>
    <script src="<%=basePath %>common/js/jquery-1.11.3.min.js" type="text/javascript"></script>
    <%-- --%>
    <meta name="viewport" content="initial-scale=1.0, user-scalable=no, width=device-width">
    <link rel="stylesheet" href="https://a.amap.com/jsapi_demos/static/demo-center/css/demo-center.css" />
    <style>
        html,
        body,
        #container {
          width: 100%;
          height: 100%;
        }
    </style>
</head>
<body> 
<div id="container"></div> 
<div class="input-card" style="width: 120px">
   <button class="btn" onclick="onOk()" style="margin-bottom: 5px">确定</button>  
</div>
<!-- 加载地图JSAPI脚本 -->
<script src="https://webapi.amap.com/maps?v=1.4.15&key=您申请的key值"></script>
<script>
    mini.parse();
    var lng = "<%=longitude%>";  // 经度
    var lat = "<%=latitude%>"; // 纬度 
    $(function(){  // jQuery 
        lockMapBounds();
        if(lng!="" && lat!="" ){
            console.log("不为空-*-"); 
            addMarker(Number(lng),Number(lat)); // 转成 int 
            // setPosition(lnglat:LngLat)        设置点标记位置
            //var overlays = map.getAllOverlays("marker"); // 获得  marker 类型的数据
            //var position = overlays.setPosition(lng:lat);  // 设置点标记位置
        }
    });
    
    //限制地图显示范围
    function lockMapBounds() {
      var bounds = map.getBounds();
      map.setLimitBounds(bounds); 
    }
     
    var map = new AMap.Map('container', {
        resizeEnable: true, //是否监控地图容器尺寸变化
        zoom:11, //初始化地图层级
        center: [113.12, 23.02] //初始化地图中心点
    });
    var clickEventListener = map.on('click', function(e) {
        var lng = e.lnglat.getLng();
        var lat = e.lnglat.getLat();
        //console.log("经度:"+lng+" / 纬度"+lat);
        addMarker(lng,lat);
       });
       
    // 实例化点标记
    function addMarker(lng,lat) {
        clearMarker() // 清除之前点击的点标记
        marker = new AMap.Marker({
            icon: "//a.amap.com/jsapi_demos/static/demo-center/icons/poi-marker-default.png",
            position: [lng,lat],
            offset: new AMap.Pixel(-10, -34)
        });
        marker.setMap(map);
    }
    // 清除 marker
    function clearMarker() { 
        // 清除地图上所有添加的覆盖物
        map.clearMap();
    } 
     
    function onOk(){
        // getPosition( )    LngLat    获取点标记的位置 
        //console.log(markers);
        console.log("获得数据,返回父页面");  
         
        mini.confirm("确认", "提示",
                function (action) {            
                    if (action == "ok") {
                        CloseWindow("ok");
                    }
                }
            ); 
    }
    
    
    function onCancel(e) {
        CloseWindow("cancel");
    }
    function CloseWindow(action) {
        if (window.CloseOwnerWindow) return window.CloseOwnerWindow(action);
        else window.close();
    }
    
    function GetData(){ // 获得点标记  
        var overlays = map.getAllOverlays("marker"); // 获得  marker 类型的数据
        // console.log(overlays)
        var position = overlays[0].getPosition();
        // console.log(position.lng);
        var ids = [position.lng, position.lat]; 
        var id = ids.join(',');
        return ids;
    }
</script>
</body>
</html>

 

转载于:https://www.cnblogs.com/mysterious-killer/p/11125225.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
如果你在Vue3和ElementUI中使用el-select组件的multiple属性进行单选或多选,并且想要在组件击编辑后,组件内部回显数据,可以通过props和emit来实现。具体步骤如下: 1. 在组件中,给el-select绑定一个v-model,用来存储选择的值,并在击编辑按钮时,通过emit方法向组件传递v-model的值。 2. 在组件中,使用props接收组件传递的v-model的值,并在el-select中绑定这个值,用来实现回显选择结果的功能。 下面是一个简单的示例代码: 组件: ```html <template> <div> <el-select v-model="selected" multiple> <el-option label="Option 1" value="1"></el-option> <el-option label="Option 2" value="2"></el-option> <el-option label="Option 3" value="3"></el-option> </el-select> <el-button @click="edit">编辑</el-button> <child-component :selected.sync="selected"></child-component> </div> </template> <script> import { ref } from 'vue' import ChildComponent from './ChildComponent.vue' export default { components: { ChildComponent }, setup() { const selected = ref([]) // 存储选择结果的数组 const edit = () => { // 向组件传递选择结果 const selectedValue = selected.value const childComponent = document.querySelector('child-component') childComponent.$emit('edit', selectedValue) } return { selected, edit } } } </script> ``` 在组件中,我们使用了Vue3的Composition API来定义了存储选择结果的数组,并在edit方法中,通过emit方法向组件传递了v-model的值。 组件: ```html <template> <div> <el-select v-model="selected" :multiple="true"> <el-option label="Option 1" value="1"></el-option> <el-option label="Option 2" value="2"></el-option> <el-option label="Option 3" value="3"></el-option> </el-select> </div> </template> <script> import { defineProps, ref, watch } from 'vue' export default { props: { selected: { type: Array, default: () => [] } }, setup(props) { const selected = ref(props.selected) // 存储选择结果的数组 // 监听组件传递的选择结果,更新组件的选择结果 watch(() => props.selected, (newValue) => { selected.value = newValue }) return { selected } } } </script> ``` 在组件中,我们使用了props来接收组件传递的v-model的值,并在el-select中绑定这个值,用来实现回显选择结果的功能。同时,我们使用了watch来监听组件传递的选择结果,一旦发生变化,就更新组件的选择结果。 在组件中,我们通过v-bind.sync来将组件中的selected属性和组件中的selected属性进行了双向绑定,这样就可以实现在组件中击编辑后,组件内部的回显数据

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值