微信小程序 页面跳转和数据传递实例详解

微信小程序 页面跳转和数据传递实例详解

一、页面跳转

在微信小程序中,页面跳转有两种方式,分别是:

  • wx.navigateTo:保留当前页面,跳转到应用内的某个页面。可通过wx.navigateBack方法返回到原页面。
  • wx.redirectTo:关闭当前页面,跳转到应用内的某个页面。不可通过wx.navigateBack方法返回到原页面。

1. wx.navigateTo

wx.navigateTo方法可接受一个参数url,用于指定要跳转的页面路径。该方法跳转后会在当前页面栈中加入一个新页面,并保留原页面。因此,在新页面中可以通过wx.navigateBack方法返回到原页面。

例如,我们在index页面中有一个按钮,点击后跳转到detail页面:

<!-- index.wxml -->
<button bindtap="gotoDetail">跳转到详情页</button>
// index.js
Page({
  gotoDetail: function () {
    wx.navigateTo({
      url: '/pages/detail/detail'
    })
  }
})

注意,wx.navigateTo方法跳转的页面路径应为相对路径,距离当前页面路径的层级,以/开头。例如,上述代码中url: '/pages/detail/detail'将跳转至pages目录下的detail页面。

2. wx.redirectTo

wx.redirectTo方法与wx.navigateTo略有不同,它会关闭当前页面,跳转到指定页面。因此,在使用该方法跳转的同时,不能通过wx.navigateBack返回到原页面。

例如,我们在index页面中有一个按钮,点击后跳转到about页面:

<!-- index.wxml -->
<button bindtap="gotoAbout">跳转到关于页</button>
// index.js
Page({
  gotoAbout: function () {
    wx.redirectTo({
      url: '/pages/about/about'
    })
  }
})

二、数据传递

在微信小程序中,页面跳转时可以通过url参数传递数据。传递数据的方式有两种,分别是:

  • 查询参数:在url中通过?分隔,以键值对的形式传递参数。例如:/pages/detail/detail?key=value
  • 哈希参数:在url中通过#分隔,以键值对的形式传递参数。例如:/pages/detail/detail#key=value

1. 查询参数

可以在跳转页面时,通过url参数的方式传递数据。例如,我们在index页面中有一个输入框和按钮,输入框中输入内容,点击按钮后跳转到search页面,并将输入框的内容作为查询参数传递过去:

<!-- index.wxml -->
<view>
  <input placeholder="请输入搜索内容" value="{{inputValue}}" bindinput="inputChange" />
  <button bindtap="gotoSearch">搜索</button>
</view>
// index.js
Page({
  data: {
    inputValue: ''
  },
  inputChange: function (e) {
    this.setData({
      inputValue: e.detail.value
    })
  },
  gotoSearch: function () {
    wx.navigateTo({
      url: '/pages/search/search?key=' + this.data.inputValue
    })
  }
})

search页面中,可以通过getCurrentPages方法获取传递过来的参数。getCurrentPages方法返回当前页面栈中所有页面的对象数组,最后一个就是当前页面。页面对象中有一个options对象,包含了传递过来的参数。

例如,我们在search页面中打印一下传递过来的参数:

// search.js
Page({
  onLoad: function (options) {
    console.log(options.key) // 输出搜索内容
  }
})

2. 哈希参数

哈希参数与查询参数类似,不同之处在于传递的参数不会变更url中的路径,只会改变hash值。这种方式通常用于一些需要在同一页面内切换不同数据的场景。

例如,我们在index页面中有三个按钮,分别对应三个商品列表,点击按钮后跳转到list页面,并将对应商品的hash值传递过去:

<!-- index.wxml -->
<view>
  <button bindtap="gotoList" data-id="1">商品1列表</button>
  <button bindtap="gotoList" data-id="2">商品2列表</button>
  <button bindtap="gotoList" data-id="3">商品3列表</button>
</view>
// index.js
Page({
  gotoList: function (e) {
    var id = e.currentTarget.dataset.id
    wx.navigateTo({
      url: '/pages/list/list#' + id
    })
  }
})

list页面中,可以通过onShow生命周期函数获取传递过来的参数。与查询参数不同,哈希参数获取参数的方式为getCurrentPages()[n].options.hash,其中n为当前页面在页面栈中的顺序。

// list.js
Page({
  onShow: function () {
    var hash = getCurrentPages()[getCurrentPages().length - 1].options.hash
    console.log(hash) // 输出对应的商品id
  }
})

三、例子说明

1. 传递字符串参数和数字参数

index页面点击按钮跳转到detail页面,同时传递一个字符串参数和一个数字参数。在detail页面显示这两个参数。

<!-- index.wxml -->
<button bindtap="gotoDetail">跳转到详情页</button>
// index.js
Page({
  gotoDetail: function () {
    wx.navigateTo({
      url: '/pages/detail/detail?key1=hello&key2=123'
    })
  }
})
// detail.js
Page({
  onLoad: function (options) {
    console.log(options.key1) // 输出 hello
    console.log(options.key2) // 输出 123
  }
})

2. 同页面内切换数据

index页面中有两个按钮,点击后在当前页面内切换不同的数据。通过哈希参数传递按钮对应的数据类型。在index页面中显示对应数据类型的数据。

