vue生命周期和组件

vue生命周期和组件

1.事件

1)函数内部阻止事件冒泡 e.cancelBubble=true;2)标签内阻止事件冒泡 @click.stop=“show1()”3)键盘事件 keydown 函数中获取键盘编码keyCode4)在标签内直接绑定按键事件 @keyup.13=“show()” @keyup.enter=“show()”

<!DOCTYPE html>
<html>
    <head>
        <meta charset="UTF-8">
        <title></title>
        <script src="vue.js" type="text/javascript" charset="utf-8"></script>
    </head>
    <body>
        <div id="out">
        <div @click='fu()'>
            父元素
            <!--第一种阻止事件冒泡的写法-->
            <!--<button @click.stop='zi()'>子元素</button>-->
            <button @click='zi($event)'>子元素</button>
        </div>
        </div>
    </body>
    <script type="text/javascript">
        var vm=new Vue({
            el:"#out",
            methods:{
                fu(){
                    console.log('fu')
                },
                zi(e){
                    e.cancelBubble=true;
                    console.log('zi')
                }
            }
        })
    </script>
</html>


一、生命周期

1.钩子函数:指一方面有变动,另一方面立马来处理这些变动的函数称为钩子函数。

每个钩子函数的this指向,必须指向VUE实例化对象

<!DOCTYPE html>
<html>
    <head>
        <meta charset="UTF-8">
        <title></title>
        <script src="vue.js" type="text/javascript" charset="utf-8"></script>
    </head>
    <body>
        <div id="out">
            <p>{{info}}</p>
            <button @click='update()'>更新</button>
            <button @click='tap()'>销毁</button>
        </div>
    </body>
    <script type="text/javascript">
        var vm=new Vue({
            el:"#out",
            data:{
                info:"hello"
            },
            methods:{
                update(){
                    this.info='hi'
                },
                tap(){
                    this.$destroy()//销毁:数据以及事件跟vue实例做一个解绑
                }
                
            },
            beforeCreate(){//用这个实现的效果是loading图的展示
                
            },
            created(){//到这里只是创建完了,并没有挂载节点
                console.log(this.info)
                
            },
            beforeMount(){//在挂载之前改下数据也是可以的
                
            },
            mounted(){//挂载完成以后进行数据的获取,axios请求,关闭loading
            console.log(this.$el)
            },
            beforeUpdate(){
                console.log(1)
            },
            updated(){//data里的数据发生更改,这两个函数就会被触发
                console.log(2)
            },
            beforeDestroy(){
                console.log('xiaohui1')
            },
            destroyed(){//销毁必须调用destroyed的方法才能触发
                console.log('xiaohui2')
            }
        })
    </script>
</html>

2.生命周期是什么:

vue实例化对象或组件对象从开始创建到完全销毁的一个过程被称为一个生命周期。

3.为什么要用它以及神魔时候去用它?

因为实例化在创建以及组件在进行构建的过程中要发生一系列的改变,不管是组件数据的变更还是组件移除,都要发生变更,这些变更只能借助生命周期提供的函数进行操作,一旦组件或实例化对象发生变更的时候,需要做一些数据的处理的情况下,需要管理组件成长阶段里的变更,这时候必须要用生命周期进行管理,因为生命周期里提供了钩子函数,方便对于组件以及实例化对象的变更来做处理,所以我们要用到生命周期。

4.如何来用它?

生命周期大体分为四个阶段:四个阶段分别是什么,每个阶段提供的函数是什么,除了这四个阶段意外,因为官方提供的是11个,另外三个钩子函数是干神魔的

二、组件(重中之重)

1.组件是带有结构、样式以及行为的几何体

2.两种写法:

1)全局写法:

// 注册组件,传入一个扩展过的构造器Vue.component('my-component', Vue.extend({ /* ... / }))

// 注册组件,传入一个选项对象(自动调用 Vue.extend)Vue.component('my-component', { / ... */ })

// 获取注册的组件(始终返回构造器)var MyComponent = Vue.component('my-component')

2)私有写法:

vue实例化 中 components { ‘组件名’: 组件内容 }

