Vue(2)

开始练习
品牌案例 品牌列表的添加和删除

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title></title>
<script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
<link rel="stylesheet" href="https://cdn.bootcss.com/bootstrap/4.1.3/css/bootstrap.min.css">
</head>
<body>
        <div id='app'>
            <div class="panel panel-primary ">
                <div class="panel-heading">
                    <h3 class="panel-title">add brand</h3>
                </div>
                <div class="panel-body form-inline">
                    <label >
                        Id:
                        <input type="text" class="form-control" v-model="id">
                    </label>
                    <label >
                        Name:
                        <input type="text" class="form-control" v-model="name">
                    </label>
                    <input type="button" value="add" class="btn btn-primary" @click="add">
                </div>
            </div>

           <table class="table table-bordered table-hover table-stripped" >
                <thead>
                    <tr>
                        <th>Id</th>
                        <th>Name</th>
                        <th>Ctime</th>
                        <th>Operation</th>
                    </tr>
                </thead>
                <tbody>
                    <!-- :是属性的绑定 -->
                    <tr v-for="item in list" :key="item.id">
                        <td>{{item.id}}</td>
                        <td v-text="item.name"></td>
                        <td>{{item.ctime}}</td>
                        <td>
                            <a href="" @click.prevent="delete1(item.id)" >delete</a>
                        </td>
                    </tr>
                </tbody>
           </table>
        </div>
        <script>
            // 指定要控制的元素
            var vm=new Vue({
                el: '#app',
                data: {
                    id:'',
                    name:'',
                    list:[
                        {id:1,name:"Ferrari",ctime:new Date},
                        {id:2,name:"Mercedes",ctime:new Date},
                        {id:3,name:"Red Bull Racing",ctime:new Date},
                        {id:4,name:"McLaren",ctime:new Date},
                        {id:5,name:"Renault",ctime:new Date},
                        {id:6,name:"Alfa Romeo Racing",ctime:new Date},
                    ]
                },
                methods:{
                    add(){
                        var car={id:this.id,name:this.name,ctime:new Date()}
                        this.list.push(car)
                    },
                    delete1(id){
                        // method 1
                        // this.list.some((item,i)=>{
                        //     if(item.id==id){
                        //         this.list.splice(i,1)
                        //         return true
                        //     }
                        // })

                        // method 2
                        var index=this.list.findIndex(item=>{
                            if(item.id==id){
                                return true
                            }
                        })
                        this.list.splice(index,1)
                    }
                }
            })
        </script>
</body>
</html>

搜索功能

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title></title>
<script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
<link rel="stylesheet" href="https://cdn.bootcss.com/bootstrap/4.1.3/css/bootstrap.min.css">
</head>
<body>
        <div id='app'>
            <div class="panel panel-primary ">
                <div class="panel-heading">
                    <h3 class="panel-title">add search</h3>
                </div>
                <div class="panel-body form-inline">
                    <label >
                        Id:
                        <input type="text" class="form-control" v-model="id">
                    </label>
                    <label >
                        Name:
                        <input type="text" class="form-control" v-model="name">
                    </label>
                    <input type="button" value="add" class="btn btn-primary" @click="add">

                    <label>
                        search for keywords
                        <input type="text" class="form-control" v-model="keywords">
                    </label>
                </div>
            </div>

           <table class="table table-bordered table-hover table-stripped" >
                <thead>
                    <tr>
                        <th>Id</th>
                        <th>Name</th>
                        <th>Ctime</th>
                        <th>Operation</th>
                    </tr>
                </thead>
                <tbody>
                    <!-- :是属性的绑定 -->
                    <!-- v-for data from the method search,and it has key "keywords" -->
                    <tr v-for="item in search(keywords)" :key="item.id">
                        <td>{{item.id}}</td>
                        <td v-text="item.name"></td>
                        <td>{{item.ctime}}</td>
                        <td>
                            <a href="" @click.prevent="delete1(item.id)" >delete</a>
                        </td>
                    </tr>
                </tbody>
           </table>
        </div>
        <script>
            // 指定要控制的元素
            var vm=new Vue({
                el: '#app',
                data: {
                    id:'',
                    name:'',
                    keywords:'',
                    list:[
                        {id:1,name:"Ferrari",ctime:new Date},
                        {id:2,name:"Mercedes",ctime:new Date},
                        {id:3,name:"Red Bull Racing",ctime:new Date},
                        {id:4,name:"McLaren",ctime:new Date},
                        {id:5,name:"Renault",ctime:new Date},
                        {id:6,name:"Alfa Romeo Racing",ctime:new Date},
                    ]
                },
                methods:{
                    add(){
                        var car={id:this.id,name:this.name,ctime:new Date()}
                        this.list.push(car)
                    },
                    delete1(id){
                        // method 1
                        // this.list.some((item,i)=>{
                        //     if(item.id==id){
                        //         this.list.splice(i,1)
                        //         return true
                        //     }
                        // })

                        // method 2
                        var index=this.list.findIndex(item=>{
                            if(item.id==id){
                                return true
                            }
                        })
                        this.list.splice(index,1)
                    },
                    search(keywords){
                        var newList=[]
                        this.list.forEach(item => {
                        if(item.name.indexOf(keywords)!=-1) 
                            {
                                newList.push(item)
                            }
                        });
                        return newList
                    }
                }
            })
        </script>
