uni-app nvue 跳转另一个预加载的 nvue 页面之后,打开 popup 组件报错且 popup 样式异常
uni-app nvue 跳转另一个预加载的 nvue 页面之后,打开 popup 组件报错且 popup 样式异常
开发环境信息
项目 | 详情 |
---|---|
PC开发环境操作系统 | Windows |
PC开发环境操作系统版本号 | Windows 10 专业版 22H2(19045.4780) |
HBuilderX类型 | Alpha |
HBuilderX版本号 | 4.43 |
手机系统 | Android |
手机系统版本号 | Android 15 |
手机厂商 | 小米 |
手机机型 | 红米 K70 |
页面类型 | nvue |
vue版本 | vue3 |
打包方式 | 云端 |
项目创建方式 | HBuilderX |
示例代码
A 页面(tabbar页面)
onLoad(() => {
uni.preloadPage({url: "/pages/wallet/withdraw/record"})
})
B 页面
<u-popup :show="isShowStatusPicker" mode="top" :round="8" @close="isShowStatusPicker = false">
<u-navbar title="提现记录" bg-color="#fff"></u-navbar>
<view class="status-picker">
<view class="filter">
<view class="filter-item" @click="isShowStatusPicker = false">
<text class="filter-item-text">提现状态:{{ statusList[currentStatusIndex].label }}</text>
<m-icon name="arrow-top-fill" color="#333" :size="10"></m-icon>
</view>
</view>
<view class="list">
<view class="list-item" :class="{active: index === currentStatusIndex, nomargin: (index+1)%4===0}" v-for="(item, index) in statusList" :key="index" @click="currentStatusIndex = index">
<text class="list-item-text" :class="{active: index === currentStatusIndex }">{{item.label}}</text>
</view>
</view>
<view class="action">
<m-button text="取消" :customStyle="btnStyle" @click="isShowStatusPicker = false"></m-button>
<m-button text="确认" type="primary" bold :customStyle="btnStyle" @click="setStatus"></m-button>
</view>
</view>
</u-popup>
操作步骤
A nvue 跳转预加载的 B nvue 后打开 popup
预期结果
打开 popup 不报错,样式正常显示
实际结果
打开 popup 报错,样式异常
bug描述
两个都是 nvue 页面,由于 A 页面跳转到 B 页面会有一段短暂的白屏所以用了预加载,白屏问题是解决了但是打开 B 页面中的 popup 时报错了,且 popup 的圆角失效了,里面的 navbar 组件也消失了。修改代码热更新后再次报错,A 页面直接白屏。
报错
16:47:03.126 [Vue warn]: Unhandled error during execution of render function
at <UNavbartitle="提现记录"bg-color="#fff">
at <UTransitionshow=truecustomStyle={"zIndex":10075,"position":"fixed","display":"flex","top":0,"left":0,"right":0}mode="slide-down" ...>
at <UPopupshow=truemode="top"round=8 ...>
at <Record__pageId=4__pagePath="pages/wallet/withdraw/record"__pageQuery={}>
16:47:03.126 TypeError: e.$getAppWebview is not a function
16:47:03.126 [Vue warn]: Unhandled error during execution of render function
at <USafeBottomkey=2>
at <UTransitionshow=truecustomStyle={"zIndex":10075,"position":"fixed","display":"flex","top":0,"left":0,"right":0}mode="slide-down" ...>
at <UPopupshow=truemode="top"round=8 ...>
at <Record__pageId=4__pagePath="pages/wallet/withdraw/record"__pageQuery={}>
16:47:03.126 TypeError: e.$getAppWebview is not a function
reportJSException >>> exception function:createInstanceContext, exception:white screen cause create instanceContext failed,check js stack ->Uncaught TypeError: e.$getAppWebview is not a function
at wf (uni-jsframework.js:45:123029)
at (uni-jsframework.js:45:123831)
at (uni-jsframework.js:45:254)
at (uni-jsframework.js:45:126105)
at (uni-jsframework.js:45:254)
4 回复
评论可以正常插入图片
所以现在 nvue 的 bug 也直接不管了是吗
在uni-app中使用nvue页面进行页面跳转时,确实可能会遇到一些与原生组件相关的兼容性问题,特别是当涉及到像popup这样的组件时。这类问题通常与组件的生命周期管理、页面栈管理或样式隔离有关。以下是一个简化的代码示例,展示如何在nvue页面之间进行跳转,并在目标页面中正确显示popup组件。
主页面 (main.nvue)
首先,我们创建一个简单的nvue页面,其中包含一个按钮用于跳转到另一个nvue页面。
<template>
<div>
<button @click="navigateToDetail">Go to Detail Page</button>
</div>
</template>
<script>
export default {
methods: {
navigateToDetail() {
uni.navigateTo({
url: '/pages/detail/detail.nvue',
events: {},
success: function() {},
fail: function() {}
});
}
}
}
</script>
目标页面 (detail.nvue)
在目标页面中,我们将尝试显示一个popup组件。这里需要注意的是,nvue中的popup组件需要特别处理样式,因为nvue页面使用的是Weex引擎,其CSS处理与Vue页面有所不同。
<template>
<div>
<popup ref="myPopup" :modal="true" position="center">
<div class="popup-content">
Hello, this is a popup!
</div>
</popup>
<button @click="showPopup">Show Popup</button>
</div>
</template>
<script>
export default {
methods: {
showPopup() {
this.$refs.myPopup.show();
}
}
}
</script>
<style>
.popup-content {
width: 100%;
height: 100%;
background-color: rgba(0, 0, 0, 0.7);
justify-content: center;
align-items: center;
color: white;
}
</style>
注意事项
- 样式处理:在nvue中,样式可能需要使用特定的前缀或不同的属性名。例如,使用
flex-direction
而不是display: flex
。 - 组件生命周期:确保popup组件在页面完全加载后再进行操作。如果popup组件在页面跳转后立即显示,可能会因为页面尚未完全渲染而导致样式异常。
- 平台差异:不同平台(如iOS和Android)上,nvue组件的行为可能有所不同。测试时需在多平台上验证。
以上代码提供了一个基本的框架,用于在nvue页面间跳转并显示popup组件。如果遇到具体的样式错误或功能问题,请检查控制台日志,查找可能的错误或警告信息,并根据这些信息调整代码。