uniapp跨页面传值uni.$emit和uni.$on的使用及踩坑实战

yizhihongxing

uniapp 跨页面传值:uni.$emit 和 uni.$on 的使用

在一个完整的 uniapp 应用程序中,存在着多个页面组成的应用。有时候我们需要在不同的页面之间传递数据,这时候就要用到 uniapp 提供的跨页面传值方式 —— uni.$emit 和 uni.$on。

1. uni.$emit 和 uni.$on 概述

uni.$emit 和 uni.$on 是两个方法,它们分别代表了“触发事件”和“监听事件”的功能。在 uniapp 应用程序中,我们可以在某个页面(广义上的组件)中使用 uni.$emit 方法去触发一个事件,再在另一个页面(广义上的组件)中使用 uni.$on 方法来监听这个事件,从而获得从触发事件传递的数据。

使用 uni.$emit 和 uni.$on 有以下三个优点:

  • 可以实现跨页面传递数据的功能
  • 不同于全局变量,它们是典型的基于事件模型的架构
  • 对于应用程序的性能没有影响

2. uni.$emit 和 uni.$on 的使用实现

2.1 uni.$emit 的使用

uni.$emit 方法主要用于触发事情、传递数据。在页面或组件内使用 uni.$emit 方法的代码形式为:

uni.$emit('eventName', data)
  • eventName: String 类型,自定义的事件名称。
  • data: 任何类型数据,需要传递的数据。

下面是一个示例,展示了如何在页面A中触发事件并传值,供页面B消费。

// PageA.vue

export default {
  data() {
    return {
      message: 'message from PageA',
    };
  },
  methods: {
    sendMessage() {
      uni.$emit('messageFromA', this.message);
    },
  },
};

这里,我们在 PageA 中定义了一个 message 变量,用于存放需要传递的数据。在 sendMessage 方法中使用了 uni.$emit 方法,并传递了事件名称 messageFromA 和要传递的数据 this.message

2.2 uni.$on 的使用

uni.$on 方法主要用于监听事件,实现接收被触发的事件和传递的数据。在页面或组件内使用 uni.$on 方法的代码形式为:

uni.$on('eventName', function(data) {
  // 处理被触发事件并传递的数据
})
  • eventName: String 类型,已定义的事件名称。
  • data: 任何类型数据,被触发事件携带的数据。

下面是一个示例,展示了如何在页面B中监听页面A触发的事件并获取传递的数据。

// PageB.vue

export default {
  data() {
    return {
      message: '',
    };
  },
  created() {
    uni.$on('messageFromA', (data) => {
      this.message = data;
      console.log('message received from PageA: ' + this.message);
    });
  },
};

这里我们在 PageB 中使用 uni.$on 方法,监听事件 messageFromA,当事件被触发时会打印接收到的数据。

3. 踩坑实战:uni.$emit 和 uni.$on 的常见问题

3.1 uni.$emit 和 uni.$on 需要在同一级组件中使用

uni.$emit 方法和 uni.$on 方法都需要在同一级组件中使用。如果它们被在不同的组件层次中使用,监听层层嵌套的情况,则会由于组件作用域的问题而无法触发和监听事件。

3.2 uni.$emit 和 uni.$on 必须使用相同的事件名称

在使用 uni.$emit 方法时,需定义一个事件名称。在使用 uni.$on 方法来监听这个事件时,事件名称应与在 emit 方法时定义的事件名称一致,否则监听将失效。

3.3 uni.$on 必须在组件的生命周期函数中调用

uni.$on 方法必须在组件的生命周期函数中调用,创建组件时、mounted 时,或者在 watch 等方法中都是无法正常使用的。

4. 总结

本篇文章详细讲解了 uniapp 中使用 uni.$emit 和 uni.$on 实现跨页面传值的方法,提供了两个示例供读者参考,并总结了常见问题和注意事项。

