Vue 常用特性:表单操作自定义指令计算属性侦听器过滤器生命周期

Posted _Tough_Girl

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Vue 常用特性:表单操作自定义指令计算属性侦听器过滤器生命周期相关的知识,希望对你有一定的参考价值。

1、Vue 常用特性

1.1 Vue 常用特性概览

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

1.2 表单操作

(1)基于 Vue 的表单操作

  • Input 单行文本
  • textarea 多行文本
  • select 下拉多选
  • radio 单选框
  • checkbox 多选框

(2)表单域修饰符

  • number:转化为数值
  • trim:去掉开始和结尾的空格
  • lazy : 将 input 事件切换为 change 事件
<input type="text" v-model.number='age'>
<input type="text" v-model.trim='info'>
<input type="text" v-model.lazy='msg'>

1.3 自定义指令

(1)为何需要自定义指令?

内置指令不满足需求。

(2)自定义指令的语法规则(获取元素焦点)

// 自定义指令
Vue.directive('focus', {
    // 当被绑定的元素插入到 DOM 中时
    inserted: function (el) {
        // el表示指令所绑定的元素
        el.focus();  // 获取焦点
    }
});

(3)自定义指令用法

<input type="text" v-focus>

(4)带参数的自定义指令(改变元素背景色)

// 自定义指令-带参数
Vue.directive('color', {
    // el:指令所绑定的元素,可以用来直接操作 DOM。
    // binding:一个对象,包含:
    // name:指令名,不包括 v- 前缀。
    // value:指令的绑定值  除此之外还有其他内容,这里省略
    bind: function (el, binding) {
        // console.log(binding);
        // console.log(binding.value);
        console.log(binding.value.color);
        // 根据指令的参数设置背景色
        el.style.backgroundColor = binding.value.color;
    }
});

(5) 指令的用法

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

(6)局部指令

 // 自定义指令-局部指令
 var vm = new Vue({
     el: '#app',
     data: {
         msg: {
             color: 'red'
         }
     },
     methods: {
         handle: function () {
         }
     },
     directives: {
         color: {
             // el:指令所绑定的元素,可以用来直接操作 DOM。
             // binding:一个对象,包含:
             // name:指令名,不包括 v- 前缀。
             // value:指令的绑定值  除此之外还有其他内容,这里省略
             bind: function (el, binding) {
                 // console.log(binding);
                 // console.log(binding.value);
                 console.log(binding.value.color);
                 // 根据指令的参数设置背景色
                 el.style.backgroundColor = binding.value.color;
             }
         },
         focus: {
             inserted: function (el) {
                 el.focus();
             }
         }
     }
 });

<div id="app">
    <input type="text" v-color='msg'>
    <input type="text" v-focus>
</div>

1.4 计算属性

(1) 为何需要计算属性?

表达式的计算逻辑可能会比较复杂,使用计算属性可以使模板内容更加简洁。

(2)计算属性的用法

<!-- 为何需要计算属性? -->
<!-- 表达式的计算逻辑可能会比较复杂,使用计算属性可以使模板内容更加简洁 -->
<div id="app">
    <div>{{msg}}</div>
    <div>{{reverseString}}</div>
</div>
<script src="js/vue.js"></script>
<script>
    var vm = new Vue({
        el: '#app',
        data: {
            msg: 'ni hao'
        },
        // 计算属性
        computed: {
            reverseString: function () {
                return this.msg.split('').reverse().join('');
            }
        }
    });
</script>

(3) 计算属性与方法的区别

  • 计算属性是基于它们的依赖进行缓存的。
  • 方法不存在缓存。

1.5 侦听器

(1)侦听器的应用场景

数据变化时执行异步或开销较大的操作。


(2)侦听器的用法

<div id="app">
    <div>
        <span>名:</span>
        <span>
            <input type="text" v-model='firstName'>
        </span>
    </div>
    <div>
        <span>姓:</span>
        <span>
            <input type="text" v-model='lastName'>
        </span>
    </div>
    <div>{{fullName}}</div>
</div>
<script type="text/javascript" src="js/vue.js"></script>
<!-- 侦听器的应用场景:数据变化时执行异步或开销较大的操作 -->
<script>
    var vm = new Vue({
        el: '#app',
        data: {
            firstName: 'Jim',
            lastName: 'Green',
            fullName: 'Jim Green'
        },
        // 计算属性
        // computed: {
        //     fullName: function () {
        //         return this.firstName + ' ' + this.lastName;
        //     }
        // },
        // 侦听器:数据一旦发生变化就通知侦听器所绑定方法
        watch: {
            firstName: function (val) {
                // val表示变化之后的值
                this.fullName = val + ' ' + this.lastName;
            },
            lastName: function (val) {
                // val表示变化之后的值
                this.fullName = this.firstName + ' ' + val;
            }
        }
    });
