vue 实例

1、站点添加实例

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>

    <script type="text/javascript" src="../js/vue.min.js"></script>
    <link rel="stylesheet" href="../css/bootstrap.css">

</head>
<body>

<div id="app">


    <div class="panel panel-primary">
        <div class="panel-heading">
            <h3 class="panel-title">添加站点</h3>
        </div>
        <div class="panel-body form-inline">
            <label>Id:<input type="text" class="form-control" v-model="id"></label>
            <!--按enter触发add-->
            <label>Name:<input type="text" class="form-control" v-model="name" @keyup.enter="add"></label>
            <input type="button" value="添加" class="btn btn-primary" @click="add">
            <label>搜索名称关键字:
                <input type="text" class="form-control" v-model="keywords" id="search" v-focus v-color="'blue'">
            </label>
        </div>
    </div>

    <table class="table table-bordered table-hover table-striped">
        <thead>
        <tr>
            <th>Id</th>
            <th>Name</th>
            <th>Ctime</th>
            <th>Operation</th>
        </tr>
        </thead>
        <tbody>
        <tr v-for="item in search(keywords)">
            <td>{{item.id}}</td>
            <td>{{item.name}}</td>
            <td>{{item.ctime | dateFormat()}}</td>
            <td><a href="#" @click.prevent="del(item.id)">删除</a></td>
        </tr>
        </tbody>
    </table>

</div>

<div id="app1">
    <p v-fontweight="900" v-fontsize="50">{{dt | dateFormat}}</p>
</div>
<script>
    //过滤器Vue
    Vue.filter('dateFormat',function (dateStr,pattern="") {
        //将字符串获取当前时间
        var dt = new Date(dateStr);

        var y = dt.getFullYear()
        var m = (dt.getMonth() +1).toString().padStart(2,'0')
        var d = dt.getDate().toString().padStart(2,'0')//填充后两个长度
       /* return y + '-' + m + '-'+ d
        return '${y}-${m}-${d}'*/
       //if(pattern && pattern.toLowerCase() === 'yyyy-mm-dd'){
       if(pattern && pattern.toLowerCase() === 'yyyy-mm-dd'){
           //return '${y}-${m}-${d}'
           return y + '-' + m + '-'+ d
       }else {
           var hh = dt.getHours().toString().padStart(2,'0')
           var mm = dt.getMinutes().toString().padStart(2,'0')
           var ss = dt.getSeconds().toString().padStart(2,'0')

           return y + '-' + m + '-'+ d +' '+hh+':'+mm+':'+ss
       }
    })


    //自定义按键修饰符
    Vue.config.keyCodes.f2 = 113

    //自定义指令 v-focus,
    //param1 名称
    //param2 inserted  update bind
    Vue.directive('focus',{
        bind:function (el) {//首先执行 执行一次,el dom对象,触发的dom
            //在元素刚绑定,含没有插入到dom
        },
        inserted:function (el) {//插入到dom
            el.focus()//行为
        },
        updated:function (el) {

        }//触发一次
    })

    Vue.directive('color',{
        //样式
        bind:function (el,binding) {
            el.style.color = 'red'
            //console.log(binding.name)
            // console.log(binding.expression)
            // console.log(binding.value)
            el.style.color = binding.value
        }
    })

    var vm = new Vue({
        el:'#app',
        data:{
            id:'',
            name:'',
            keywords:'',
            websites:[
                {id:1,name:'百度',ctime:new Date()},
                {id:2,name:'京东',ctime:new Date()},
                {id:3,name:'淘宝',ctime:new Date()}
            ]
        },
        methods:{
            add(){//添加
                //1获取id和name,直接从data获取
                //2.组织出一个对象
                //3.把这个对象,调用数组的相关方法,添加到当前的data上的websites
                if(this.id!='' && this.name!= ''){
                    var website = {id:this.id,name:this.name,ctime:new Date()}

                    this.websites.push(website)

                    this.id = this.name = ''
                }else {
                    alert('id和name不能为空')
                }

            },

            del(id){//根据id删除数据
                var index = this.websites.findIndex(item =>{
                    if (item.id == id){
                        return true;
                    }
                })
                this.websites.splice(index,1)

            },

            //通过关键字过滤所有符合条件的website
            search(keywords){
                // 注意:forEarch some filter findIndex这些都是属于数组的新方法,都是进行遍历
                return this.websites.filter(item => {
                    // if(item.name.indexOf(keywords) != -1){
                    //es6 提供的一个新方法 string.prototype.includes
                    if(item.name.includes(keywords)){

                        return item
                    }
                })
            }

        }
    })

    var vm1 = new Vue({
        el: '#app1',
        data: {
            dt: new Date()
        },
        methods: {},
        filters: {
            dateFormat: function (dateStr, pattern = '') {
                //将字符串获取当前时间
                var dt = new Date(dateStr);

                var y = dt.getFullYear()
                var m = dt.getMonth() + 1
                var d = dt.getDate()

                if (pattern && pattern.toLowerCase() === 'yyyy-mm-dd') {
                    return y + '-' + m + '-' + d
                } else {
                    var hh = dt.getHours().toString().padStart(2,'0')
                    var mm = dt.getMinutes().toString().padStart(2,'0')
                    var ss = dt.getSeconds().toString().padStart(2,'0')
                    return y + '-' + m + '-' + d + ' ' + hh + ':' + mm + ':' + ss + '~~~~'
                }

            }
        },
        directives:{//自定义私有指令
            'fontweight':{
                bind:function (el,binding) {
                    el.style.fontweight = binding.value
                }
            },
            'fontsize':function (el,binding) {
                console.log(binding.value)
                el.style.fontsize = parseInt(binding.value) + 'px'
            }

        }
    })

    //document.getElementById('search').focus()

