小程序跳转页面方法

微信   2024-12-27 17:23   80   0  

在微信小程序中,主要有以下几种页面跳转的方法:

一、声明式导航

navigator 组件:

在 WXML 文件中使用<navigator>组件进行页面跳转。可以通过设置url属性指定要跳转的页面路径。

例如:<navigator url="/pages/detail/detail">跳转到详情页</navigator>。

可以设置open-type属性来控制跳转的方式,如navigate(保留当前页面,跳转到应用内的某个页面)、redirect(关闭当前页面,跳转到应用内的某个页面)、switchTab(跳转到 tabBar 页面,并关闭其他所有非 tabBar 页面)等。


二、编程式导航

wx.navigateTo:

保留当前页面,跳转到应用内的某个页面。使用相对路径或绝对路径来指定目标页面。

例如:wx.navigateTo({ url: '/pages/detail/detail' })。

注意:小程序最多只能打开五层页面,如果超过五层,可以考虑使用wx.redirectTo或其他方式。

wx.redirectTo:

关闭当前页面,跳转到应用内的某个页面。

例如:wx.redirectTo({ url: '/pages/detail/detail' })。

wx.reLaunch:

关闭所有页面,打开到应用内的某个页面。

例如:wx.reLaunch({ url: '/pages/detail/detail' })。

wx.switchTab:

跳转到 tabBar 页面,并关闭其他所有非 tabBar 页面。

例如:wx.switchTab({ url: '/pages/index/index' })。

wx.navigateBack:

返回上一页面或多级页面。可以通过delta参数指定返回的页面层数。

例如:wx.navigateBack({ delta: 1 })表示返回上一页。

小程序页面跳转时,怎么实现页面间参数传递?

在微信小程序中,可以通过以下几种方式在页面跳转时实现参数传递:


一、使用路由参数

使用编程式导航传递参数:

在使用wx.navigateTo、wx.redirectTo或wx.reLaunch进行页面跳转时,可以在目标页面的路径后添加参数。

例如:wx.navigateTo({ url: '/pages/detail/detail?id=123' }),这里将参数id的值设置为123。

在目标页面(即detail页面)的onLoad生命周期函数中接收参数:

Page({

  onLoad: function(options) {

    const id = options.id;

    console.log('接收到的参数 id:', id);

  }

});

使用navigator组件传递参数:

在 WXML 文件中使用<navigator>组件时,可以在url属性中添加参数。

例如:<navigator url="/pages/detail/detail?id=123">跳转到详情页</navigator>。

在目标页面的onLoad生命周期函数中接收参数,方式与编程式导航相同。


二、使用全局变量

在小程序的app.js文件中定义全局变量:

App({

  globalData: {

    someParam: null

  }

});

在源页面中设置全局变量的值:

const app = getApp();

app.globalData.someParam = '要传递的值';

wx.navigateTo({ url: '/pages/detail/detail' });

在目标页面中获取全局变量的值:

const app = getApp();

const paramValue = app.globalData.someParam;

console.log('从全局变量获取的参数值:', paramValue);

这种方式不太推荐,因为全局变量可能会被意外修改,导致数据混乱。


三、使用缓存

在源页面中使用wx.setStorageSync或wx.setStorage将参数存储到缓存中:

wx.setStorageSync('paramKey', '要传递的值');

wx.navigateTo({ url: '/pages/detail/detail' });

在目标页面的onLoad生命周期函数中使用wx.getStorageSync或wx.getStorage从缓存中获取参数:

Page({

  onLoad: function() {

    const paramValue = wx.getStorageSync('paramKey');

    console.log('从缓存获取的参数值:', paramValue);

    // 记得在适当的时候清除缓存,以免占用过多空间

    wx.removeStorageSync('paramKey');

  }

});

小程序页面跳转时,除了路由参数还可以用什么方式传递参数?

除了路由参数,还可以通过以下方式在小程序页面跳转时传递参数:


一、全局数据存储

可以利用小程序的全局变量来传递参数。在小程序的app.js文件中定义全局变量,在源页面设置全局变量的值,在目标页面获取全局变量的值。

例如:

在app.js中:

App({

  globalData: {

    sharedParam: null

  }

});

在源页面:

const app = getApp();

app.globalData.sharedParam = '要传递的值';

wx.navigateTo({ url: '/pages/destination/destination' });

在目标页面:

const app = getApp();

const paramValue = app.globalData.sharedParam;

console.log('从全局变量获取的参数值:', paramValue);

但这种方式不太推荐,因为全局变量可能被意外修改,导致数据混乱。


二、本地存储(缓存)

在源页面使用本地存储存储参数:

wx.setStorageSync('paramKey', '要传递的值');

然后进行页面跳转。

在目标页面获取参数:

const paramValue = wx.getStorageSync('paramKey');

记得在适当的时候清除缓存,以免占用过多空间。

wx.removeStorageSync('paramKey');


三、事件总线(自定义事件)

可以使用第三方库或者自己实现一个简单的事件总线来传递参数。


创建一个事件中心对象:

 const eventBus = {

   events: {},

   on(eventName, callback) {

     if (!this.events[eventName]) {

       this.events[eventName] = [];

     }

     this.events[eventName].push(callback);

   },

   emit(eventName, data) {

     if (this.events[eventName]) {

       this.events[eventName].forEach(callback => callback(data));

     }

   }

 };

在源页面发布事件:

 const valueToPass = '参数值';

 eventBus.emit('customEvent', valueToPass);

 wx.navigateTo({ url: '/pages/destination/destination' });

在目标页面订阅事件:

 onLoad() {

   eventBus.on('customEvent', (data) => {

     console.log('接收到的参数值:', data);

   });

 }


小程序 wx.navigateTo或者navigator标签 无法跳转

情况1 路由写错

仔细检查一下路由,而且一定要先在app.json中声明

情况2 跳转地址为tab栏的地址

已经在app.json栏配置过的tab栏地址不可以用普通跳转方法进行路由跳转。

wx.navigateTo(Object object)说明:

保留当前页面,跳转到应用内的某个页面。但是不能跳到 tabbar 页面。

来源: wx.navigateTo(Object object) | 微信开放文档

这时需要将wx.navigateTo方法改为wx.switchTab方法。

如果你用的是navigator标签跳转,需要在标签中添加属性:open-type="switchTab",该属性默认为navigate,即“navigateTo”的跳转方式,改为switchTab,将对应 wx.switchTab 的功能。


链接:https://blog.csdn.net/sun_lei_chao/article/details/136941899

链接:https://blog.csdn.net/weixin_50883365/article/details/142957986


博客评论
还没有人评论,赶紧抢个沙发~
发表评论
说明:请文明发言,共建和谐网络,您的个人信息不会被公开显示。