组件封装注意事项:

1、props:属性。是父容器给子组件参数传递的桥梁

2、this.$emit:事件。子组件通知父容器事件发生,并给父容器传递数据和参数

3、子组件中经常要用watch监控数据变化

思考题:如果父容器要调用子组件的方法实现一些操作,怎么办?让父容器直接调用方法吗?

(父组件中ref="player"     然后执行this.$refs.player.resetStatus()),虽然可以这样用,但是不建议这样做,

因为如果页面和组件之间可以随意调用属性和方法,如果组件比较多和复杂,页面调用逻辑将会变的非常混乱,代码会变的不可维护。

下面示例:一个播放器组件

<template>
<div style="display: flex;align-items:center;">
<div class="play" id="playpause" data-context="f" @click="handlplay">
<span>
<a-icon :type="iconfig?'pause':'caret-right'" class="icon"/>
</span>
</div> <div class="airMoniTitle" >
<p>{{timeTitle}}</p>
</div>
</div>
</template>
<script>
import {getDateYMDHMS,getDateYMDHM_CN,stringToDate,dateAdd} from '@utils/date'
export default {
name:'singleTime', //单时间组件,日期组件包含一个日期和一个小时,鼠标点击日期修改事件:changeEvent(time),
props:{
timeInterval:{
type:Number, //秒1000等于1秒,默认2秒
default:1500
},
initialDate:{//初始化日期,如果初始化不给值,则默认用当天日期,格式:yyyyMMddHHmmss
type:String
},
},
data() {
return {
timeStr:'',//时间字符串
timeTitle:'',//时间标题
iconfig:false, //false停止,true播放
Time:null, // 计时器
dataIndex:0,//播放序号
}
},
created(){
this.dataIndex=0;
if(this.initialDate)
{ //当他要初始化日期时
this.timeStr = this.initialDate;
this.timeTitle=getDateYMDHM_CN(stringToDate(this.timeStr));
}
else
{
this.timeStr = getDateYMDHMS(new Date(),'');
this.timeTitle=getDateYMDHM_CN(stringToDate(this.timeStr));
}
},
watch:{
initialDate(val){//当多次模拟的initialDate一样的时候watch不执行,这个时候要配合resetTime()一起使用
this.timeStr = val;
this.timeTitle=getDateYMDHM_CN(stringToDate(this.timeStr));
this.dataIndex=0;
},
},
methods: {
resetTime(time)
{
this.timeStr = time;
this.timeTitle=getDateYMDHM_CN(stringToDate(this.timeStr));
this.dataIndex=0;
},
resetStatus()//让播放器的状态重置
{
//console.log("reset");
clearInterval(this.Time)//清除计时器
this.Time = null;//设置为null
this.dataIndex=0;
this.iconfig=false;
},
handlplay()//播放
{
this.iconfig = !this.iconfig;
if (this.iconfig) {// 开始播放
this.Time = setInterval(() => {
if(this.dataIndex >= 13)
{//播放结束,从新开始播放
this.dataIndex=0;
let dates=dateAdd(stringToDate(this.timeStr),'f',this.dataIndex*5);
this.timeTitle=getDateYMDHM_CN(dates);
let timess=getDateYMDHMS(dates,''); this.$emit('playerTimeChange',{xh:(this.dataIndex+ 1),timestr:timess})
}
else
{//播放中
this.dataIndex = (this.dataIndex+ 1);
let dates=dateAdd(stringToDate(this.timeStr),'f',this.dataIndex*5);
this.timeTitle=getDateYMDHM_CN(dates);
let timess=getDateYMDHMS(dates,''); this.$emit('playerTimeChange',{xh:(this.dataIndex+ 1),timestr:timess})
} }, this.timeInterval)
} else {
clearInterval(this.Time)//清除计时器
this.Time = null;//设置为null
}
}
} }
</script>
<style lang="less" scoped>
#playpause{
font-family: iconfont;
font-variant: normal;
text-transform: none;
line-height: 1;
cursor: pointer;
font-size: 25px;
width: 60px;
height: 33px;
z-index: 999;
color: white;
background: rgba(0, 0, 0, 0.7);
border: 1px solid #888888;
span{
padding-top: 3px;
color: #fff;
text-align: center;
display: block;
}
}
.airMoniTitle{
width: 210px;
height: 33px;
z-index: 999;
background: rgba(0, 0, 0, 0.7);
font-size: 16px;
color: #fff;
text-align: center;
padding: 0 10px;
border: 1px solid #888888;
p{
line-height: 20px;
font-size: 16px;
font-weight: 500;
}
p:nth-child(1){
padding-top: 5px;
}
}
</style>
1、父组件中引入:
import TimePlayer from '@comp/timeLine/TimePlayer'
2、component申明:
components: {
TimePlayer,
},
3、标签使用:
<TimePlayer ref="player" :initialDate="selectedTime" @playerTimeChange="playerTimeChange"
style="z-index: 999;position: fixed;left: 250px;top: 100px;"/>

注意:组件中props下的属性,是父组件给子组件的传值,子组件中只能读取,不能修改。