</script>

1.6 过滤器

(1)过滤器的作用是什么?

格式化数据,比如将字符串格式化为首字母大写,将日期格式化为指定的格式等。


(2)自定义过滤器

Vue.filter(‘过滤器名称’, function(value){
	// 过滤器业务逻辑
})

(3)过滤器的使用(支持级联操作 )

<div>{{msg | upper}}</div>
<div>{{msg | upper | lower}}</div>
<div v-bind:id=“id | formatId"></div>

(4)局部过滤器

filters:{
	upper: function(){}
}

例子:

<!-- 过滤器的作用是什么?
格式化数据,比如将字符串格式化为首字母大写,将日期格式化为指定的格式等 -->
<div id="app">
    <input type="text" v-model='msg'>
    <div>{{msg | upper}}</div>
    <div>{{msg | upper | lower}}</div>
    <div v-bind:abc='msg | upper'>测试数据</div>
</div>
<script src="js/vue.js"></script>
<script>
    // 过滤器
    // 1、可以用与插值表达式和属性绑定
    // 2、支持级联操作 
    // 全局过滤器
    // Vue.filter('upper', function (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: ''
        },
        // 局部过滤器
        filters: {
            upper: function (val) {
                return val.charAt(0).toUpperCase() + val.slice(1);
            }
        }
    })
</script>

(5)带参数的过滤器

Vue.filter(‘format’, function(value, arg1){
	// value就是过滤器传递过来的参数
})

(6)过滤器的使用

<div>{{date | format(‘yyyy-MM-dd')}}</div>

例子:

 <div id="app">
     <div>{{date | format('yyyy-MM-dd')}}</div>
 </div>
 <script src="js/vue.js"></script>
 <script>
     // 过滤器案例:格式化日期
     Vue.filter('format', function (value, arg) {
         // value就是过滤器传递过来的参数
         if (arg == 'yyyy-MM-dd') {
             var ret = '';
             ret += value.getFullYear() + '-' + (value.getMonth() + 1) + '-' + value.getDate();
             return ret;
         }
     });
     
    var vm = new Vue({
        el: '#app',
        data: {
            date: new Date()
        }
    });
</script>

1.7 生命周期

(1)主要阶段

  • 挂载(初始化相关属性)
    ① beforeCreate
    ② created
    ③ beforeMount
    ④ mounted

  • 更新(元素或组件的变更操作)
    ① beforeUpdate
    ② updated

  • 销毁(销毁相关属性)
    ① beforeDestroy
    ② destroyed

(2)Vue 实例的产生过程
beforeCreate:在实例初始化之后,数据观测和事件配置之前被调用。此时组件的选项对象还未创建,el 和 data 并未初始化,因此无法访问 methods, data, computed等上的方法和数据。

created:在实例创建完成后被立即调用。在这一步,实例已完成以下配置:数据观测、属性和方法的运算,watch/event事件回调,完成了data 数据的初始化,el没有。

beforeMount:在挂载开始之前被调用。相关的 render 函数首次被调用(虚拟DOM),实例已完成以下的配置: 编译模板,把 data 里面的数据和模板生成 html,完成了 el 和 data 初始化,注意此时还没有挂在 html 到页面上。

mounted:el 被新创建的 vm.$el 替换,并挂载到实例上去之后调用该钩子。模板中的 HTML 渲染到 HTML 页面中,此时一般可以做一些 ajax 操作,mounted 只会执行一次。

beforeUpdate:数据更新时调用,发生在虚拟DOM打补丁之前。

updated:由于数据更改导致的虚拟DOM重新渲染和打补丁,在这之后会调用该钩子。

beforeDestroy:实例销毁之前调用,此时实例仍然完全可用。这一步还可以用 this 来获取实例,一般在这一步做一些重置的操作,比如清除掉组件中的定时器 和 监听的 dom 事件。

destroyed:实例销毁后调用。调用后,所以的事件监听器会被移出,所有的子实例也会被销毁,该钩子在服务器端渲染期间不被调用。

以上是关于Vue 常用特性:表单操作自定义指令计算属性侦听器过滤器生命周期的主要内容,如果未能解决你的问题,请参考以下文章

表单修饰符自定义指令计算属性侦听器过滤器生命周期

Vue常用特性

Vue入门基础

Vue-基础

Vue常用指令 񳳌

VUE_渐进式JS框架目录