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

yizhihongxing

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

一、页面跳转

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

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

相关文章

  • AngularJs expression详解及简单示例

    下面是详细的“AngularJs expression详解及简单示例”的攻略。 什么是AngularJS表达式 AngularJS表达式是一个AngularJS模板内的小片段,用于绑定到AngularJS编译器$compile的作用域属性。表达式以{{ expression }}的形式出现在双括号中,它们绑定到当前作用域上的JavaScript变量。通俗点说…

    JavaScript 2023年6月11日
    00
  • Js 正则表达式知识汇总

    Js 正则表达式知识汇总 什么是正则表达式? 正则表达式是一种用来匹配字符串模式的工具,它由字符和特殊字符组成。在JavaScript中,可以使用RegExp对象来表示正则表达式模式。正则表达式可以用来在字符串中查找匹配的文本、替换文本、验证内容格式等。 正则表达式的语法 正则表达式语法很强大,要掌握所有的用法需要花费一定的时间和精力。下面是一些常见的元字符…

    JavaScript 2023年6月10日
    00
  • js获取TreeView控件选中节点的Text和Value值的方法

    获取TreeView控件选中节点的Text和Value值,可以使用JavaScript来实现。具体方法如下: 方法一:利用ASP.NET自身提供的控件属性 ASP.NET的TreeView控件提供了一个SelectedNode属性,可以获取选中的节点。在此基础上,我们可以通过SelectedNode的Text和Value属性获取选中节点的文本和值。 // 获…

    JavaScript 2023年6月10日
    00
  • 浅谈JavaScript for循环 闭包

    接下来我将详细讲解“浅谈JavaScript for循环 闭包”的完整攻略。 1. 什么是 for 循环? for 循环是 JavaScript 中最常见的循环。它允许我们重复执行一个代码块特定的次数。 for 循环的语法格式如下: for (initialization; condition; update) { // 执行循环的代码 } initiali…

    JavaScript 2023年6月10日
    00
  • JavaScript中变量提升和函数提升的详解

    请听我讲解“JavaScript中变量提升和函数提升的详解”。 什么是变量提升和函数提升 在JavaScript中,变量和函数可以被提升,这意味着它们可以在代码执行之前就被声明和定义。而不像其他编程语言,必须先声明再使用。 变量提升当JS引擎扫描JS代码时,会将变量的声明(var/let/const)提前至当前范围的最顶部。这被称为变量提升。但是,变量的值不…

    JavaScript 2023年5月27日
    00
  • JS面试之对事件循环的理解

    JS面试之对事件循环的理解 事件循环是 JavaScript 事件模型的核心,对于理解 JavaScript 的异步编程至关重要。事实上,事件循环是 JavaScript 成功的关键之一。 什么是事件循环? JavaScript 是一种单线程编程语言。它有且只有一个主线程,因此只能同时执行一个任务。 事件循环是 JavaScript 异步编程的解决方案之一,…

    JavaScript 2023年5月28日
    00
  • javascript中JSON.parse()与eval()解析json的区别

    在JavaScript中,我们经常需要解析JSON数据,通常可以使用JSON.parse()和eval()这两个方法来实现。虽然它们的作用都是将JSON字符串转换为JavaScript对象,但它们之间还是存在一些差别的。 JSON.parse() JSON.parse()是JSON字符串转换为JavaScript对象的最佳选择。它使用JSON格式编码的字符串…

    JavaScript 2023年5月27日
    00
  • 利用location.hash实现跨域iframe自适应

    实现跨域iframe自适应的首要问题是通过JavaScript获取iframe的高度。然而,由于同源策略的限制,无法直接获取跨域iframe的高度。为了解决这个问题,我们可以利用iframe的hash值和window.location.hash属性。 具体实现步骤如下: 1.在iframe页面中设置hash值 在iframe页面中添加以下代码: // 获取i…

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