uni-app page-meta 在APP和H5里 页面间动态赋值后返回无更新

uni-app page-meta 在APP和H5里 页面间动态赋值后返回无更新

操作步骤:

  • 给page-meta的page-style动态赋值,
    1. 在A页面赋值后 跳到 B页面 (B页面page-style生效)
    2. 然后在B页面赋值后返回 A页面,A页面样式不更新。但打印的page-style值更新了。

预期结果:

  • 在所有页面都立即生效

实际结果:

  • 返回时无生效

bug描述:

  • 在APP和H5端:
    • 给page-meta的page-style动态赋值,在另一个页面赋值返回原来的页面,样式并不更新。
    • 好像缓存了一样。。。
  • vue3和vue2都存在这个问题,小程序没有问题。
7 回复

已记录此问题后续排查,已加分,感谢您的反馈!


在app上出现了,root-font-size也有这个问题,h5上没问题

回复 c***@163.com: 解决了吗

回复 ujoin_wql: 页面显示写个定时器,先改成false,延迟一秒改成true

这个bug还没解决吗

啥时能解决这个问题

在 uni-app 中,page-meta 组件用于设置页面的元信息,如标题、导航栏、状态栏等。如果你在页面间动态赋值后返回时发现页面元信息没有更新,可能是由于以下原因导致的:

1. 页面缓存问题

uni-app 默认会对页面进行缓存,以提高页面切换的性能。当你从一个页面返回到上一个页面时,上一个页面可能仍然使用的是缓存中的数据,导致 page-meta 没有更新。

解决方案:

你可以在 onShow 生命周期中手动更新 page-meta 的内容,以确保每次页面显示时都能正确更新。

export default {
  data() {
    return {
      pageTitle: '初始标题'
    };
  },
  onShow() {
    // 在 onShow 中更新 page-meta
    uni.setNavigationBarTitle({
      title: this.pageTitle
    });
  },
  methods: {
    updateTitle(newTitle) {
      this.pageTitle = newTitle;
      // 手动更新导航栏标题
      uni.setNavigationBarTitle({
        title: this.pageTitle
      });
    }
  }
};

2. page-meta 动态绑定问题

如果你在 page-meta 中使用了动态绑定,确保绑定的数据在页面返回时已经正确更新。

解决方案:

确保在页面返回时,相关的数据已经更新,并且 page-meta 绑定的数据能够正确反映这些变化。

<page-meta :root-font-size="rootFontSize + 'px'"></page-meta>
export default {
  data() {
    return {
      rootFontSize: 16
    };
  },
  onShow() {
    // 在 onShow 中更新数据
    this.rootFontSize = 18;
  }
};

3. page-meta 组件的使用限制

page-meta 组件在某些平台(如 H5)可能会有一些限制或兼容性问题,导致动态赋值后无法正确更新。

解决方案:

如果你发现 page-meta 在某些平台上无法正常工作,可以尝试使用平台特定的 API 来手动设置页面的元信息。

// 在 H5 中手动设置标题
document.title = '新标题';

// 在 APP 中手动设置导航栏标题
uni.setNavigationBarTitle({
  title: '新标题'
});

4. 页面栈问题

uni-app 的页面栈机制可能导致页面返回时,某些数据或状态没有正确恢复。

解决方案:

你可以使用 uni.navigateBackdelta 参数来确保返回到正确的页面,并在 onShow 中手动更新页面状态。

uni.navigateBack({
  delta: 1
});
回到顶部
AI 助手
你好,我是IT营的 AI 助手
您可以尝试点击下方的快捷入口开启体验!