uni-app 为什么nvue里面不能使用挂载的appvue的东西
uni-app 为什么nvue里面不能使用挂载的appvue的东西
那么中间件有个屁用啊
我服;
目前storage是打通的。
js方法需要单独import。
另外globalData和vuex是支持的
感觉很多都在等官方打通
大概什么时候能打通,这是一个很重要的功能啊,现在被nvue坑惨了
回复 [已删除]: 只能重新挂载了
回复 叶耳朵: 重新挂载是什么意思?nvue现在是不能挂载吧?
现在也还不支持,唉
在uni-app中,nvue和Vue页面(通常指.vue
文件)分别采用了不同的渲染引擎,这是导致nvue中不能直接使用挂载在Vue组件中的东西的主要原因。nvue使用的是Weex引擎,它基于原生组件进行渲染,以提供更高的性能和更好的原生交互能力;而Vue页面则使用的是Vue.js框架,通过Webview渲染。
由于这种底层渲染机制的不同,nvue和Vue页面在资源访问、生命周期管理、事件处理等方面存在较大的差异。因此,直接在nvue中使用Vue组件或Vue实例中的方法、数据等是不可行的。
以下是一个简单的代码示例,展示了如何在uni-app中分别处理nvue和Vue页面,以及它们之间如何通信(而不是直接挂载使用):
Vue页面(App.vue)
<template>
<view>
<button @click="sendMessageToNvue">Send Message to NVue</button>
</view>
</template>
<script>
export default {
methods: {
sendMessageToNvue() {
// 使用postMessage向nvue页面发送消息
plus.webview.currentWebview().evalJS(`
if (window.nvueReceiver) {
window.nvueReceiver.receiveMessageFromVue('Hello from Vue!');
}
`);
}
}
}
</script>
nvue页面(index.nvue)
<template>
<div>
<text>{{message}}</text>
</div>
</template>
<script>
export default {
data() {
return {
message: ''
};
},
mounted() {
// 注册一个全局函数用于接收来自Vue页面的消息
window.nvueReceiver = {
receiveMessageFromVue(msg) {
this.message = msg;
// 更新界面,这里可能需要使用setTimeout或requestAnimationFrame来确保界面更新
setTimeout(() => {});
}
};
// 监听来自Vue页面的消息(这里通过evalJS注入的代码调用)
window.addEventListener('message', (e) => {
if (e.data && typeof e.data === 'string') {
this.message = e.data;
}
});
}
}
</script>
注意:上述代码中的通信方式并不是uni-app官方推荐的最佳实践,因为evalJS
和全局变量注入可能带来安全和维护上的问题。在实际项目中,更推荐使用uni-app提供的官方通信API,如uni.postMessage
和uni.onMessage
,但这些API在nvue中的支持情况可能因版本而异,具体请参考uni-app官方文档。
总之,由于nvue和Vue页面的渲染引擎不同,它们之间不能直接共享组件或实例数据。需要通过其他方式进行通信和数据交换。