uni-app ios中自定义组件中watch监听$route不生效

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

uni-app ios中自定义组件中watch监听$route不生效
想在当前页监听是从什么页面返回的,使用watch监听$route,编译成h5中可以监听到,但编译成ios,监听不到,没有触发

图片

1 回复

在uni-app中,尤其是在iOS平台上,如果你发现自定义组件中的watch监听$route不生效,这通常是因为$route对象在组件中的访问和使用方式有特殊性。在Vue或uni-app中,$route通常是由Vue Router管理的,而在组件中直接监听$route的变化并不总是可靠,特别是在自定义组件中。

一种常见的解决方案是在页面的onLoadonShow等生命周期钩子中处理路由变化,并通过props或事件机制将路由数据传递给组件。下面是一个简单的代码示例,展示如何在页面中监听路由变化,并将数据传递给组件。

页面代码(Page.vue)

<template>
  <view>
    <custom-component :route-data="routeData"></custom-component>
  </view>
</template>

<script>
import CustomComponent from '@/components/CustomComponent.vue';

export default {
  components: {
    CustomComponent
  },
  data() {
    return {
      routeData: {}
    };
  },
  onLoad(options) {
    this.updateRouteData(this.$route);
    // 监听路由变化,这里以简单的方式监听,实际应用中可能需要更复杂的逻辑
    this.$watch('$route', this.updateRouteData);
  },
  methods: {
    updateRouteData(newRoute) {
      this.routeData = { ...newRoute.query, ...newRoute.params }; // 根据需要选择query或params
    }
  }
};
</script>

自定义组件代码(CustomComponent.vue)

<template>
  <view>
    <text>Route Data: {{ routeData }}</text>
  </view>
</template>

<script>
export default {
  props: {
    routeData: {
      type: Object,
      default: () => ({})
    }
  },
  watch: {
    routeData: {
      handler(newVal) {
        console.log('Route data changed:', newVal);
        // 在这里处理路由数据变化
      },
      deep: true // 如果routeData对象结构复杂,需要深度监听
    }
  }
};
</script>

在这个例子中,页面组件负责监听$route的变化,并将相关的路由数据通过props传递给自定义组件。自定义组件则通过watch监听这些props的变化,从而做出响应。这种方式绕过了直接在自定义组件中监听$route的限制,同时保持了组件间的数据流动清晰和可维护。

回到顶部