vue生命周期和組件

vue生命周期和組件

1.事件

1)函數(shù)內(nèi)部阻止事件冒泡 e.cancelBubble=true;2)標(biāo)簽內(nèi)阻止事件冒泡 @click.stop=“show1()”3)鍵盤事件 keydown 函數(shù)中獲取鍵盤編碼keyCode4)在標(biāo)簽內(nèi)直接綁定按鍵事件 @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.鉤子函數(shù):指一方面有變動(dòng),另一方面立馬來(lái)處理這些變動(dòng)的函數(shù)稱為鉤子函數(shù)。

每個(gè)鉤子函數(shù)的this指向哲身,必須指向VUE實(shí)例化對(duì)象

<!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()//銷毀:數(shù)據(jù)以及事件跟vue實(shí)例做一個(gè)解綁
                }
                
            },
            beforeCreate(){//用這個(gè)實(shí)現(xiàn)的效果是loading圖的展示
                
            },
            created(){//到這里只是創(chuàng)建完了绣檬,并沒(méi)有掛載節(jié)點(diǎn)
                console.log(this.info)
                
            },
            beforeMount(){//在掛載之前改下數(shù)據(jù)也是可以的
                
            },
            mounted(){//掛載完成以后進(jìn)行數(shù)據(jù)的獲取俭缓,axios請(qǐng)求昌屉,關(guān)閉loading
            console.log(this.$el)
            },
            beforeUpdate(){
                console.log(1)
            },
            updated(){//data里的數(shù)據(jù)發(fā)生更改渴语,這兩個(gè)函數(shù)就會(huì)被觸發(fā)
                console.log(2)
            },
            beforeDestroy(){
                console.log('xiaohui1')
            },
            destroyed(){//銷毀必須調(diào)用destroyed的方法才能觸發(fā)
                console.log('xiaohui2')
            }
        })
    </script>
</html>

2.生命周期是什么:

vue實(shí)例化對(duì)象或組件對(duì)象從開(kāi)始創(chuàng)建到完全銷毀的一個(gè)過(guò)程被稱為一個(gè)生命周期枯冈。

3.為什么要用它以及神魔時(shí)候去用它毅贮?

因?yàn)閷?shí)例化在創(chuàng)建以及組件在進(jìn)行構(gòu)建的過(guò)程中要發(fā)生一系列的改變,不管是組件數(shù)據(jù)的變更還是組件移除霜幼,都要發(fā)生變更嫩码,這些變更只能借助生命周期提供的函數(shù)進(jìn)行操作,一旦組件或?qū)嵗瘜?duì)象發(fā)生變更的時(shí)候罪既,需要做一些數(shù)據(jù)的處理的情況下铸题,需要管理組件成長(zhǎng)階段里的變更,這時(shí)候必須要用生命周期進(jìn)行管理琢感,因?yàn)樯芷诶锾峁┝算^子函數(shù)丢间,方便對(duì)于組件以及實(shí)例化對(duì)象的變更來(lái)做處理,所以我們要用到生命周期驹针。

4.如何來(lái)用它烘挫?

生命周期大體分為四個(gè)階段:四個(gè)階段分別是什么,每個(gè)階段提供的函數(shù)是什么柬甥,除了這四個(gè)階段意外饮六,因?yàn)楣俜教峁┑氖?1個(gè),另外三個(gè)鉤子函數(shù)是干神魔的

二苛蒲、組件(重中之重)

1.組件是帶有結(jié)構(gòu)卤橄、樣式以及行為的幾何體

2.兩種寫法:

1)全局寫法:

// 注冊(cè)組件,傳入一個(gè)擴(kuò)展過(guò)的構(gòu)造器Vue.component('my-component', Vue.extend({ /* ... / }))

// 注冊(cè)組件臂外,傳入一個(gè)選項(xiàng)對(duì)象(自動(dòng)調(diào)用 Vue.extend)Vue.component('my-component', { / ... */ })

// 獲取注冊(cè)的組件(始終返回構(gòu)造器)var MyComponent = Vue.component('my-component')

2)私有寫法:

vue實(shí)例化 中 components { ‘組件名’: 組件內(nèi)容 }

<!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">
        //全局的組件窟扑,任何實(shí)例化對(duì)象都能用
        Vue.component('v-header',Vue.extend({
            //在這里這樣用
            template:`<div>
                    <div>hello</div>
                    <p>{{str}}</p>
                    <button @click="tap()">事件</button>
                      </div>`,
               data:function(){//組建的數(shù)據(jù)存儲(chǔ)方式
                return{
                    str:'hi'
                }
               },
               methods:{
                tap(){
                    this.str='hello world'
                }
               }
        
        
        }))
        //簡(jiǎn)寫
    var con=Vue.component('v-con',{
            template:'<h1>he組件</h1>',
            mounted(){
                console.log('組件掛載')
            }
        })
        console.log(con)//組件的本質(zhì)是一個(gè)對(duì)象
        
        var vm=new Vue({
            el:'#out',
            methods:{
                
            },
            //私有組件
            components:{
                'v-footer':{
                    template:'<h2>私有組件</h2>'
                }
            }
        })
    </script>
</html>

三、模板

Vue.js 使用了基于 HTML 的模版語(yǔ)法漏健,允許開(kāi)發(fā)者聲明式地將 DOM 綁定至底層 Vue 實(shí)例的數(shù)據(jù)嚎货。所有 Vue.js 的模板都是合法的 HTML ,所以能被遵循規(guī)范的瀏覽器和 HTML 解析器解析蔫浆。在底層的實(shí)現(xiàn)上殖属, Vue 將模板編譯成虛擬 DOM 渲染函數(shù)。結(jié)合響應(yīng)系統(tǒng)克懊,在應(yīng)用狀態(tài)改變時(shí)忱辅, Vue 能夠智能地計(jì)算出重新渲染組件的最小代價(jià)并應(yīng)用到 DOM 操作上七蜘。

