常用特性概览

  • 表单操作
  • 自定义指令
  • 计算属性
  • 过滤器
  • 侦听器
  • 生命周期

1.表单操作

    基于Vue的表单操作

  • input 单行文本
  • textarea 多行文本
  • select 下拉多选
  • radio 单选框
  • checkbox 多选框
    
            <!DOCTYPE html>
            <html lang="en">
            
            <head>
                <meta charset="UTF-8">
                <meta name="viewport" content="width=device-width, initial-scale=1.0">
                <meta http-equiv="X-UA-Compatible" content="ie=edge">
                <title>Document</title>
            </head>
            
            <body>
                <style>
                    form {
                        padding: 20px;
                        line-height: 50px;
                    }
                    form textarea{
                        vertical-align:text-top;
                    }
                </style>
            
                <body>
                    <div id="app">
                        <form action="">
                            <div>
                                <span>姓名:</span>
                                <input type="text" v-model='uname'>
                            </div>
                            <div>
                                <span>性别:</span>
                                <input type="radio" id='male' value="1" v-model='gender'>
                                <label for="">男</label>
                                <input type="radio" id='female' value="2" v-model='gender'>
                                <label for="">女</label>
                            </div>
                            <div>
                                <span>爱好:</span>
                                <input type="checkbox" value="1" v-model='hobby'>
                                <label for="">画画</label>
                                <input type="checkbox" value="2" v-model='hobby'>
                                <label for="">下棋</label>
                                <input type="checkbox" value="3" v-model='hobby'>
                                <label for="">看书</label>
                            </div>
                            <div>
                                <span>职业:</span>
                                <!-- <select name="" id="" v-model='occupation' multiple='true'>  多选-->
                                <select name="" id="" v-model='occupation'> 
                                    <option  value="0">请选择职业...</option>
                                    <option  value="1">教师</option>
                                    <option  value="2">软件工程师</option>
                                    <option  value="3">律师</option>
                                    <option  value="4">画家</option>
                                </select>
                            </div>
                            <div>
                                <span>个人简介:</span>
                                <textarea v-model='desc'></textarea>
                            </div>
                            <input type="submit" @click.prevent='handle' class="btn">
                        </form>
                    </div>
                </body>
                <script src="./vue.js"></script>
                <script>
                    var vm = new Vue({
                        el: '#app',
                        data: {
                            uname: '',
                            gender: 1,
                            hobby: [1, 2],
                            // occupation:[1,2]
                            occupation:1,
                            desc:'tangtang'
            
                        },
                        methods: {
                            handle() {
                                console.log(this.uname)
                                console.log(this.gender)
                                console.log(this.hobby.toString())
                                console.log(this.desc)
                            }
                        }
                    })
                </script>
            </body>
            
            </html>
    

2.表单域修饰符

  • number:转化为数值
  • <input v-model.number='age' type='number'>

  • trim:去掉开始和结尾的空格
  • <input v-model.trim='info' >

  • lazy:将input事件切换为change事件(失去焦点的时候触发)
  • <input v-model.lazy='msg' >

3.自定义指令基本用法

  • 1.为何需要自定义指令?
  • 内置指令不满足需求

  • 2.自定义指令的语法规则(获取元素焦点)
  • 参考下列实例

    <input type='text' v-focus >

  • 3.带参数的自定义指令(改变元素的背景色)
  • 参考下列实例

    <input type='text' v-focus v-color="{color:'pink'}">

  • 4.局部指令
  • 实例内加入一个 directive属性

    
            <!DOCTYPE html>
            <html lang="en">
            <head>
                <meta charset="UTF-8">
                <meta name="viewport" content="width=device-width, initial-scale=1.0">
                <meta http-equiv="X-UA-Compatible" content="ie=edge">
                <title>自定义属性-获取焦点</title>
            </head>
            <body>
                <div id="app">
                    <input type="text" v-focus v-color="{color:'pink'}" >
                </div>
                <script src="./vue.js"></script>
                <script>
                    // 自定义指令
                    // 获取元素焦点
                    Vue.directive('focus',{
                        inserted(el){
                            //el表示指令所绑定的元素
                            el.focus();
                        }
                    })
                    // 改变元素的背景色
                    Vue.directive('color',{
                        inserted(el,binding){
                            //el表示指令所绑定的元素
                            el.style.backgroundColor=binding.value.color;
                        }
                    })
                    var vm = new Vue({
                        el:'#app',
                        data:{
            
                        },
                        methods:{
            
                        }
                    })
                </script>
            </body>
            </html>
    

