uniapp nvue 踩坑记录

uniapp nvue 踩坑记录因为上述方法不能使用uni.createMapContext方法,故使用直接跳转nvue页面方法。此方法可以满足基本地图打点使用,但是无法使用createMapContext的方法。1、vue跳转nvue页面需要等nvueonReady,等待所有uni.因使用uniappmap,vue不能支持label所以使用nvue。1、采用subnvue方式。页面收到消息后,再给。、所有监听方法必须在。

大家好,欢迎来到IT知识分享网。

因使用uniapp map ,vue不能支持label 所以使用nvue

1、采用subnvue 方式
此方法可以满足基本地图打点使用,但是无法使用createMapContext的方法
创建如下文件
在这里插入图片描述
pages.json

{ 
   
      "path": "pages/home/home",
      "style": { 
   
        "app-plus": { 
   
          "subNVues": [
            { 
   
              "id": "concat", // 唯一标识
              "path": "pages/home/subnvue/concat", // 页面路径
              /*"type": "popup", 这里不需要*/
              "style": { 
   
                "position": "absolute",
                "dock": "right",
                "width": "750rpx",
                "height": "1334rpx",
                "background": "transparent"
              }
            }
          ]
        }
      }
    },

home.vue

<template>
  <view>
    <view class="page-body">
      <view
        class="page-section page-section-gap"
        style="height: 100vh; width: 100%"
      >
      </view>
    </view>
  </view>
</template>