</script>

</body>
</html>  

实际效果

 2、列表添加与删除动画

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <script src="../js/vue.min.js"></script>
    <style>
        li{
            border: 1px dashed #999;
            margin: 5px;
            line-height: 35px;
            padding-left: 5px;
            font-size: 14px;
             100%;
        }

        li:hover{
            background-color: pink;
            transition: all 0.4s ease;
        }
        .v-enter,.v-leave-to{
            opacity: 0;
            transform: translateY(80px);
        }
        .v-enter-active,.v-leave-active{
            transition: all 0.6s ease;
        }

        /*实现列表删除元素的后续列表渐渐的飘上来*/
        .v-move{
            transition: all 0.6s ease;
        }
        .v-leave-active{
            position: absolute;
        }
    </style>
</head>
<body>
<div id="app">
    <div>
        <label>
            Id:
            <input type="text" v-model="id">
        </label>

        <label>
            Name:
            <input type="text" v-model="name">
        </label>

        <input type="button" value="添加" @click="add">
    </div>
<!--    <ul>-->
        <!--实现列表动画不能使用transition包裹
        要使用transition-group-->
        <transition-group appear tag="ul">
            <li v-for="(item,i) in list" :key="item.id" @click="del(i)">
                {{item.id}} ----- {{item.name}}
            </li>
        </transition-group>
<!--    </ul>-->
</div>

<script>
    var vm = new Vue({
        el:'#app',
        data:{
            id:'',
            name:'',
            list:[
                {id:1,name:'赵高'},
                {id:2,name:'秦桧'},
                {id:3,name:'严嵩'},
                {id:4,name:'魏忠贤'}
            ]
        },
        methods:{
            add(){
                if(this.id!="" && this.name != ""){
                    this.list.push({id:this.id,name:this.name})
                }

            },
            del(i){
                this.list.splice(i,1)
            }
        }
    })

</script>

</body>
</html>  

实际效果

 3.实例

原文地址:https://www.cnblogs.com/snow-wolf-1/p/11824238.html