4.计算属性

  • 1.为何需要计算属性?
  • 表达式的计算逻辑可能会比较复杂,使用计算属性可以使用模板内容更加简洁

  • 2.计算属性的用法
  •                 
                           computed:{
                               reversedMessage(){
                                   return this.msg.split('').reverse().join('')
                               }
                           }
                    
             
  • 3.计算属性与方法的区别
  • 1⃣️计算属性是基于它们的依赖进行缓存的

    2⃣️方法不存在缓存的

5.侦听器

  • 1.侦听器的应用场景
  • 数据变化时执行异步或开销较大的操作

  • 2.侦听器的用法
  •                 
                           watch:{
                               firstName(val){
                                   //val 表示变化之后的值
                                  this.fullName = val+this.lastName;
                               },
                               lastName(val){
                                   this.fullName = this.firstName+val;
                               }
    
                           }
                    
             
  • 3.侦听器的案例
  • 1⃣️.通过v-model实现数据绑定

    2⃣️.需要提供提示信息

    3⃣️.需要侦听器监听输入信息的变化

    4⃣️.需要修改触发的事件

                 
                        <!DOCTYPE html>
                        <html lang="en">
                        <head>
                            <meta charset="UTF-8">
                            <meta name="viewport" content="width=device-width, initial-scale=1.0">
                            <meta http-equiv="X-UA-Compatible" content="ie=edge">
                            <title>侦听器案例</title>
                        </head>
                        <body>
                            <div id="app">
                                <div>
                                    <span>用户名:</span>
                                    <input type="text" v-model.lazy='uname'>
                                    <span></span>
                                </div>
                            </div>
                            <script src="./vue.js"></script>
                            <script>
                               var vm = new Vue({
                                   el:'#app',
                                   data:{
                                       uname:'',
                                       tip:''
                        
                                   },
                                   methods:{
                                      checkName(uname){
                                          let that = this
                                          //调用接口,但是可以使用定时任务的发格式模拟接口调用
                                          setTimeout(function(){
                                            //模拟接口调用
                                            if(uname=='admin'){
                                                that.tip='用户名已经存在,请更换一个'
                                            }else{
                                                that.tip='用户名可以使用'
                                            }
                                          },2000)
                                      }
                                   },
                                   watch:{
                                       uname(val){
                                        //调用后台接口验证用户的合法性
                                        this.checkName(val)
                                        //修改提示信息
                                        this.tip='正在验证...'
                                       }
                                   }
                               })
                            </script>
                        </body>
                        </html>
                 
             