<!DOCTYPE html>
<html>
    <head>
        <meta charset="UTF-8">
        <title></title>
        <script src="vue.js" type="text/javascript" charset="utf-8"></script>
    </head>
    <body>
        <div id="out">
            <h1>组件</h1>
            <v-header></v-header>
            <v-con></v-con>
            <v-footer></v-footer>
        </div>
    </body>
    <script type="text/javascript">
        //全局的组件,任何实例化对象都能用
        Vue.component('v-header',Vue.extend({
            //在这里这样用
            template:`<div>
                    <div>hello</div>
                    <p>{{str}}</p>
                    <button @click="tap()">事件</button>
                      </div>`,
               data:function(){//组建的数据存储方式
                return{
                    str:'hi'
                }
               },
               methods:{
                tap(){
                    this.str='hello world'
                }
               }
        
        
        }))
        //简写
    var con=Vue.component('v-con',{
            template:'<h1>he组件</h1>',
            mounted(){
                console.log('组件挂载')
            }
        })
        console.log(con)//组件的本质是一个对象
        
        var vm=new Vue({
            el:'#out',
            methods:{
                
            },
            //私有组件
            components:{
                'v-footer':{
                    template:'<h2>私有组件</h2>'
                }
            }
        })
    </script>
</html>

三、模板

Vue.js 使用了基于 HTML 的模版语法,允许开发者声明式地将 DOM 绑定至底层 Vue 实例的数据。所有 Vue.js 的模板都是合法的 HTML ,所以能被遵循规范的浏览器和 HTML 解析器解析。在底层的实现上, Vue 将模板编译成虚拟 DOM 渲染函数。结合响应系统,在应用状态改变时, Vue 能够智能地计算出重新渲染组件的最小代价并应用到 DOM 操作上。

四、用组件封装一个点击登录的功能

<!DOCTYPE html>
<html>
    <head>
        <meta charset="UTF-8">
        <title></title>
        <script src="vue.js" type="text/javascript" charset="utf-8"></script>
    </head>
    <style>
        .toast{
            position: fixed;
            left: 50%;
            top:50%;
            background: rgba(0,0,0,.35);
            padding: 10px;
            border-radius: 5px;
            transform: translate(-50%,-50%);
            color:#fff;
          }

    </style>
    <body>
        <div id="out">
            <button @click="tap()">toast提示框</button>
        </div>
        
        
        
    </body>
    <script type="text/javascript">
        //目的是点完以后把这个组件显示出来
        var Toast=Vue.component('Toast',{
            template:`<div class="toast" v-if="isshow">
                  {{text}}
            </div>`,
            data(){
                return{
                    text:'登陆成功',
                    isshow:true,
                    duration:2000//隔多久隐藏
                }
            }
        })
            
        
        var toast=function(){
            let vueToast=new Toast({//vueToast对象作用的范围是新创建的div元素
                el:document.createElement("div")
            })
            //把当前作用的dom元素插入到浏览器里面
            document.body.appendChild(vueToast.$el)
            //放到body里面调用toast函数这个组件就可以展示了
            
            setTimeout(function(){
                vueToast.isshow=false;
            },vueToast.duration)
        }
        
        
        var vm=new Vue({
            el:"#out",
            methods:{
                tap(){
                    toast()
                }
            }
        })
        
    
    </script>
</html>
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 213,047评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,807评论 3 386
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 158,501评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,839评论 1 285
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,951评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,117评论 1 291
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,188评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,929评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,372评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,679评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,837评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,536评论 4 335
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,168评论 3 317
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,886评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,129评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,665评论 2 362
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,739评论 2 351

推荐阅读更多精彩内容

  • 谁的闺女这么调皮? 妈妈拄着拐,单脚费劲的蹦,她却张开双臂,左跳右跳,挡住妈妈的去路 好不容易蹦出几步远,她却拦腰...
    蓝紫色jg阅读 475评论 5 10
  • 慵懒的周末啦 周六收拾屋子一整天 晚上跟大学社团的老同学出去吃了个饭 夫妻俩都不是东北的 现在沈阳扎根了 他们说学...
    面包和牛奶都会有的阅读 216评论 0 0
  • 今天上班没那么累了。心情也没好多少。晚上接儿子回家,儿子还想着去同学家玩。一开始我没同意,看他在家不好好学习,...
    star卫星阅读 172评论 0 0
  • 近一年的沉浸,增长的除了是年龄,还有的就是岁月中的经历。在过去的一年,本以为发生巨大变化的生活还是持续的进...
    落庭暖月阅读 190评论 0 0