美文网首页
Vue2封装一个简单的操作表(Actionsheet),含父子组

Vue2封装一个简单的操作表(Actionsheet),含父子组

作者: 包租公你怎么酱啊 | 来源:发表于2018-02-28 18:41 被阅读0次

最近一直在接触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截图视频

相关文章

网友评论

      本文标题:Vue2封装一个简单的操作表(Actionsheet),含父子组

      本文链接:https://www.haomeiwen.com/subject/bzcchttx.html