• uniapp页面通讯-uni.$emit、uni.$on、uni.$once、uni.$off


    uni.$emit(eventName,OBJECT)

    触发全局的自定义事件。附加参数都会传给监听器回调。

    uni.$on(eventName,callback)

    监听全局的自定义事件。事件可以由 uni.$emit 触发,回调函数会接收所有传入事件触发函数的额外参数。

    uni.$once(eventName,callback)

    监听全局的自定义事件。事件可以由 uni.$emit 触发,但是只触发一次,在第一次触发之后移除监听器。

    uni.$off([eventName, callback])

    移除全局自定义事件监听器。

    注意事项

    • uni.$emit、 uni.$on 、 uni.$once 、uni.$off 触发的事件都是 App 全局级别的,跨任意组件,页面,nvue,vue 等
    • 使用时,注意及时销毁事件监听,比如,页面 onLoad 里边 uni.$on 注册监听,onUnload 里边 uni.$off 移除,或者一次性的事件,直接使用 uni.$once 监听

     使用场景

    进入app,是未登陆状态,需要在我的页面点击登陆,进入登陆页面进行登陆。登陆成功之后,返回到我的页面,实时显示登陆后的用户信息。

    1、在我的页面,监听事件

    1. <template>
    2. <view class="content">
    3. <text v-if="usnerinfo">{{usnerinfo.userName}}</text>
    4. <button v-else @click="toLogin">去登录</button>
    5. </view>
    6. </template>
    7. <script>
    8. export default {
    9. data() {
    10. return {
    11. usnerinfo: null
    12. }
    13. },
    14. // 我的页面
    15. onLoad() {
    16. // 监听事件,使用 uni.$emit 触发事件后,对应的 uni.$on 就会监听到事件触发,在回调中去执行相关的逻辑。
    17. uni.$on('login', (usnerinfo) => {
    18. this.usnerinfo = usnerinfo;
    19. })
    20. },
    21. onUnload() {
    22. // 移除监听事件
    23. uni.$off('login');
    24. },
    25. methods: {
    26. toLogin() {
    27. uni.navigateTo({
    28. url: '/pages/a/a'
    29. })
    30. },
    31. }
    32. }
    33. </script>

    因为事件监听是全局的,所以使用 uni.$on ,需要使用 uni.$off 移除全局的事件监听,避免重复监听。

    2、在登录页,触发事件 

    1. <template>
    2. <view class="content">
    3. <view class="data" @click="doLogin">触发方法,获取用户信息</view>
    4. </view>
    5. </template>
    6. <script>
    7. export default {
    8. data() {
    9. return {
    10. usnerinfo: null
    11. }
    12. },
    13. // 我的页面
    14. onLoad() {},
    15. methods: {
    16. doLogin() {
    17. // 登陆页面
    18. uni.$emit('login', {
    19. userName: 'lzzzzzzzzzzzzzzzzzzzzz',
    20. login: true
    21. });
    22. uni.navigateBack({})
    23. }
    24. }
    25. }
    26. </script>

    使用 uni.$emit 触发事件后,对应的 uni.$on 就会监听到事件触发,在回调中去执行相关的逻辑。

  • 相关阅读:
    CSS之grid布局
    HTML数字倒计时效果附源码
    [强化学习总结6] actor-critic算法
    Dart(5)-内置类型
    39-Jenkins-获取构建人信息
    初探富文本之CRDT协同算法
    springMVC数据校验
    前端入门--CSS篇
    2512.奖励最顶尖的K名学生
    UI自动化测试框架:PO 模式+数据驱动(超详细)
  • 原文地址:https://blog.csdn.net/LzzMandy/article/details/126583289