技术栈:Uniapp + Vue3
简介
实际业务中有时候会需要在本微信小程序内打开web页面,这时候可以封装一个路由页面专门用于此场景。
在路由跳转的时候携带路由参数,拼接上web url,接收页面进行参数接收即可。
实现
webview页面
新建一个路由页面,处理接收到的web url,并使用web-view渲染。
<template><view class="container"><web-view :src="externalUrl"></web-view></view>
</template><script setup>
import { ref } from "vue";
import { onLoad } from "@dcloudio/uni-app";const externalUrl = ref("");
onLoad((options) => {externalUrl.value = options.url;
});
</script><style scoped>
.container {width: 100vw;height: 100vh;
}
</style>
跳转
在需要触发的页面,路由时带上web url。
/**
* 格式化路由携带的参数
**/
const createQuery = (obj, parentKey = '', keyValueSeparator = '=', pairSeparator = '&') => {let queryString = [];const that = this;Object.keys(obj).forEach(key => {const fullKey = parentKey ? `${parentKey}[${key}]` : key;if (typeof obj[key] === 'object' && obj[key] !== null && !Array.isArray(obj[key])) {queryString.push(this.createQuery(obj[key], fullKey));} else {queryString.push(`${fullKey}${keyValueSeparator}${obj[key]}`);}});return queryString.join(pairSeparator);}/**
* 点击跳转web页面
**/
const onClick = () => {const params = {url: 'https://mp.weixin.qq.com/s/Dq4xx5FUFRB-oJKrwzjewg'}const url = '/pages/webview/index'const query = this.createQuery(params);uni.navigateTo({url: `${url}?${query}`,});
}