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

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的函数调用和构造函数调用”的完整攻略。 函数调用 函数调用是指直接调用一个函数,不带 new 关键字。 基本语法 function funcName(param1, param2) { // 函数体 } // 调用函数 funcName(arg1, arg2); 示例说明1 下面是一个简单的函数调用示例: function…

    JavaScript 2023年5月27日
    00
  • 异步安全加载javascript文件的方法

    异步安全加载JavaScript文件是指在保证网页性能和用户体验的同时,确保JavaScript代码能够无误地执行。下面是异步安全加载JavaScript文件的方法: 1. 异步加载JavaScript文件 异步加载JavaScript文件可以使用HTML5中的script标签,并且设置async属性。这样浏览器会异步加载脚本,不会阻塞网页的渲染,同时脚本在…

    JavaScript 2023年5月27日
    00
  • 史上最全JavaScript数组去重的十种方法(推荐)

    下面是对于“史上最全JavaScript数组去重的十种方法(推荐)”这篇文章的详细讲解。 1. 引言 文章介绍了在JavaScript中使用十种方法对数组进行去重的详细解析,旨在让读者学会如何在实际开发中解决数组去重问题。 2. 数组去重方法 2.1 使用Set 使用Set可以很方便地对数组进行去重,因为Set内部的元素是唯一的,所以会自动去除重复元素。 c…

    JavaScript 2023年5月27日
    00
  • JavaScript面试题大全(推荐)

    感谢对本网站的关注和支持。以下是对于“JavaScript面试题大全(推荐)”的完整攻略: 简介 “JavaScript面试题大全(推荐)”是一篇完整的JavaScript面试题目合集,其中包含了常见的JavaScript面试题以及它们的详细答案解释。本文的题目难度从基础到高级不等,覆盖了面试中常见的各个知识点。该题集不仅适用于求职者准备面试,也适合企业HR…

    JavaScript 2023年5月27日
    00
  • javascript高级程序设计第二版第十二章事件要点总结(常用的跨浏览器检测方法)

    JavaScript高级程序设计第二版第十二章主要讲解了事件的相关知识点,其中包括事件的定义方式、事件处理程序、事件流、事件对象、跨浏览器问题的处理等内容。本章提供了一些实用的跨浏览器检测方法,以保证代码在各个浏览器平台下能够正常工作。下面是本章的要点总结: 事件处理程序 常见的事件处理程序有两种定义方式: HTML事件处理程序:直接将事件处理程序添加到HT…

    JavaScript 2023年5月27日
    00
  • JavaScript页面实时显示当前时间实例代码

    下面是JavaScript页面实时显示当前时间的攻略。 前提要求 在编写JavaScript实时显示时间的代码之前,需要了解一些前提知识,包括: HTML基础知识和标记语言 JavaScript基础知识和语法 Date()对象详解 实时显示当前时间代码步骤 以下是实时显示当前时间的实现步骤: 在HTML文件中创建一个用于显示时间的容器,为其设置一个ID,如下…

    JavaScript 2023年5月27日
    00
  • Vue设置keepAlive不生效问题及解决

    一起来详细讲解“Vue设置keepAlive不生效问题及解决”的完整攻略。 问题描述 在Vue开发中,我们通过设置keep-alive组件来缓存页面状态,避免重复渲染页面的性能瓶颈。但是,有时候我们可能会遇到这样的问题:设置了keep-alive却不生效,每次页面跳转都会重新渲染页面,这是为什么呢?如何解决这个问题呢? 原因分析 keep-alive组件默认…

    JavaScript 2023年6月11日
    00
  • JavaScript Math对象使用方法

    JavaScript中的Math对象是一个内置的对象,提供了许多数学计算方法和常数。Math对象中的所有方法和常数都是静态的,意味着你不需要创建一个Math对象就可以使用这些方法和常数。下面是Math对象中一些常用的方法和常数以及示例代码。 1. Math.PI Math.PI表示圆周率,它是一个不变的数值,约等于3.141592653589793。你可以通…

    Web开发基础 2023年3月30日
    00
合作推广
合作推广
分享本页
返回顶部