使用 uni.$emit 和 uni.$on 时,需要记得它们必须在同一级组件中使用,使用相同的事件名称,并且 uni.$on 方法必须在组件的生命周期函数中调用。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:uniapp跨页面传值uni.$emit和uni.$on的使用及踩坑实战 - Python技术站

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

相关文章

  • javascript学习笔记之函数定义

    下面是关于“javascript学习笔记之函数定义”的完整攻略。 函数定义 函数的定义方式 JavaScript 中定义函数的方式有两种:函数声明和函数表达式。 函数声明 函数声明是通过 function 关键字定义的函数,它可以在任何位置被调用。例如: function add(a, b) { return a + b; } 函数声明定义的函数会被提升到作…

    JavaScript 2023年5月18日
    00
  • Js遍历键值对形式对象或Map形式的方法

    当我们需要遍历键值对形式的对象或Map时,可以使用JavaScript中的for…in循环和forEach方法。 for…in循环 for…in循环可以遍历对象和Map中的所有键值对,格式如下: for(var key in obj/map) { // 对每个键值对进行操作 } 其中,key是对象/Map中的每个键,obj/map是我们需要遍历的…

    JavaScript 2023年5月27日
    00
  • js 与或运算符 || && 妙用

    下面是关于“JS 与或运算符 || && 妙用”的完整攻略,包含两个示例说明: 一、JS 与或运算符概述 在JS中,&&和||是常用的逻辑运算符,它们可以将多个条件判断合并在一起。在编写条件判断语句时,通过巧妙地使用逻辑运算符,可以让代码更加简洁、易懂,提高开发效率。 1.1 逻辑与运算符(&&) 逻辑与运算符…

    JavaScript 2023年5月18日
    00
  • 使用JS获取当前地理位置方法汇总

    介绍:本文主要介绍使用JavaScript获取当前地理位置的方法,并提供了相关的代码示例,帮助开发人员更快地集成获取地理位置的功能。 HTML5 Geolocation API HTML5 Geolocation API是W3C定制的用于获取用户地理位置信息的标准API,它可以使用纯JavaScript来获取用户的GPS坐标信息,这是一种免费的获取位置的方法…

    JavaScript 2023年6月11日
    00
  • javascript客户端遍历控件与获取父容器对象示例代码

    题目涉及到两个主题:JavaScript客户端遍历控件和获取父容器对象。下面,我将从以下几个方面为大家提供一份完整的攻略: JavaScript客户端遍历控件概述; 遍历控件示例说明; 获取父容器对象概述; 获取父容器对象示例说明。 1. JavaScript客户端遍历控件概述 在JavaScript中,我们经常需要访问页面中的控件对象。这些控件对象通常是通…

    JavaScript 2023年6月10日
    00
  • JavaScript累加、迭代、穷举、递归等常用算法实例小结

    JavaScript累加、迭代、穷举、递归等常用算法实例小结 累加 累加即将一个数字序列中的所有数字相加。 function sum(numbers) { let result = 0; for (let i = 0; i < numbers.length; i++) { result += numbers[i]; } return result; }…

    JavaScript 2023年5月28日
    00
  • 手写TypeScript 时很多人常犯的几个错误

    当我们手写TypeScript时,很容易会犯一些常见的错误。在这里,我来分享一些常见的错误,并提供一些示例说明和解决方案。 1. 类型声明不正确 在TypeScript中,类型声明非常重要,而类型声明不正确则会导致代码中的错误。例如: function add(num1, num2) { return num1 + num2; } let result = …

    JavaScript 2023年6月10日
    00
  • JavaScript下一版本标准ES6的Set集合使用详解

    JavaScript下一版本标准ES6的Set集合使用详解 什么是Set集合 Set是一种新的数据结构,它类似于数组,但是成员的值都是唯一的,没有重复的值。Set有以下特点: Set内部使用Hash表存储元素,导致元素的顺序不是按照插入顺序保存,但是一组具有相同内容的对象在Set内只有一份。 Set添加元素时,不会进行类型转换,比如1和”1″是两个不同的值。…

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