<script>
export default { 
   
  data() { 
   
    return { 
   
      subNVue: "",
      subNVueShowDetail: "",
      msg: "",
      id: 0, // 使用 marker点击事件 需要填写id
      title: "map",
      longitude: 106.220885,
      latitude: 29.590185,
  },
  onReady() { 
   
    let self = this;
    // 通过 id 获取 nvue 子窗体
    const subNVue = uni.getSubNVueById("concat");
    // 打开 nvue 子窗体
    subNVue.show("slide-in-left", 0, function () { 
   
      // 打开后进行一些操作...
    });
    //获取subnvue传参 
    uni.$on("page-subnvue", (data) => { 
   
      // console.log("home ----父层 ", data);
    });
    //给subnvue传参 
    setTimeout(() => { 
   
      uni.$emit("page-home", { 
   
        title: "我是page-home ",
        content: JSON.stringify({ 
   
          name: 12,
          content: "222",
        }),
      });
    }, 1000);
    subNVue.setStyle({ 
   
      top: "0",
      left: "0",
      width: "750rpx",
      height: "1334rpx",
    });
  },
  methods: { 
   
  },
};
</script>

<style></style>

concat.nvue

<template>
	<div>
		<div class="page-body">
			<div class="page-section page-section-gap">
				<map
					id="map"
					@markertap="bindTap"
					@controltap="bindControltap"
					:controls="controls"
					:style="`width:${width};height:${height}`"
					:markers="markers"
					:scale="15"
					:latitude="latitude"
					:longitude="longitude"
				></map>
				<div style="position: absolute; top:200px;left: 20px;z-index: 9999;color:red">dddjdlkjdljdjkl</div>
			</div>
		</div>
	</div>
</template>

<script>
export default { 
   
	data() { 
   
		return { 
   
			subNVue: '',
			subNVueShowDetail: '',
			msg: '',

			id: 0, // 使用 marker点击事件 需要填写id
			title: 'map',
			// longitude: 116.39742, // 默认的是北京经纬度
			// latitude: 39.909,
			longitude: 106.220885,
			latitude: 29.590185,
			controls: [],
			show: true,
			height: '',
			width: '',
			markers: [
				{ 
   
					id: 'gyqy',
					latitude: '29.595587852178966',
					longitude: '106.22169495575275',
					title: '企业',
					iconPath: './images/map/currentPos.png',
					label: { 
   
						//为标记点旁边增加标签 //因背景颜色H5不支持
						content: 'Hello,I am here', //文本
						color: 'red' //文本颜色
					}
				}
			]
		};
	},
	created() { 
   },

	onLoad() { 
   
		//宽高必须定义
		this.height = uni.getSystemInfoSync().windowHeight + 'px'
		this.width = uni.getSystemInfoSync().windowWidth + 'px';;
		const subNVue = uni.getCurrentSubNVue();
		//接受父层消息
		uni.$on('page-home', data => { 
   
			// console.log('subNVue ----子集', data)
		});
		//给父层发消息
		setTimeout(() => { 
   
			uni.$emit('page-subnvue', { 
   
				title: '我是page-subnvue ',
				content: '我是page-subnvue data content'
			});
		}, 1000);
	},
	onReady() { 
   
		this.createMap(); //地图创建在页面中需要在onReady调用
		//以下方法无效
		let mapContext = uni.createMapContext('map', self);
		console.log('--------------- start');
		mapContext.getRegion({ 
   
			success(res) { 
   
				console.log('---------------');
				console.log(res);
			}
		});
	},
	methods: { 
   
		// 创建地图
		createMap() { 
   
			let self = this;
			setTimeout(() => { 
   
				self.show = false;
				setTimeout(() => { 
   
					self.show = true;
					self.longitude = 118.78025;
					self.latitude = 31.972952;
					self.markers = [
						{ 
   
							id: 'gyqy2',
							latitude: '31.972952',
							longitude: '118.78025',
							iconPath: '../../../static/icons/number.png',
							label: { 
   
								//为标记点旁边增加标签 //因背景颜色H5不支持
								content: '22', //文本
								color: 'red', //文本颜色
								bgColor: 'rgba(255,255,255,0)',
								anchorY: -30,
								anchorX: -6,
								textAlign: 'center'
							}
							// // 自定义窗口
							// customCallout: { 
   
							// anchorX: -1,
							// anchorY: 46,
							// display: "ALWAYS",
							// },
						},
						{ 
   
							id: 'gyqy3',
							latitude: '31.98',
							longitude: '118.789',
							title: '企业222221',
							iconPath: '../../static/icons/number.png',
							label: { 
   
								//为标记点旁边增加标签 //因背景颜色H5不支持
								content: '22', //文本
								color: 'red', //文本颜色
								bgColor: 'rgba(255,255,255,0)',
								anchorY: -30,
								anchorX: -6,
								textAlign: 'center'
							}
						}
					];
				}, 300);
			}, 800);
		},
		startNav() { 
   },
		bindControltap(e) { 
   
			console.log(e);
		},
		bindTap(e) { 
   
			console.log('bindTap');
			console.log(e);
		}
	}
};
</script>

<style></style>

因为上述方法不能使用uni.createMapContext方法,故使用直接跳转nvue页面方法
代码同上
有几点需要注意
1、vue跳转nvue页面(不能再跳转success执行传参) 需要等nvue onReady,等待所有uni. o n 监听注册完成后给 v u e 页面发消息 m a p R e a d y ; v u e 页面收到消息后,再给 n v u e 页面传参 2 、所有监听方法必须在 o n U n l o a d 执行 u n i . on 监听注册完成后 给vue 页面发消息mapReady;vue页面收到消息后,再给nvue页面传参 2、所有监听方法必须在onUnload 执行 uni. on监听注册完成后给vue页面发消息mapReadyvue页面收到消息后,再给nvue页面传参2、所有监听方法必须在onUnload执行uni.off

nvue

onReady() { 
   
	  
  	  uni.$on("parent-data", this.parentData);
	  console.log('*******************************farmInfoMap onReady')
	  uni.$emit("mapReady", { 
   
	    title: "mapReady"
	  });
  },
  onUnload() { 
   
  	uni.$off('parent-data', this.parentData)
  },

免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://yundeesoft.com/11640.html

(0)
上一篇 2024-03-20 08:26
下一篇 2024-03-22 13:45

相关推荐

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注

关注微信