Vue2封装一个简单的操作表(Actionsheet),含父子组件传递事件等

最近一直在接触vue2.0,也算是入门没多久,vue给我最深的印象除了数据驱动,虚拟DOM,就是它的响应式组件了,自己写根据项目不同而不同的组件,以达到组件复用的目的,例子中我们使用到了父子组件传递事件,vue中transition的使用,接下来上代码.

*由于不会弄gif图片,所以上传了视频可以查看效果,视频在底部

介于会有新手,所以搭建项目我写的清楚一些.

这里我们用默认的vue2+webpack2模板

1.安装NodeJS,自己去Node中文网下载安装即可,这里基于windows系统说明

2.安装脚手架工具vue-cli

     npm i vue-cli -g

安装完成后在node下 vue指令会被注册为一个全局命令

3.创建项目

用默认模板即可,我们cd定位到桌面下创建,名字自己起,也可定到别的盘符

     vue init webpack actionsheetDemo

4.安装less   

脚手架中已经自动配置好了less或sass的一些方法,所以我们想用哪个预编译语言直接安装就好

npm i less less-loader --save-dev

5.启动项目

npm run dev

这时等编译结束项目就初始化完成了,地址为localhost:8080,但是默认没有自动打开浏览器,我们可以在项目目录下的config/index.js中找到配置选项:

module.exports = {

  dev: {

   .....

    host: 'localhost',

    port: 8080, 

    autoOpenBrowser: false,       //这里默认为false  改为true即可

    .....

  }

}

5.封装组件

项目初始化完成后,默认选择安装了vue-router,所以在根组件App.vue中默认路由是HelloWorld.vue,为了简便一些,我们就在这个组件内写(可以改为自己项目中的名字*.vue,这里为了方便,不做修改了,用默认的)

在components目录下新建一个actionsheet.vue文件 代码如下:

//actionsheet.vue


<script>

export default {

    name: 'actionsheet',

    data() {

        return {

        }

    },

    props:{

        open:false  //接收从父组件传过来的控制是否显示的属性

    },

    methods: {

       // 在组件的模板中给关闭按钮和取消按钮绑定了click事件,功能为关闭操作表,通过this.$emit发射该事件到父组件(,第一个参数为父组件接收的方法属性名,如果想传递参数也可以在后面加上第二个参数)

        cancelFunc() {

            this.$emit('show'); 

        }

    }

}

</script>

<style>

* {

    box-sizing: border-box;

}

.actionsheet_wrapper {

    position: fixed;

    bottom: 0;

    left: 0;

    width: 100%;

    padding: 8px;

    .actionsheet {

        background-color: #fff;

        border-radius: 10px;

        ._header {

            display: flex;

            width: 100%;

            height: 40px;

            padding: 0 8px;

            align-items: center;

            .cart {

                margin-right: auto;

            }

            .clear {

                color: #0894ec;

            }

        }

        ._content {

            text-align: center;

            .cancel {

                background-color: #39678c;

                color: #fff;

                height: 40px;

                line-height: 40px;

                border-radius: 0 0 10px 10px;

                margin: 0;

            }

            .item {

                display: flex;

                align-items: center;

                justify-content: center;

                text-align: center;

                padding: 0 8px;

                img {

                    margin-right: 6px;

                }

            }

        }

    }

}

</style>

//过渡效果transition使用

定义transition的name属性值为fade,定义从底部向上淡入的滑入和滑出,使用translate3d,在移动端会开启硬件加速器,效果很流畅,接近原生效果

.fade-enter-active,

.fade-leave-active {

    transition: all .4s ease;

}

.fade-enter,

.fade-leave-to {

    transform: translate3d(0, 100%, 0);

    opacity: 0;

}


6.导入组件

我们在Helloworld.vue中引入actionsheet组件,并添加一个按钮

//HelloWorld.vue

import Actionsheet from './actionsheet'    导入组件

<script>

export default {

    name: 'HelloWorld',

    data() {

        return {

            msg: 'HelloWorld',

            openActionsheet:false

        }

    },

    components:{

        Actionsheet        //注册组件

    },

    methods:{

       //该方法为按钮的点击事件,把是否显示操作表的变量取反

        toggleActionSheet(){

            this.openActionsheet = !this.openActionsheet;

        },

       //该方法为actionsheet组件通过this.$emit发射过来事件,用于控制操作表显隐

        func(a){

            this.openActionsheet = !this.openActionsheet;

            console.log(a)

        }

    }

}

</script>


<style>


button{

    border:none;

    width: 90px;

    height: 35px;

    font-size: 14px;

    line-height: 35px;

    border-radius: 6px;

    color: #fff;

    background-color: #0894ec;

}

</style>

7.最终效果截图与视频

点击按钮,操作表从屏幕底部滑入,再次点击按钮滑出

也可点击操作表子组件的关闭按钮和取消按钮来关闭,效果媲美原生.


文章中如有错误,请指出,转载请标明,希望能给大家带来用处.






vue2封装操作表 actionsheet截图视频
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,189评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,577评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,857评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,703评论 1 276
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,705评论 5 366
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,620评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,995评论 3 396
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,656评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,898评论 1 298
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,639评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,720评论 1 330
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,395评论 4 319
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,982评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,953评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,195评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 44,907评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,472评论 2 342

推荐阅读更多精彩内容

  • 在学习weex的过程中看到了常用标签相关的内容,为了自己以后能够快速查阅特整理出此文档。 a 简介组件定义了指向某...
    TyroneTang阅读 4,641评论 1 3
  • Vue 实例 属性和方法 每个 Vue 实例都会代理其 data 对象里所有的属性:var data = { a:...
    云之外阅读 2,198评论 0 6
  • 云丘山是一座很好的山,空气新鲜,我妈给我报了名,约定好3号去,但是又因为3号有大雨,所以改成了6号。5号的下午,我...
    夜泊临客阅读 418评论 1 0
  • 原创作者/山水平生 半个月前,给小学同学建了个群,目前群人数35,还有班主任老师。我们山区学校,班级规模小,虽然我...
    山水平生阅读 642评论 1 8
  • 1.线程与进程的概念 线程是CPU独立运行和独立调度的基本单位,是程序中独立运行的代码段,程序默认开启一条线程...
    迷恋代码阅读 304评论 0 0