组件封装注意事项:

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. Python爬虫爬取ECVA论文标题、作者、链接

    1 import re 2 import requests 3 from bs4 import BeautifulSoup 4 import lxml 5 import traceback 6 imp ...

  2. #树形dp#C 树上排列

    分析 设\(dp[x][i]\)表示以\(x\)为根的子树中\(x\)的排名为\(i\)的方案数, 然后枚举子节点转移即可,Talk is cheap,Show me the code 代码 #inc ...

  3. 掌握 C++ 编译过程:面试中常见问题解析

    C++是一种高级编程语言,但是计算机并不能直接理解它.因此,需要将C++代码翻译成计算机可以理解的机器语言.这个过程就是编译过程,是C++程序从源代码到可执行文件的转换过程,包括预处理.编译.汇编和链 ...

  4. C++ 虚函数详解:多态性实现原理及其在面向对象编程中的应用

    在面向对象的编程中,多态性是一个非常重要的概念.多态性意味着在不同的上下文中使用同一对象时,可以产生不同的行为.C++是一种面向对象的编程语言,在C++中,虚函数是实现多态性的关键 什么是虚函数 虚函 ...

  5. 震撼!这个Python模块竟然能自动修复代码!

    说到Python的强大的地方,那真的是太多了,优雅.简洁.丰富且强大的第三方库.开发速度快,社区活跃度高等,所以才使得Python才会如此的受欢迎. 今天给大家介绍一个特别暴力的Python库: Fu ...

  6. Windows cmd命令 -- 记录

    # 清屏 >> cls # 查看进程 >> tasklist # 结束进程 >> tskill <pid> # 查询WIFI列表所有WIFI的信息 &g ...

  7. Windows Server之KMS

    KMS是什么? KMS全称是Key Management Service,本身就是微软官方提供的一种激活方式,通常用于大型组织客需要激活的客户端数量不固定的情况. 正常情况下,激活Windows系统需 ...

  8. async与await暂停作用

    1. async function Request () { await new Promise(res => { setTimeout(() => { console.log(1) re ...

  9. CF1535F String Distance

    \(CF1535F\ \ String\ Distance\) 题意 给 \(n\) 个长度均为 \(len\) 的字符串 \(T_1,T_2,\dots T_n\),定义 \(f(a,b)\) 为将 ...

  10. 基于 K8s 的交付难题退退退!| 独家交付秘籍(第三回)

    简介: 经过仔细研究,我们发现秘籍中提到许多帮助解决交付问题的招式,而其中一个让我们印象很深,是关于在原有社区版容器底座 Kubernetes(以下简称 K8s)的基础上,对容器底座进行改进,可更好的 ...