6.过滤器

  • 1.过滤器的作用是什么?
  • 格式化数据,比如字符串格式化为首字母大写,将日期格式化为指定的格式等

  • 2.自定义过滤器
  •                 
                           Vue.filter('过滤器名称',function(val){
                               //过滤器业务逻辑
                           })
                    
             
  • 3.过滤器的使用
  • <div>{ {msg | upper} }</div>

    <div>{ {msg | upper | lower} }</div>

    <div> v-bind:id="id | formatId "</div>

                 
                        <!DOCTYPE html>
                        <html lang="en">
                        <head>
                            <meta charset="UTF-8">
                            <meta name="viewport" content="width=device-width, initial-scale=1.0">
                            <meta http-equiv="X-UA-Compatible" content="ie=edge">
                            <title>过滤器的基本用法</title>
                        </head>
                        <body>
                            <div id="app">
                                <input type="text" v-model ='msg'>
                                <div></div>
                                <div></div>
                                <div :abc='msg | upper'>测试数据</div>
                            </div>
                            <script src="./vue.js"></script>
                            <script>
                                // 过滤器
                                Vue.filter('upper',function(val){
                                    //把val的首字母变为大写
                                    return val.charAt(0).toUpperCase()+val.slice(1)
                                })
                                Vue.filter('lower',function(val){
                                    return val.charAt(0).toLowerCase()+val.slice(1)
                                })
                                var vm = new Vue({
                                    el:'#app',
                                    data:{
                                       msg:''
                                    }
                                })
                            </script>
                        </body>
                        </html>
                 
             
  • 4.局部过滤器
  •              
                     filters:{
                         capitalize:funcgtion(){
    
                         }
                     }
                 
             
  • 5.使用过滤器格式化日期
  •              
                        <!DOCTYPE html>
                        <html lang="en">
                        <head>
                            <meta charset="UTF-8">
                            <meta name="viewport" content="width=device-width, initial-scale=1.0">
                            <meta http-equiv="X-UA-Compatible" content="ie=edge">
                            <title>格式化日期</title>
                        </head>
                        <body>
                            <div id="app">
                               <div>{ {date | format('yyyy-MM-dd')} }</div>
                            </div>
                            <script src="./vue.js"></script>
                            <script>
                                //过滤器案例 格式化日期
                                // Vue.filter('format',function(val,arg){
                                //     console.log(arg)
                                //     if(arg=='yyyy-MM-dd'){
                                //         var ret = '';
                                //         ret+=val.getFullYear()+'-'+(val.getMonth()+1)+'-'+val.getDate()
                                //         return ret
                                //     }
                                // })
                                Vue.filter('format',function(val,arg){
                                    function dateFormat(date,format){
                                        if(typeof date=='string'){
                                            var mts = date.match(/(\/Date\((\d+)\)\/)/);
                                            if(mts && mts.length>=3){
                                                date=parseInt(mts[2])
                                            }
                                        }
                                        date=new Date(date);
                                        if(!date || date.toUTCString()=="Invalid Date"){
                                            return "";
                                        }
                                        var map ={
                                            "M":date.getMonth()+1,//月份
                                            "d":date.getDate(),//日
                                            "h":date.getHours(),//小时
                                            "m":date.getMinutes(),//分
                                            "s":date.getSeconds(),//秒
                                            "q":Math.floor((date.getMonth()+3)/3),//季度
                                            "s":date.getMilliseconds()//毫秒
                                        };
                                        format =format.replace(/([yMdhmsqS])+/g,function(all,t){
                                            var v = map[t];
                                            if(v !==undefined){
                                                if(all.length>1){
                                                    v='0'+v;
                                                    v=v.substr(v.length-2);
                                                }
                                                return v;
                                            }else if(t==='y'){
                                                return(date.getFullYear()+'').substr(4-all.length);
                                            }
                                            return all;
                                        });
                                        return format;
                                    }
                                    return dateFormat(val,arg)
                                })
                                var vm = new Vue({
                                    el:'#app',
                                    data:{
                                        date:new Date()
                                    }
                                })
                            </script>
                        </body>
                        </html>
    
                 
            

7.生命周期

    1.主要阶段

  • 挂载(初始化相关属性)
  • 1⃣️beforeCreate(在实例初始化之后,数据观测和事件配置之前被调用)

    2⃣️Created(在实例创建完成后被立即调用)

    3⃣️beforeMount (在挂载开始之前被调用)

    4⃣️mounted (el 被新创建的vm.$el替换,并挂载到实例上去之后调用的该钩子)

  • 更新(元素或组件的变更操作)
  • 1⃣️beforeUpdate(数据更新时调用,发生在虚拟Dom打补丁之前)

    2⃣️updated(由于数据更改导致的虚拟Dom重新渲染和打补丁,在这之后会调用该钩子)

  • 销毁(销毁相关属性)
  • 1⃣️beforeDestroy (实例销毁之前被调用)

    2⃣️destroyed (实例销毁后调用)

发布时间:2019-10-04