VUE钩子函数

146 阅读1分钟

1.beforeCreate --创建前

触发的行为:vue实例的挂载元素$el和数据对象data都为undefined,还未初始化。

在此阶段可以做的事情:加loading事件

2.created --创建后

触发的行为:vue实例的数据对象data有了,$el还没有

在此阶段可以做的事情:解决loading,请求ajax数据为mounted渲染做准备

3.beforeMount --渲染前

触发的行为:vue实例的$el和data都初始化了,但还是虚拟的dom节点,具体的data.filter还未替换

在此阶段可以做的事情:。。。

4.mounted --渲染后

触发的行为:vue实例挂载完成,data.filter成功渲染

在此阶段可以做的事情:配合路由钩子使用

5.beforeUpdate --更新前

触发的行为:data更新时触发

在此阶段可以做的事情:。。。

6.updated —更新后

触发的行为:data更新时触发

在此阶段可以做的事情:数据更新时,做一些处理(此处也可以用watch进行观测)

7.beforeDestroy —销毁前

触发的行为:组件销毁时触发

在此阶段可以做的事情:可向用户询问是否销毁

8.destroyed —销毁后

触发的行为:组件销毁时触发,vue实例解除了事件监听以及和dom的绑定(无响应了),但DOM节点依旧存在

在此阶段可以做的事情:组件销毁时进行提示

用钩子函数实现小球动画

代码:

<body>
    <div id="app">
        <input type="button" value="快到碗里来" @click="flag=!flag">
        <!-- 使用transition元素 把小球包裹起来 -->
        <transition 
        @before-enter="bforeEnter"
        @enter="enter"
        @after-enter="afterEnter">
        <div class="ball" v-show="flag"></div>
        </transition>
    </div>
    <script>
        let vm = new Vue({
            el: "#app",
            data: {
               flag:false
            },
            methods:{
                bforeEnter(el){
                    el.style.transform="translate(0,0)"
                },
                enter(el,dona){
                    el.offseWidth
                    // 表示都动画之后的样式 可以设置小球完成动画的结束状态
                    el.style.transform="translate(150px,450px)"
                    el.style.transform="all is ease"
                    dona()
                },
                afterEnter(el){
                    this.flag=this.flag
                }
            }
        })
    </script>
</body>

引入css样式:

<script src="./js/vue.js"></script>
    <style>
        .ball{
            width: 15px;
            height: 15px;
            border-radius: 50%;
            background-color: red;
        }
    </style>

效果:点击

image.png