VUE中的钩子函数及其参数

来源:程序思维浏览:2780次

VUE中的钩子函数及其参数

指令定义函数提供了几个钩子函数(可选):


1.0版本中的钩子函数
    bind: 只调用一次,指令第一次绑定到元素时调用,用这个钩子函数可以定义一个在绑定时执行一次的初始化动作。
    update: 被绑定元素所在的模板更新时调用,而不论绑定值是否变化。通过比较更新前后的绑定值,可以忽略不必要的模板更新
    unbind: 只调用一次, 指令与元素解绑时调用。

2.0新增的钩子函数
    inserted: 被绑定元素插入父节点时调用(父节点存在即可调用,不必存在于 document 中)。
    componentUpdated: 被绑定元素所在模板完成一次更新周期时调用。


接下来我们来看一下钩子函数的参数 :(包括 el,binding,vnode,oldVnode)

el: 指令所绑定的元素,可以用来直接操作 DOM 。
binding: 一个对象,包含以下属性:
    name: 指令名,不包括 v- 前缀。
    value: 指令的绑定值, 例如: v-my-directive="1 + 1", value 的值是 2。
    oldValue: 指令绑定的前一个值,仅在 update 和 componentUpdated 钩子中可用。无论值是否改变都可用。
    expression: 绑定值的字符串形式。 例如 v-my-directive="1 + 1" , expression 的值是 "1 + 1"。
    arg: 传给指令的参数。例如 v-my-directive:foo, arg 的值是 "foo"。
    modifiers: 一个包含修饰符的对象。 例如: v-my-directive.foo.bar, 修饰符对象 modifiers 的值是 { foo: true, bar: true }。
vnode: Vue 编译生成的虚拟节点,查阅 VNode API 了解更多详情。
oldVnode: 上一个虚拟节点,仅在 update 和 componentUpdated 钩子中可用。

3.2.3.1. 钩子函数

五个钩子函数

<!DOCTYPE html>
<html>

    <head>
        <meta charset="utf-8">
        <title>Vue 测试实例 - 菜鸟教程(runoob.com)</title>
        <script src="https://unpkg.com/vue/dist/vue.js"></script>
    </head>

    <body>
        <!--视图-->
        <div id="app">
            <div v-if='message'>
                <input type="text" v-my-directive="message" v-model='message' />
            </div>
        </div>
    </body>

</html>
<script>
    //指令名称          有了指令    能干什么
    Vue.directive('my-directive', {
        //第一次绑定的时候调用        只调用一次
        bind: function(el, binding, vnode, oldnode) {
            console.log('bind    ', arguments)
        },
        //被绑定元素插入父节点时调用(父节点存在即可调用,不必存在于 document 中)
        inserted: function(el) {
            console.log("inserted")
        },
        //更新的时候调用
        update: function() {
            console.log('updata')
        },
        //解绑定的时候调用
        unbind: function() {
            console.log('unbind   ', arguments)
        },

        //组件完成一个周期调用
        componentUpdated: function() {
            console.log("componentUpdated")
        }
    })

    var vm = new Vue({
        el: '#app',
        data: {
            message: "hello"
        }
    })

    vm.$data.message = 1000;
</script>

3.2.3.2. 钩子函数的参数和binding参数的属性

钩子函数的四个参数和binding参数的六个个属性

<!DOCTYPE html>
<html>

    <head>
        <meta charset="utf-8">
        <title>Vue 测试实例 - 菜鸟教程(runoob.com)</title>
        <script src="https://unpkg.com/vue/dist/vue.js"></script>
    </head>

    <body>
        <!--视图-->
        <div id="app">

            <div v-if='message'>
                <input type="text" v-my-directive="message" v-model='message' />
            </div>
        </div>
    </body>

</html>
<script>
    //指令名称          有了指令    能干什么     五个钩子函数
    Vue.directive('my-directive', {
        //第一次绑定的时候调用        只调用一次
        bind: function(el, binding, vnode, oldnode) {
            console.log('bind    ', arguments)
        },
        //被绑定元素插入父节点时调用(父节点存在即可调用,不必存在于 document 中)
        inserted: function(el) {
            console.log("inserted")
        },
        //更新的时候调用
        update: function() {
            console.log('updata')
        },
        //解绑定的时候调用
        unbind: function() {
            console.log('unbind   ', arguments)
        },

        //组件完成一个周期调用
        componentUpdated: function() {
            console.log("componentUpdated")
        }
    })

    var vm = new Vue({
        el: '#app',
        data: {
            message: "hello"
        }
    })

    vm.message = 1000;
