技术栈:Uniapp + Vue3
简介
实际业务中有时候会需要在本微信小程序内打开web页面,这时候可以封装一个路由页面专门用于此场景。
在路由跳转的时候携带路由参数,拼接上web url,接收页面进行参数接收即可。
实现
webview页面
新建一个路由页面,处理接收到的web url,并使用web-view渲染。
javascript
<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。
javascript
/**
* 格式化路由携带的参数
**/
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}`,
});
}