美文网首页
简单的Vue小组件

简单的Vue小组件

作者: 黄山淋Slahser | 来源:发表于2017-05-25 15:21 被阅读0次

前言

5月开始第二个vue项目,依旧是移动端,拿到效果图后简单的划分了一下自己的任务模块,计划先封装好公共组件和指令,然后再开始页面编写。

搭建项目

使用脚手架搭建项目,做完一些简单的项目配置后,在components里建一个public专门用来放置组件。

编写组件

现在我们要写一个小的switch开关组件:


switch.png

我们希望把它做成一个单页面的组件,因为我们要去编辑它的样式,照例我们先新建一个vue的文件components/public/mySwitch.vue,在里面去写他的结构和样式,:

<style scoped>
    .content{
        display: inline-block;
    }
    .my-switch {
        width: 52px;
        height: 31px;
        position: relative;
        border: 1px solid #dfdfdf;
        background-color: #fdfdfd;
        box-shadow: #dfdfdf 0 0 0 0 inset;
        border-radius: 20px;
        background-clip: content-box;
        display: inline-block;
        -webkit-appearance: none;
        user-select: none;
        outline: none;
    }
    .my-switch:before {
        content: '';
        width: 29px;
        height: 29px;
        position: absolute;
        top: 0;
        left: 0;
        border-radius: 20px;
        background-color: #fff;
        box-shadow: 0 1px 3px rgba(0, 0, 0, 0.4);
    }
    .my-switch:checked {
        border-color: #ff5208;
        box-shadow: #ff5208 0 0 0 16px inset;
        background-color: #ff5208;
    }
    .my-switch:checked:before {
        left: 21px;
    }
    .my-switch.my-switch-animbg {
        transition: background-color ease 0.4s;
    }
    .my-switch.my-switch-animbg:before {
        transition: left 0.3s;
    }
    .my-switch.my-switch-animbg:checked {
        box-shadow: #dfdfdf 0 0 0 0 inset;
        background-color: #ff5208;
        transition: border-color 0.4s, background-color ease 0.4s;
    }
    .my-switch.my-switch-animbg:checked:before {
        transition: left 0.3s;
    }
</style>
<template>
    <div class="content">
        <label>
            <input class="my-switch my-switch-animbg" type="checkbox" :disabled="disabled" v-model="currentValue">
        </label>
    </div>
</template>
<script>
    export default{
        props: {
            disabled: Boolean, 
            value: { // 你在外部通过v-model绑定的值在里面就写成value
                type: Boolean,
                default: false
            }
        },
        data () {
            return {
                currentValue: this.value
            }
        },
        watch: {
            currentValue (val) {
                this.$emit('on-change', val)
            },
            value (val) {
                this.currentValue = val
            }
        }
    }
</script>
组件通信

我们知道在vue中,父组件通过 props 向下传递数据给子组件,子组件通过 events 给父组件发送消息:

props.png

这里,我们的props里有两个,一个是在外部使用v-model绑定的value,一个是disabled,props可以设置:
type:值类型,
default:默认值,
required:是否必须
现在,我们给组件内部的checkbox使用v-model="currentValue"来监听他的值,并设置他的初始值为props传进来得值,这样我们的switch就能接受到外部传进来的值。
当我们点击时我们希望将checkbox的值传出去,这样我们就要通过events去通信,在这里我们使用watch来监测currentValue的值,当他的值变化时,我们将events传播出去并触发。我们也监测了value的值,当value改变时将他值赋给currentValue用来显示switch的开关状态,当然,如果在你写的组件中需要用到点击之类的,你也可以绑定click事件来触发events。

引入组件

然后我们在需要使用组件的地方将他import进来,在components中注册:

<div class="input-cloumn row gap">
      <span>是否设置为默认地址</span>
      <iSwitch class="switch-default" v-model="isDefault" @on-change="setDefault"></iSwitch>
</div>
<script>
    import iSwitch from "../public/switch.vue"
    export default{
        components:{
            iSwitch
        },
        data(){
            return{
             isDefault: false
            }
        },
        methods:{
             setDefault(val){
                this.isDefault = val;
                console.log(this.isDefault)
            }
        }
    }
</script>

ok,如果我们想禁用开关,只需要在组件上加上disabled就可以了,现在可以看看我们的组件了,工作正常。

default.png

如有错误,请指出,感谢!

相关文章

  • 初学vue

    Vue通过尽可能简单的 API 实现响应的数据绑定和组合的视图组件; 一个简单vue实例 组件化 组件(Compo...

  • vue-2.0 loading 组件

    参考 vue-hackernews-2.0 项目里面的 spinner.vue 组件,做了简单的修改。修改后的组件...

  • vue学习:webpack+vue(组件学习)

    这篇文章主要简单的讲一下vue组件: -1- vue 组件分为全局组件和局部组件,我们先来说一下全局组件: 这里我...

  • Vue组件命名的一些问题

    原文:聊聊 Vue 组件命名那些事 组件注册 我们以一个最简单的例子来研究 Vue 组件的注册过程: 通过跟踪代码...

  • 小程序自定义组件

    公司要开发小程序,之前用惯了vue里面各种组件化,于是尝试在小程序里也尝试用组件化开发,官网的文档实在简单,网上找...

  • vue tree demo 数组件

    vue-tree-demo 一个vue 递归组件时间的 树demo 简单介绍 各大UI组件库 基本都有自己tree...

  • vue组件化案例

    简单的vue 组件化demo,效果很简单,就是一个列表增删改查。 未组件化代码: 效果: 组件化后: 效果: 详细...

  • vue-event-calendar

    vue-event-calendar vue-event-calendar是一款简单小巧的事件日历组件,针对Vue...

  • Vue自定义组件

    简单组件展示 组件和页面类似 局部注册 vue页面注册局部组件 引入局部组件 调用 展示 组件间的数据和事件传递 ...

  • 组件、全局组件、局部组件、prop父子传值

    一.组件的简单介绍 组件(Component)是 Vue.js 最强大的功能之一。 组件可以扩展 HTML 元素,...

网友评论

      本文标题:简单的Vue小组件

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