uni-app 为什么nvue里面不能使用挂载的appvue的东西

发布于 1周前 作者 ionicwang 来自 Uni-App

uni-app 为什么nvue里面不能使用挂载的appvue的东西

那么中间件有个屁用啊
我服;

8 回复

目前storage是打通的。 js方法需要单独import。 另外globalData和vuex是支持的


感觉很多都在等官方打通

大概什么时候能打通,这是一个很重要的功能啊,现在被nvue坑惨了

回复 [已删除]: 只能重新挂载了

回复 叶耳朵: 重新挂载是什么意思?nvue现在是不能挂载吧?

就是啊,nvue和vue不能打通,坑的一逼,也不能使用vuex。。。。。。。

现在也还不支持,唉

在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.postMessageuni.onMessage,但这些API在nvue中的支持情况可能因版本而异,具体请参考uni-app官方文档。

总之,由于nvue和Vue页面的渲染引擎不同,它们之间不能直接共享组件或实例数据。需要通过其他方式进行通信和数据交换。

回到顶部