四、用組件封裝一個(gè)點(diǎn)擊登錄的功能

<!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">
        //目的是點(diǎn)完以后把這個(gè)組件顯示出來(lái)
        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對(duì)象作用的范圍是新創(chuàng)建的div元素
                el:document.createElement("div")
            })
            //把當(dāng)前作用的dom元素插入到瀏覽器里面
            document.body.appendChild(vueToast.$el)
            //放到body里面調(diào)用toast函數(shù)這個(gè)組件就可以展示了
            
            setTimeout(function(){
                vueToast.isshow=false;
            },vueToast.duration)
        }
        
        
        var vm=new Vue({
            el:"#out",
            methods:{
                tap(){
                    toast()
                }
            }
        })
        
    
    </script>
</html>
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末墙懂,一起剝皮案震驚了整個(gè)濱河市橡卤,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌损搬,老刑警劉巖碧库,帶你破解...
    沈念sama閱讀 211,123評(píng)論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異巧勤,居然都是意外死亡嵌灰,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,031評(píng)論 2 384
  • 文/潘曉璐 我一進(jìn)店門颅悉,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)沽瞭,“玉大人,你說(shuō)我怎么就攤上這事剩瓶【岳#” “怎么了?”我有些...
    開(kāi)封第一講書人閱讀 156,723評(píng)論 0 345
  • 文/不壞的土叔 我叫張陵延曙,是天一觀的道長(zhǎng)豌鹤。 經(jīng)常有香客問(wèn)我,道長(zhǎng)枝缔,這世上最難降的妖魔是什么布疙? 我笑而不...
    開(kāi)封第一講書人閱讀 56,357評(píng)論 1 283
  • 正文 為了忘掉前任,我火速辦了婚禮愿卸,結(jié)果婚禮上灵临,老公的妹妹穿的比我還像新娘。我一直安慰自己趴荸,他們只是感情好俱诸,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,412評(píng)論 5 384
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著赊舶,像睡著了一般。 火紅的嫁衣襯著肌膚如雪赶诊。 梳的紋絲不亂的頭發(fā)上笼平,一...
    開(kāi)封第一講書人閱讀 49,760評(píng)論 1 289
  • 那天,我揣著相機(jī)與錄音舔痪,去河邊找鬼寓调。 笑死,一個(gè)胖子當(dāng)著我的面吹牛锄码,可吹牛的內(nèi)容都是我干的夺英。 我是一名探鬼主播晌涕,決...
    沈念sama閱讀 38,904評(píng)論 3 405
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼痛悯!你這毒婦竟也來(lái)了余黎?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書人閱讀 37,672評(píng)論 0 266
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤载萌,失蹤者是張志新(化名)和其女友劉穎惧财,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體扭仁,經(jīng)...
    沈念sama閱讀 44,118評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡垮衷,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,456評(píng)論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了乖坠。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片搀突。...
    茶點(diǎn)故事閱讀 38,599評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖熊泵,靈堂內(nèi)的尸體忽然破棺而出仰迁,到底是詐尸還是另有隱情,我是刑警寧澤戈次,帶...
    沈念sama閱讀 34,264評(píng)論 4 328
  • 正文 年R本政府宣布轩勘,位于F島的核電站,受9級(jí)特大地震影響怯邪,放射性物質(zhì)發(fā)生泄漏绊寻。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,857評(píng)論 3 312
  • 文/蒙蒙 一悬秉、第九天 我趴在偏房一處隱蔽的房頂上張望澄步。 院中可真熱鬧,春花似錦和泌、人聲如沸村缸。這莊子的主人今日做“春日...
    開(kāi)封第一講書人閱讀 30,731評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)梯皿。三九已至,卻和暖如春县恕,著一層夾襖步出監(jiān)牢的瞬間东羹,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書人閱讀 31,956評(píng)論 1 264
  • 我被黑心中介騙來(lái)泰國(guó)打工忠烛, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留属提,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 46,286評(píng)論 2 360
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像冤议,于是被迫代替她去往敵國(guó)和親斟薇。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,465評(píng)論 2 348

推薦閱讀更多精彩內(nèi)容

  • 誰(shuí)的閨女這么調(diào)皮? 媽媽拄著拐尸疆,單腳費(fèi)勁的蹦椿猎,她卻張開(kāi)雙臂,左跳右跳寿弱,擋住媽媽的去路 好不容易蹦出幾步遠(yuǎn)犯眠,她卻攔腰...
    藍(lán)紫色jg閱讀 475評(píng)論 5 10
  • 慵懶的周末啦 周六收拾屋子一整天 晚上跟大學(xué)社團(tuán)的老同學(xué)出去吃了個(gè)飯 夫妻倆都不是東北的 現(xiàn)在沈陽(yáng)扎根了 他們說(shuō)學(xué)...
    面包和牛奶都會(huì)有的閱讀 216評(píng)論 0 0
  • 今天上班沒(méi)那么累了噪矛。心情也沒(méi)好多少量蕊。晚上接兒子回家,兒子還想著去同學(xué)家玩艇挨。一開(kāi)始我沒(méi)同意残炮,看他在家不好好學(xué)習(xí),...
    star衛(wèi)星閱讀 171評(píng)論 0 0
  • 近一年的沉浸缩滨,增長(zhǎng)的除了是年齡势就,還有的就是歲月中的經(jīng)歷。在過(guò)去的一年脉漏,本以為發(fā)生巨大變化的生活還是持續(xù)的進(jìn)...
    落庭暖月閱讀 190評(píng)論 0 0