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

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

一、页面跳转

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

  • 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日

相关文章

  • JavaScript笛卡尔积超简单实现算法示例

    JavaScript笛卡尔积超简单实现算法示例:完整攻略 什么是笛卡尔积 笛卡尔积是组合数学中的一种运算,指的是将两个集合看作是笛卡尔坐标系上的两个维度,然后将它们组合在一起,形成一个新的集合的所有可能的组合。 举个例子,假设集合A={1, 2},集合B={x, y},它们的笛卡尔积就是{(1, x), (1, y), (2, x), (2, y)}。 在编…

    JavaScript 2023年5月28日
    00
  • JavaScript操作HTML元素和样式的方法详解

    这里给您详细讲解一下“JavaScript操作HTML元素和样式的方法详解”。 1. 操作HTML元素 在JavaScript中,我们可以通过以下方法来获取和操作HTML元素: 1.1 通过ID获取元素 我们可以使用document.getElementById方法来获取指定ID的元素,该方法返回一个Element对象,我们可以通过该对象来对元素进行操作。 …

    JavaScript 2023年6月10日
    00
  • 超详细的javascript数组方法汇总

    来讲一下“超详细的JavaScript数组方法汇总”的完整攻略。 一、概述 本文总结了 JavaScript 数组常用的方法,包括改变原数组的方法和不改变原数组的方法。这些方法可以操作数组中的数据和数据类型,常用于数据处理、排序、循环等操作。阅读完此文,你将会掌握 JavaScript 数组操作的方方面面。 二、改变原数组的方法 JavaScript 中可改…

    JavaScript 2023年5月27日
    00
  • JavaScript利用多彩线条摆出心形效果的示例代码

    下面我来详细讲解JavaScript利用多彩线条摆出心形效果的示例代码的完整攻略。 简介 本示例代码利用了HTML5中的<canvas>标签和JavaScript的requestAnimationFrame()方法,通过不断绘制直线最终呈现出心形效果。代码较为简单,但需要一定的数学基础。 准备工作 在HTML页面中添加一个<canvas&g…

    JavaScript 2023年6月10日
    00
  • Javascript数组的 splice 方法详细介绍

    Javascript数组的 splice 方法详细介绍 splice() 是 Javascript 数组对象的一个方法,用于在数组中增加或删除元素。该方法会直接修改原始数组。 语法 array.splice(start[, deleteCount[, item1[, item2[, …]]]]) 参数解释 start: 修改的起始位置,必传参数。 del…

    JavaScript 2023年5月27日
    00
  • JavaScript内置对象介绍

    JavaScript内置对象介绍 JavaScript是一种高级的、解释型语言,主要用于在Web页面中添加交互行为。它提供了许多内置对象,方便我们在代码中调用对应的方法,从而实现各种功能。本文将介绍JavaScript中一些常用的内置对象。 1. String对象 String对象用于处理字符串。它支持许多字符串操作方法,例如:indexOf、substri…

    JavaScript 2023年5月27日
    00
  • JS之Date对象和获取系统当前时间详解

    当我们开发网站时,经常需要操作时间。JavaScript中提供了Date对象,可以方便地进行时间相关的操作。 Date对象 Date对象可以获取当前时间,也可以设置指定时间,提供了很多方法操作时间。 获取当前时间 获取当前时间可以使用Date对象的构造函数不传递任何参数,也可以使用now方法。 // 使用构造函数获取当前时间 let now1 = new D…

    JavaScript 2023年5月27日
    00
  • 跨站攻击之实现Http会话劫持的手法

    跨站攻击(Cross-Site Attack)又称为XSS攻击,是指攻击者在网页中插入恶意脚本,使受害者在访问网页时,网页中的恶意脚本被执行从而攻击受害者。跨站攻击有很多种形式,其中之一就是Http会话劫持,下面我们来看看这种手法的攻略。 什么是Http会话劫持 Http会话劫持是指攻击者在网站上注入一段代码,通过劫持用户已经建立的会话从而获取用户的权限、获…

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