</body>
</html>

另一个方法

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title></title>
<script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
<link rel="stylesheet" href="https://cdn.bootcss.com/bootstrap/4.1.3/css/bootstrap.min.css">
</head>
<body>
        <div id='app'>
            <div class="panel panel-primary ">
                <div class="panel-heading">
                    <h3 class="panel-title">add search</h3>
                </div>
                <div class="panel-body form-inline">
                    <label >
                        Id:
                        <input type="text" class="form-control" v-model="id">
                    </label>
                    <label >
                        Name:
                        <input type="text" class="form-control" v-model="name">
                    </label>
                    <input type="button" value="add" class="btn btn-primary" @click="add">

                    <label>
                        search for keywords
                        <input type="text" class="form-control" v-model="keywords">
                    </label>
                </div>
            </div>

           <table class="table table-bordered table-hover table-stripped" >
                <thead>
                    <tr>
                        <th>Id</th>
                        <th>Name</th>
                        <th>Ctime</th>
                        <th>Operation</th>
                    </tr>
                </thead>
                <tbody>
                    <!-- :是属性的绑定 -->
                    <!-- v-for data from the method search,and it has key "keywords" -->
                    <tr v-for="item in search(keywords)" :key="item.id">
                        <td>{{item.id}}</td>
                        <td v-text="item.name"></td>
                        <td>{{item.ctime}}</td>
                        <td>
                            <a href="" @click.prevent="delete1(item.id)" >delete</a>
                        </td>
                    </tr>
                </tbody>
           </table>
        </div>
        <script>
            // 指定要控制的元素
            var vm=new Vue({
                el: '#app',
                data: {
                    id:'',
                    name:'',
                    keywords:'',
                    list:[
                        {id:1,name:"Ferrari",ctime:new Date},
                        {id:2,name:"Mercedes",ctime:new Date},
                        {id:3,name:"Red Bull Racing",ctime:new Date},
                        {id:4,name:"McLaren",ctime:new Date},
                        {id:5,name:"Renault",ctime:new Date},
                        {id:6,name:"Alfa Romeo Racing",ctime:new Date},
                    ]
                },
                methods:{
                    add(){
                        var car={id:this.id,name:this.name,ctime:new Date()}
                        this.list.push(car)
                    },
                    delete1(id){
                        // method 1
                        // this.list.some((item,i)=>{
                        //     if(item.id==id){
                        //         this.list.splice(i,1)
                        //         return true
                        //     }
                        // })

                        // method 2
                        var index=this.list.findIndex(item=>{
                            if(item.id==id){
                                return true
                            }
                        })
                        this.list.splice(index,1)
                    },
                    search(keywords){
                        // var newList=[]
                        // this.list.forEach(item => {
                        // if(item.name.indexOf(keywords)!=-1) 
                        //     {
                        //         newList.push(item)
                        //     }
                        // });
                        // return newList

                        // forEach some filter findIndex 都是数组新方法
                        // var newList=this.list.filter(item=>{
                        //     // if (item.name.indexOf(keywords)!==-1)
                        //     // String.prototype new method
                        //     if(item.name.includes(keywords)){
                        //         return item
                        //     }
                        // }) 
                        // return newList
                        return this.list.filter(item=>{
                            // if (item.name.indexOf(keywords)!==-1)
                            // String.prototype new method
                            if(item.name.includes(keywords)){
                                return item
                            }
                        }) 
                    }
                }
            })
        </script>