</script>

3.2.4. 补充

3.2.4.1. 自定义指令子简写

大多数情况下,我们可能想在 bind 和 update 钩子上做重复动作,并且不想关心其它的钩子函数

<!DOCTYPE html>
<html>

    <head>
        <meta charset="utf-8">
        <title>Vue 测试实例 - 菜鸟教程(runoob.com)</title>
        <script src="https://cdn.bootcss.com/vue/2.2.2/vue.min.js"></script>
    </head>

    <body>
        <div id="app">
            <div v-color-swatch="{ color: 'green', text: '菜鸟教程!' }">
                test
            </div>
        </div>

        <script>
            //大多数情况下,我们可能想在 bind 和 update 钩子上做重复动作,并且不想关心其它的钩子函数。可以这样写:
            Vue.directive('color-swatch', function(el, binding) {
                //el: 可以直接通过el操作dom
                el.style.backgroundColor = binding.value.color;
            })

            new Vue({
                el: '#app'
            })
        </script>
    </body>

</html>

3.2.4.2. 自定义指令之对象字面量

如果指令需要多个值,可以传入一个 JavaScript 对象字面量。 记住,指令函数能够接受所有合法类型的 JavaScript 表达式。

<!DOCTYPE html>
<html>

    <head>
        <meta charset="UTF-8">
        <title></title>
        <!--引入js-->
        <script src="https://unpkg.com/vue/dist/vue.js"></script>
    </head>

    <body>
        <div id="app">
            <!--在这里加入模型数据-->
            {{ message }}

            <!--自定义指令-->
            <div v-runoob="{ color: 'green', text: '菜鸟教程!' }"></div>

        </div>
    </body>

</html>
<script>
    Vue.directive('runoob', function(el, binding) {
        //el: 可以直接通过el操作dom
        el.innerHTML = binding.value.text;
        el.style.backgroundColor = binding.value.color;
    })

    var dataModel = {
        message: 'hello world!'
    }
    var vm = new Vue({
        el: '#app',
        data: dataModel
    })
</script>
精品好课
HTML5视频播放器video开发教程
适用人群1、有html基础2、有css基础3、有javascript基础课程概述手把手教你如何开发属于自己的HTML5视频播放器,利用mp4转成m3u8格式的视频,并在移动端和PC端进行播放支持m3u8直播格式,兼容...
React实战视频教程仿京东移动端电商
React是前端最火的框架之一,就业薪资很高,本课程教您如何快速学会React并应用到实战,对正在工作当中或打算学习React高薪就业的你来说,那么这门课程便是你手中的葵花宝典。
最新完整React+VUE视频教程从入门到精,企业级实战项目
React和VUE是目前最火的前端框架,就业薪资很高,本课程教您如何快速学会React和VUE并应用到实战,教你如何解决内存泄漏,常用库的使用,自己封装组件,正式上线白屏问题,性能优化等。对正在工作当中或打算学习Re...
jQuery视频教程从入门到精通
jquery视频教程从入门到精通,课程主要包含:jquery选择器、jquery事件、jquery文档操作、动画、Ajax、jquery插件的制作、jquery下拉无限加载插件的制作等等......
Vue2+Vue3+ES6+TS+Uni-app开发微信小程序从入门到实战视频教程
2021年最新Vue2+Vue3+ES6+TypeScript和uni-app开发微信小程序从入门到实战视频教程,本课程教你如何快速学会VUE和uni-app并应用到实战,教你如何解决内存泄漏,常用UI库的使用,自己...
最新完整React视频教程从入门到精通纯干货纯实战
React是目前最火的前端框架,就业薪资很高,本课程教您如何快速学会React并应用到实战,教你如何解决内存泄漏,常用UI库的使用,自己封装组件,正式上线白屏问题,性能优化等。对正在工作当中或打算学习React高薪就...
VUE2+VUE3视频教程从入门到精通(全网最全的Vue课程)
VUE是目前最火的前端框架之一,就业薪资很高,本课程教您如何快速学会VUE+ES6并应用到实战,教你如何解决内存泄漏,常用UI库的使用,自己封装组件,正式上线白屏问题,性能优化等。对正在工作当中或打算学习VUE高薪就...
HTML5基础入门视频教程易学必会
HTML5基础入门视频教程,教学思路清晰,简单易学必会。适合人群:创业者,只要会打字,对互联网编程感兴趣都可以学。课程概述:该课程主要讲解HTML(学习HTML5的必备基础语言)、CSS3、Javascript(学习...
收藏
扫一扫关注我们