<!-- index.wxml -->
<view>
  <view class="buttons">
    <button class="{{activeIndex==1?'active':''}}" bindtap="switchData" data-type="1">数据类型1</button>
    <button class="{{activeIndex==2?'active':''}}" bindtap="switchData" data-type="2">数据类型2</button>
  </view>
  <view class="data">
    <block wx:if="{{activeIndex==1}}">这是数据类型1的数据</block>
    <block wx:if="{{activeIndex==2}}">这是数据类型2的数据</block>
  </view>
</view>
// index.js
Page({
  data: {
    activeIndex: 1
  },
  switchData: function (e) {
    var type = e.currentTarget.dataset.type
    this.setData({
      activeIndex: type
    })
    wx.redirectTo({
      url: '/pages/index/index#' + type
    })
  },
  onLoad: function (options) {
    var type = options.hash || 1
    this.setData({
      activeIndex: type
    })
  }
})

上述代码中,我们在跳转时使用了wx.redirectTo方法,因为我们需要关闭当前页面,并在当前页面栈中加入一个新页面,才能使用哈希参数传递数据。假如我们使用wx.navigateTo方法跳转,新页面会压在当前页面上,哈希参数传递数据时会修改原页面的哈希值,从而影响当前页面的显示。

index页面中,我们在onLoad生命周期函数中获取哈希参数,根据参数值切换不同的数据类型。

以上就是微信小程序页面跳转和数据传递的实例详解。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:微信小程序 页面跳转和数据传递实例详解 - Python技术站

(0)
上一篇 2023年6月11日
下一篇 2023年6月11日

相关文章

  • JS组件Bootstrap Table表格行拖拽效果实现代码

    Bootstrap Table是一个基于Bootstrap框架的网页表格插件,它提供了丰富的功能和灵活性,适合用于展示和处理大量数据。在Bootstrap Table中,通过行拖拽可以实现多个行的交换和排序,能够提供更方便快捷的用户体验。下面是实现Bootstrap Table表格行拖拽效果的完整攻略。 1. 安装Bootstrap Table和相关插件 首…

    JavaScript 2023年5月19日
    00
  • Typescript中函数类型及示例详解

    Typescript中的函数类型可以通过声明函数的参数类型、返回值类型及函数主体来限制函数的使用。在使用Typescript开发中,了解函数类型及其使用方法是非常重要的,下面介绍Typescript中函数类型的详细攻略。 一、函数类型的定义 在Typescript中,可以使用以下两种方式来定义函数类型: 1.函数声明式定义函数类型 如下例所示,我们使用声明式…

    JavaScript 2023年6月10日
    00
  • 零基础学习AJAX之AJAX的简介和基础

    零基础学习AJAX之AJAX的简介和基础 AJAX概述 AJAX(Asynchronous JavaScript And XML)指的是利用JavaScript的异步通信技术向后端服务器请求数据并更新页面的技术。它可以使页面部分刷新,而不是每一次都要刷新整个页面,从而增强了用户的体验。 AJAX的优点 减少了不必要的数据传输 优化了用户体验 减轻了服务器的负…

    JavaScript 2023年5月28日
    00
  • js实现星星闪特效

    首先介绍一下实现星星闪特效的基本思路,整个流程分为以下几步: 随机生成 N 个星星的位置和大小 再随机为每个星星设置一个动画延迟时间 使用 CSS3 动画为每个星星设置闪烁效果 可以通过 js 实现控制整个星空的暂停和继续 接下来,我将逐步详细讲解。 1. 随机生成 N 个星星的位置和大小 首先需要使用 js 随机生成一组星星的位置和大小,这可以使用循环来实…

    JavaScript 2023年6月10日
    00
  • javaScript产生随机数的用法小结

    下面是JavaScript产生随机数的用法小结: 1. Math.random()方法 在JavaScript中,我们可以使用Math.random()方法产生一个0到1之间的随机数。例如,在以下代码中,我们可以产生一个0到1之间的随机数,并将其乘以10得到一个0到10之间的随机数: let randNum = Math.random() * 10; con…

    JavaScript 2023年5月28日
    00
  • Jquery替换已存在于element上的event的方法

    在jQuery中,我们可以使用unbind()和bind()方法来替换已存在的事件。具体来说,可以按照以下步骤进行: 使用unbind()方法将原有的事件从元素上卸载掉。 使用bind()方法重新绑定需要替换的事件。 下面是两个示例: 示例1:替换已有的click事件 假设我们有一个按钮,已经绑定了click事件,在点击按钮时会弹出一个提示框。现在我们需要将…

    JavaScript 2023年6月10日
    00
  • JavaScript进阶练习及简单实例分析

    下面是“JavaScript进阶练习及简单实例分析”的完整攻略。 JavaScript进阶练习 递归 递归是指函数调用自身的一种行为。在JavaScript中,递归经常用来解决一些复杂问题,比如搜索和排序等。 示例1:计算阶乘 以下代码演示了如何使用递归计算阶乘: function factorial(n) { if (n === 0) { return 1…

    JavaScript 2023年5月18日
    00
  • js 中文汉字转Unicode、Unicode转中文汉字、ASCII转换Unicode、Unicode转换ASCII、中文转换&#XX的函数代码

    下面是详细的攻略。 js中文汉字转Unicode 在 js 中,可以使用以下代码将中文汉字转换为 Unicode 码: function chineseToUnicode(str) { var res = []; for (var i = 0; i < str.length; i++) { res[i] = ("00" + str.…

    JavaScript 2023年6月1日
    00
合作推广
合作推广
分享本页
返回顶部