</body>
</html>

过滤器

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title></title>
<script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
<style>

</style>
</head>
<body>
<div id='app'>
    <p>{{msg|msgFormat('qqq')|test}}</p>
</div>

<script>
    Vue.filter('msgFormat',function(msg,arg){
        return msg.replace(/you/g,arg)
    }) 
    Vue.filter('test',function(msg){
        return msg+'==='
    })

    var vm=new Vue({
        el: '#app',
        data: {
         msg:'what and who are you why are you here'
        },
        methods:{
            
    
        }
    });
</script>

</body>
</html>

过滤器实例

 Vue.filter('dateFormat',function(dateStr){
                var dt=new Date(dateStr)
                var y=dt.getFullYear()
                var m=dt.getMonth()+1
                var d=dt.getDate()
                // return y+'-'+m+'-'+d
                return `${y}-${m}-${d}`
            })
<td>{{item.ctime|dateFormat('')}}</td>
...
...
...
Vue.filter('dateFormat',function(dateStr,pattern){
                var dt=new Date(dateStr)
                var y=dt.getFullYear()
                var m=dt.getMonth()+1
                var d=dt.getDate()
                // return y+'-'+m+'-'+d
                // return `${y}-${m}-${d}`

                if(pattern && pattern.toLowerCase()==='yyyy-mm-dd'){
                    return `${y}-${m}-${d}`
                }
                else{
                    var hh=dt.getHours()
                    var mm=dt.getMinutes()
                    var ss=dt.getSeconds()
                    return `${y}-${m}-${d}-${hh}:${mm}:${ss}`
                }
            })

所谓全局实例就是所有vue实例都共享的

padStart方法

var vm2=new Vue({
                el:'#app2',
                data:{
                    dt:new Date()
                },
                methods:{},
                filters:{
                    // 定义私有过滤器 两个条件 名称和处理函数
                    // 过滤器调用的时候采用就近原则
                    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'){
                    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}`
                }
                }
                }
            })

按键修饰符

<input type="text" class="form-control" v-model="name" @keyup.enter="add">

// 定义全局修饰符
            Vue.config.keywords.f2=113

钩子函数

Vue.directive('color',{
                bind:function(el){
                    el.style.color='red'
                }
            })
// 用binding 参数拿到传递的值
Vue.directive('color',{
                bind:function(el,binding){
                    el.style.color=binding.value
                }
            })

私有指令

<div id="app2">
            <h3 v-color="'blue'" v-fontweight="400">
                {{dt|dateFormat('')}}
            </h3>
            
        </div>

var vm2=new Vue({
                el:'#app2',
                data:{
                    dt:new Date()
                },
                methods:{},
                filters:{
                    // 定义私有过滤器 两个条件 名称和处理函数
                    // 过滤器调用的时候采用就近原则
                    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'){
                    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}`
                }
                }
                },
                // 私有指令
                directive:{
                    'fontweight':{
                        bind:function(el,binding){
                            el.style.fontWeight=binding.value
                        }
                    }
                }
            })

生命周期函数

var vm=new Vue({
        el: '#app',
        data: {
         msg:'what and who are you why are you here'
        },
        methods:{
            show(){
                console.log('show')
            }
        },
        beforeCreate(){
            // 生命周期函数
            // 执行时候 data和methods都没被初始化
        },
        created(){
            // data methods 已经初始化好了
        },
        mounted(){
            // 表示内存中模板已经真实挂载到渲染好的页面中
        },
        // 运行中的事件
        beforeUpdate(){

        },
        updated(){

        },
        beforeDestroy(){
            
        }
    });
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值