vue-like(点赞)组件的封装

写仿豆瓣的时候经常会遇到一个点赞的按钮,点一下赞了 它的样式也改变了,然后再点一下还可以取消。于是打算封装一个点赞的组件


刚开始封装的时候将每次点赞和取消点赞的这个逻辑写到了组件内部,后来再看感觉很不合理,所以重新重构了一下。

template:

<div id="like" :class="like?'active':''" @click="change">

<span class="img"></span><span>{{count}}</span>

</div>

img是显示的小心心的点赞图标,后面是点赞数量,因为想到有些点赞按钮可能没有数量,所以count设置为非必填项。

style:

#like{

width: 100px;

height: 30px;

line-height: 30px;

display: flex;

align-items:center;

justify-content:center;

font-size: 15px;

margin: 30px auto;

color: #42bd56;

border: 1px solid #42bd56;

}

#like .img{

margin-right: 4px;

width: 20px;

height: 20px;

background:url(https://img3.doubanio.com/f/talion/c689ab2369da387f2cb0d4da4a22614d7f048bf9/pics/card/ic_heart_green.svg) no-repeat;

}

#like.active{

color: #333;

border: 1px solid #bfbfbf;

}

#like.active .img{

background-image: url(https://img3.doubanio.com/f/talion/0129352875382ff0544020161709c2ae9b00c737/pics/card/ic_heart_red.svg);

}

样式当时写的是比较随意的,点赞的小图标是直接用的豆瓣的图片。。

script:

分开说吧

props 

props:{

count:{

type: Number,

required: false,

},

like:{

type:Boolean,

required:true,

default:false

}

}

因为count可能没有,所以非必填,like涉及到显示效果,给他设置了个默认值。

正常来说其实这个组件中是不需要写逻辑的,但是这里有个问题就是vue2.0中给自定义组件设置原生事件一定要加native修饰符,那如果使用的时候父组件忘记了呢?所以这里给这个组件设定了个点击事件

这个change方法里其实只做了一件事

change:function () {

this.$emit('click');

}

就是触发父组件传递进来的方法。

所以父组件如果这样使用

<div class="like">

<Like-it @click="changeValue" count="15" :like="like"></Like-it>

</div>

也不会有任何问题了。

当然如果确保可以在父组件中使用@click.native来触发原生事件,则组件的上面的操作都可以省略了。

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 第一部分 HTML&CSS整理答案 1. 什么是HTML5? 答:HTML5是最新的HTML标准。 注意:讲述HT...
    kismetajun阅读 29,083评论 1 45
  • 1. 前言 前端圈有个“梗”:在面试时,问个css的position属性能刷掉一半人,其中不乏工作四五年的同学。在...
    YjWorld阅读 4,991评论 5 15
  • 在学习weex的过程中看到了常用标签相关的内容,为了自己以后能够快速查阅特整理出此文档。 a 简介组件定义了指向某...
    TyroneTang阅读 4,874评论 1 3
  • 前端开发面试题 <a name='preface'>前言</a> 只看问题点这里 看全部问题和答案点这里 本文由我...
    自you是敏感词阅读 906评论 0 3
  • 21
    畅哥哥呀阅读 158评论 0 4

友情链接更多精彩内容