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数组索引 数组是Javascript中的一种非常常见的数据类型,数组索引是访问数组中的元素的主要方式。在本文中,我们将讨论Javascript数组索引相关的概念,方法以及常见问题。 数组索引的概念 在Javascript中,数组索引是一个数字,用于在数组中标识元素位置。数组的第一个元素的索引值为0,其余元素的索引值是以0递增的。 例如…

    JavaScript 2023年5月27日
    00
  • vue element-ui使用required进行表单校验时自定义提示语问题

    在Vue中使用Element-UI进行表单校验时,可以使用required属性来进行必填校验。然而,在默认情况下,当该表单项未填写时,Element-UI会输出“该字段不能为空”的默认提示语,而有时候我们希望自定义提示语。下面是自定义提示语的攻略: 使用label属性自定义提示语 如果我们不想使用默认提示语,可以使用label属性来自定义提示语。在使用lab…

    JavaScript 2023年6月10日
    00
  • 一文了解你不知道的JavaScript闭包篇

    一文了解你不知道的JavaScript闭包篇是一篇非常详细的关于JavaScript闭包的介绍和讲解,下面我将为您详细解读。 什么是闭包? 在JavaScript中,闭包(Closure)指的是函数和该函数能够访问到的外部词法环境(Lexical Environment)的组合。通俗地说,闭包是指在函数内部能够访问到函数外部的变量的函数。 闭包的作用 闭包的…

    JavaScript 2023年6月10日
    00
  • JS document文档的简单操作完整示例

    JS document 文档是操作网页元素的核心接口。它可以通过 js 代码来获取、修改和新增 HTML 元素,以实现网页动态变化。接下来将通过两个示例介绍基本的 JS document 操作。 示例1:获取元素 在 HTML 文档中,标签是最基本的元素,通过 JS document 可以获取 HTML 中指定标签的元素。获取标签元素需要使用 getElem…

    JavaScript 2023年6月10日
    00
  • JS锚点的设置与使用方法

    当我们需要在一个较长的网页中跳转到指定页面位置或细节处的时候,往往会使用到JS锚点。JS锚点可以通过设置页面中元素的id属性,实现在页面内跳转到指定元素的效果。下面通过以下几个方面来详细讲解JS锚点的设置与使用方法。 设置JS锚点 1.设置元素的id属性 在HTML中,我们可以通过在指定的元素上设置id属性的值,来为该元素创建一个唯一的标识符。例如: &lt…

    JavaScript 2023年6月10日
    00
  • 通过JS 获取Mouse Position(鼠标坐标)的代码

    获取鼠标坐标是JavaScript中的常见需求之一,可以通过鼠标事件对象获取鼠标相对于页面的坐标位置。 以下是获取鼠标位置的代码: document.addEventListener(‘mousemove’, (event) => { const mouseX = event.clientX; const mouseY = event.clientY;…

    JavaScript 2023年6月10日
    00
  • Js实现Base64编码与解码

    Js实现Base64编码与解码的完整攻略如下: Base64编码与解码 Base64是一种用64种字符来表示二进制数据的编码方式。它常用于在URL、Cookie、网页传输等场合下,将原始数据转换为纯文本的形式来进行传输或存储。在JavaScript中,可以通过自带的atob和btoa函数来实现Base64的编解码。 Base64编码 在JavaScript中…

    JavaScript 2023年5月19日
    00
  • html数组字符串拼接的最快方法

    HTML数组字符串拼接是Web开发中的常见任务。优化此过程可提高网页性能,提高页面响应能力和用户体验。在本文中,我将重点介绍针对HTML数组字符串拼接的最佳实践和方法。 方法一:使用模板字符串 ES6引入的模板字符串可以使用${}实现字符串替换,简化了字符串拼接的操作,同时提高了性能和代码的可读性。在HTML数组字符串拼接中,使用模板字符串可以有效地减少代码…

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