美文网首页
Vue生命周期中mounted和created的区别

Vue生命周期中mounted和created的区别

作者: 家乡_a6ce | 来源:发表于2021-10-26 09:27 被阅读0次

1、在使用vue框架的过程中,我们经常需要给一些数据做一些初始化处理,这时候我们常用的就是在created与mounted选项中作出处理。

首先来看下官方解释,官方解释说created是在实例创建完成后立即调用。在这一步,实例已完成以下配置:数据观测 (data observer),属性和方法的运算,watch/event 事件回调。然而,挂载阶段还没开始,$el 属性目前不可见。

这话的意思我觉得重点在于说挂架阶段还没开始,什么叫还没开始挂载,也就是说,模板还没有被渲染成html,也就是这时候通过id什么的去查找页面元素是找不到的。下面看下实例来证明。


image.png

看这个例子的结果截图如下,此错误证明找不到id为name的Dom元素。即模板还未渲染成html


image.png
所以,一般creadted钩子函数主要是用来初始化数据。

2、mounted钩子函数一般是用来向后端发起请求拿到数据以后做一些业务处理。官方解释如下:

el 被新创建的 vm.el 替换,并挂载到实例上去之后调用该钩子。如果 root 实例挂载了一个文档内元素,当 mounted 被调用时 vm.el 也在文档内。

这意思是该钩子函数是在挂在完成以后也就是模板渲染完成以后才会被调用。下面看实例


image.png image.png

取到了值,这说明这时候vue模板已经渲染完毕。因此,Dom操作一般是在mounted钩子函数中进行的

computed:{} 计算属性,什么是计算属性呢,我个人理解就是对数据进行一定的操作,可以包含逻辑处理操作,对计算属性中的数据进行监控。计算属性是基于它的以来进行更新的,只有在相关依赖发生改变时侧能更新变化,以函数的形式返回结果。然后可以像绑定普通属性一样在模板中绑定计算属性。

<body>
        <div id="box" :class="{a:true,b:true}">
            <div></div>
            {{msg}}
            <div>
                网址 {{msg}}的网络协议是:{{msg2}}
            </div>
        </div>
            <script type="text/javascript">
            window.οnlοad=function(){
                new Vue({
                    el:"#box",
                    data:{
                        msg:"https://www.baidu.com"
                    },
                    computed:{
                        msg2:function(){
                            var s=this.msg.split(":")[0];
                            return s;
                        }
                    }
                })
            }
        </script>
    </body>
image.png

我们从图中看两个节点:
created:在模板渲染成html前调用,即通常初始化某些属性值,然后再渲染成视图。
mounted:在模板渲染成html后调用,通常是初始化页面完成后,再对html的dom节点进行一些需要的操作。
其实两者比较好理解,通常created使用的次数多,而mounted通常是在一些插件的使用或者组件的使用中进行操作,比如插件chart.js的使用: var ctx = document.getElementById(ID); 通常会有这一步,而如果你写入组件中,你会发现在created中无法对chart进行一些初始化配置,一定要等这个html渲染完后才可以进行,那么mounted就是不二之选。下面看一个例子(用组件)。

Vue.component("demo1",{
        data:function(){
            return {
                name:"",
                age:"",
                city:""
            }
        },
        template:"<ul><li id='name'>{{name}}</li><li>{{age}}</li><li>{{city}}</li></ul>",
        created:function(){
            this.name="唐浩益"
            this.age = "12"
            this.city ="杭州"
            var x = document.getElementById("name")//第一个命令台错误
            console.log(x.innerHTML);
        },
        mounted:function(){
            var x = document.getElementById("name")//第二个命令台输出的结果
            console.log(x.innerHTML);
        }
    });
    var vm = new Vue({
        el:"#example1"
    })

可以看到输出如下:


image.png

可以看到都在created赋予初始值的情况下成功渲染出来了。
但是同时看console台如下:


image.png
可以看到第一个报了错,实际是因为找不到id,getElementById(ID) 并没有找到元素,原因如下:
在created的时候,视图中的html并没有渲染出来,所以此时如果直接去操作html的dom节点,一定找不到相关的元素

而在mounted中,由于此时html已经渲染出来了,所以可以直接操作dom节点,故输出了结果“唐浩益”。
以上就是我自己总结的mounted和mounted的区别,写的比较简陋,记录下来,加深印象。

相关文章

  • 2019 vue常见面试题

    1. vue 组件的生命周期? 2. created 和 mounted 有什么区别?(挂载完成之后 this.$...

  • Vue生命周期

    Vue 生命周期 beforeCreate created beforeMount mounted beforeU...

  • Vue生命周期的理解

    vue生命周期: beforeCreate、created、beforeMount、mounted、beforeU...

  • 2019-04-22记面试

    Vue: 1️⃣生命周期 beforeCreate;created;beforeMount;mounted;upd...

  • vue生命周期

    vue生命周期除了下图中的beforeCreate, created, beforeMount, mounted,...

  • Vue面试题

    1、Vue的生命周期? beforeCreate 、created、beforeMount、mounted、bef...

  • Vue生命周期及组件生命周期

    Vue生命周期 created阶段的ajax请求与mounted请求的区别:前者页面视图未出现,如果请求信息过多,...

  • 2018-04-17(vue学习小结--生命周期)

    vue的生命周期分为8个: beforeCreate,created>beforeMount,mounted>be...

  • 01-vue入门

    基础知识: vue的生命周期: beforeCreate/created、 beforeMount/mounted...

  • 面试题大总结

    1.Vue的生命周期?beforeCreate》created》beforeMount 》mounted 》bef...

网友评论

      本文标题:Vue生命周期中mounted和created的区别

      本文链接:https://www.haomeiwen.com/subject/bnqsaltx.html