vue2组件封装示例的更多相关文章

  1. Linux组件封装(五)一个生产者消费者问题示例

    生产者消费者问题是计算机中一类重要的模型,主要描述的是:生产者往缓冲区中放入产品.消费者取走产品.生产者和消费者指的可以是线程也可以是进程. 生产者消费者问题的难点在于: 为了缓冲区数据的安全性,一次 ...

  2. Vuejs 页面的区域化与组件封装

    组件的好处 当我用vue写页面的时候,大量的数据页面渲染,引入组件简化主页面的代码量,当代码区域块代码差不多相同时,组件封装会更加简化代码.组件是Vue.js最强大的功能之一. 组件可以扩展HTML元 ...

  3. ReactNative之从HelloWorld中看环境搭建、组件封装、Props及State

    开篇呢,先给大家问个好,今天是中秋节,祝大家中秋节快乐!!虽然是中秋节,但是木有回家还是总结一下知识点写写博客吧,想着昨天总结一下的,但是昨天和几个同学小聚了一下,酒逢知己总是千杯少呢,喝的微醺不适合 ...

  4. Vue.js 自定义组件封装实录——基于现有控件的二次封装(以计时器为例)

    在本人着手开发一个考试系统的过程中,出现了如下一个需求:制作一个倒计时的控件显示在试卷页面上.本文所记录的就是这样的一个过程. 前期工作 对于这个需求,自然我想到的是有没有现成的组件可以直接使用(本着 ...

  5. 04.ElementUI源码学习:组件封装、说明文档的编写发布

    0x00.前言 书接上文.项目经过一系列的配置,开发脚手架已经搭建完毕.接下来开始封装自定义组件.并基于 markdown 文件生成文档和演示案例. 后续文章代码会根据篇幅,不影响理解的情况下进行部分 ...

  6. Masa Blazor自定义组件封装

    前言 实际项目中总能遇到一个"组件"不是基础组件但是又会频繁复用的情况,在开发MASA Auth时也封装了几个组件.既有简单定义CSS样式和界面封装的组件(GroupBox),也有 ...

  7. Yii Framework 开发教程Zii组件-Tabs示例

    有关Yii Tab类: http://www.yiichina.com/api/CTabView http://www.yiichina.com/api/CJuiTabs http://blog.cs ...

  8. vue2组件懒加载浅析

    vue2组件懒加载浅析 一. 什么是懒加载 懒加载也叫延迟加载,即在需要的时候进行加载,随用随载. 二.为什么需要懒加载 在单页应用中,如果没有应用懒加载,运用webpack打包后的文件将会异常的大, ...

  9. 网络传输 buf 封装 示例代码

    网络传输 buf 封装 示例代码 使用boost库 asio // BufferWrapTest.cpp : 定义控制台应用程序的入口点. // #include "stdafx.h&quo ...

  10. Vue + Element UI 实现权限管理系统 (功能组件封装)

    组件封装 为了避免组件代码的臃肿,这里对主要的功能部件进行封装,保证代码的模块化和简洁度. 组件结构 组件封装重构后,试图组件结构如下图所示 代码一览 Home组件被简化,包含导航.头部和主内容三个组 ...

随机推荐

  1. 【已解决】启动Hmaster失败 master.HMaster: Unhandled exception. Starting shutdown.

  2. Access文件清理占用内存

    1.用access打开access.accdb文件 2.找到数据库工具的压缩和修复数据库,单击就行 3.数据库文件成功便成500K内存占用

  3. AT-abc347(C,D)

    AtCoder Beginner Contest 347 C - Ideal Holidays 这场做得最头疼的题 分析 容易想到先用$(d_i+a+b-1)%(a+b)+1$把$d_i$映射到$[1 ...

  4. C++调用Python-3:调用Python函数,返回字符串

    # mytest.pydef hello1(): print("this is test python print hello world 1") return "456 ...

  5. 定了!12支队伍进入HarmonyOS极客马拉松2023决赛

      12支队伍将在8月初,华为开发者大会(HDC.Togerther)上展开巅峰对决!

  6. Borůvka MST算法

    当我认为最MST(最小生成树)已经没有什么学的了,才发现世界上还有个这个kruskal和prim结合的玩意 Borůvka 运用并查集的思想,先将每一个初始点集初始化为有且只有自己的点集,然后每一次合 ...

  7. 力扣640(java)-求解方程(中等)

    题目: 求解一个给定的方程,将x以字符串 "x=#value" 的形式返回.该方程仅包含 '+' , '-' 操作,变量 x 和其对应系数. 如果方程没有解,请返回 "N ...

  8. 节省 58% IT 成本,调用函数计算超过 30 亿次,石墨文档的 Serverless 实践

    简介:石墨文档使用函数计算搭建文档实时编辑服务,由函数计算的智能调度系统自动分配执行环境,处理多用户同时编写文档带来的峰值负载,函数计算的动态扩缩容能力保障应用的可靠运行. ​ 作者 | 金中茜 对石 ...

  9. 【ESSD技术解读-02】企业级利器,阿里云 NVMe 盘和共享存储

    简介: 当前 NVMe 云盘结合了业界最先进的软硬件技术,在云存储市场,首创性同时实现了 NVMe 协议 + 共享访问 + IO Fencing 技术.它在 ESSD 之上获得了高可靠.高可用.高性能 ...

  10. 分布式系统一致性测试框架Jepsen在女娲的实践应用

    ​简介: 女娲团队在过去大半年时间里持续投入女娲2.0研发,将一致性引擎和业务状态机解耦,一致性引擎可支持Paxos.Raft.EPaxos等多种一致性协议,根据业务需求支撑不同的业务状态机.其中的一 ...