首页 > 其他分享 >uniapp 组件中使用页面的生命周期(vue2)

uniapp 组件中使用页面的生命周期(vue2)

时间:2023-06-01 20:25:39浏览次数:42  
标签:uniapp mpType pageEvent call vue2 组件 loopOptions page 页面

用于直接在组件中使用onLoad,onBackPress等

因为之前在写App的时候有许多弹窗,希望可以在有弹窗的时候先关闭弹窗,没有弹窗在执行返回事件,因此需要在页面onBackPress里面写很多判断,因此找了一些方法,写了可以直接在组件中调用页面生命周期的方法!

使用mixin this.$children 去循环查询子组件中是否有pageEvent(自定义的可以写其他变量)方法,如果有就执行页面中含有的方法生命周期方法

 

1、新建ComponentsLifeCycle.js文件

/**
 * @description 循环指定选项
 * @param {String} key 选项
 * @param {Object} param 参数
 */
const loopOptions = function(key, param = {}) {
    if (this.$children) {
        //循环子组件列表
        for (let i = 0; i < this.$children.length; i++) {
            let pageEvent = this.$children[i].$options['pageEvent'];
            //判断子组件是否有pageEvent选项
            if (pageEvent) {
                if (typeof pageEvent === 'object') {
                    if (pageEvent[key]) {
                        if (typeof pageEvent[key] === 'function') {
                            let reEv = pageEvent[key].call(this.$children[i], param);
                            //返回键判断,如果有组件返回true,阻止返回并停止循环
                            if (reEv === true) return reEv;
                        } else console.error('ComponentLifeCycle选项错误:' + key + '必须为function类型的选项\n 组件路径->' + this.$options
                        .__file);
                    }
                } else {
                    console.error('ComponentLifeCycle配置错误:pageEvent选项必须为object类型\n 组件路径->' + this.$options.__file);
                }
            }
            //递归查询深层次的组件
            let e = loopOptions.call(this.$children[i], key, param);
            if (e === true) return e;
        }
    }
}


export default {
    // 第一次触发不了,因为onshow时候组件还没加载完成
    onShow() {
        if (this.mpType === "page") loopOptions.call(this, 'onShow');
    },
    onHide() {
        if (this.mpType === "page") loopOptions.call(this, 'onHide');
    },
    onReachBottom() {
        if (this.mpType === "page") loopOptions.call(this, 'onReachBottom');
    },
    onPageScroll(e) {if (this.mpType === "page") loopOptions.call(this, 'onPageScroll', e);
    },
    onPullDownRefresh() {
        if (this.mpType === "page") loopOptions.call(this, 'onPullDownRefresh');
    },
    onBackPress(e) {
        if (this.mpType === "page") return loopOptions.call(this, 'onBackPress', e);
    },
    onReady() {
        if (this.mpType === "page") return loopOptions.call(this, 'onReady');
    },
    onResize() {
        console.log(123)
        if (this.mpType === "page") return loopOptions.call(this, 'onResize');
    },
    onTabItemTap(e) {
        if (this.mpType === "page") return loopOptions.call(this, 'onTabItemTap', e);
    }
}

 

2、在main.js中使用mixin混入

 Nvue有时候会不触发,那么可以直接去Nvue的页面中直接引入也是可以的

import ComponentsLifeCycle from "xxx/ComponentsLifeCycle.js"

Vue.mixin(mixin);

 

3、这样就可以在组件中使用了

组件中使用

父组件需要定义一个data变量

这样就可以了!

 

标签:uniapp,mpType,pageEvent,call,vue2,组件,loopOptions,page,页面
From: https://www.cnblogs.com/symlove/p/17450067.html

相关文章

  • 小程序刷新当前页面
    (6条消息)微信小程序页面刷新的方法_小程序如何刷新_fuf_xyxnxss的博客-CSDN博客......
  • 输入URL到页面渲染过程
    1.输入URL;2.浏览器查找当前URL是都存在缓存并且比较是否过期;3.DNS解析对呀的IP地址;首先会在本地的hosts文件中查看,若没有则需要通过DNS(域名分布系统)服务器查找;4.根据IP地址建立TCP链接(进行三次握手);5.发起http请求;6.服务器处理请求,浏览器接收http响应(HTML文件);7.关闭TCP连接......
  • uniapp专题学习(四)
    前言在uniapp专题学习(三)中学习到的知识点有计算属性computed、计算属性computed和方法methods的区别、vue语法的自定义组件、pops的父子组件参数传递。native修饰符如果想在自定义组件执行原生的事件就需要用native来修饰假设我已经定义好了自定义组件,我想触发click事件,就需......
  • 登录页面
    登录页面可以用ajaxpost提交,提交之前用公钥加密(在服务器端用私钥解密)不允许重复提交用户名和密码需要校验如果用户名和密码输入错误,下次输入时需要填写验证码(防止程序自动攻击服务器)......
  • vue2项目中使用dhtmlx gantt甘特图插件
    官网示例地址:https://docs.dhtmlx.com/gantt/samples/可以在这里查看绑定数据的格式安装依赖npminstalldhtmlx-gantt--save创建一个甘特图组件<template><el-scrollbarref="gantt_scrollbar"class="gantt-box"><divref="gantt"class=&qu......
  • 前后端分离的架构,前端使用Vue2.6.10,后端使用SpringBoot2.0.0的ERP实现
    技术架构技术框架:SpringBoot2.0.0+Mybatis1.3.2+SLF4J1.7+Vue2.6.10+Ant-Design-Vue1.5.2+Mysql5.7+Redis运行环境:jdk8+IntelliJIDEA+maven+宝塔面板本地部署:1.小皮面板创建一个数据库,导入jsh_erp.sql文件至数据库中,该文件在后端程序的docs文件夹下。2.使用......
  • 客制化404页面设计上需要注意几点?
    404页面设计注意事项:1、首先404页面要保持网站统一模板,设计风格,logo及名称,不要让用户弄不清自己到了哪个网站上。2、404页面应该在最醒目的位置显示错误信息,明确提示用户,要访问的页面不存在。还可以加上几点可能性,如页面已删除,用户输入了错误的地址,链接中的地址错误,页面已转移到新......
  • uniapp+vue3+ts 使用pinia报错
    "hasInjectionContext"isnotexportedby"node_modules/vue-demi/lib/index.mjs",importedby"node_modules/pinia/dist/pinia.mjs".11:36:19.397at../node_modules/pinia/dist/pinia.mjs:6:9 解决方法:把pinia降级 先删除pinianpmunipin......
  • Vue2实现双向数据绑定原理
    Vue2.x采用数据劫持结合发布订阅模式(PubSub模式)的方式,通过Object.defineProperty来劫持各个属性的setter、getter,在数据变动时发布消息给订阅者,触发相应的监听回调。当把一个普通Javascript对象传给Vue实例来作为它的data选项时,Vue将遍历它的属性,用Object.defineProp......
  • WEB页面前后端开发步骤
    WEB页面前后端开发步骤 ......