1. 程式人生 > >Vue2.0學習——生命週期、鉤子函式

Vue2.0學習——生命週期、鉤子函式


Vue的生命週期就像人的一生,從出生、兒童、青年、中年、老年到死亡,經歷不同過程,Vue的元件也會經歷從建立到更新或銷燬的過程,而鉤子函式,就是把不同的任務掛到不同的階段,如ajax獲取資料就可以在mounted階段。下面結合網上一些學習到的東西綜合自己的見解簡述一下這部分內容。

一、Vue生命週期簡介

Vue生命週期

vue生命週期

Vue生命週期鉤子函式Vue1.0+和Vue2.0對比

Vue生命週期鉤子函式Vue1.0+和Vue2.0對比

上面兩張圖片分別是VueJs官網文件中對於元件生命週期的說明和Vue1.0+和Vue2.0鉤子函式的對比。講上面的內容簡化一下,可以得到如下這張簡化版的:


看起來簡單更加清晰了一些。

二、生命週期探究

為了更加直白的理解,網上有一段測試程式碼,通過控制檯輸出的方式清晰地把每一個鉤子函式一一展現,對理解很有用處,下載搬過來用一下以便加深記憶。

<!DOCTYPE html>
<html>
<head>
  <title>Vue2.0生命週期與鉤子函式</title>
  <script type="text/javascript" src="https://cdn.jsdelivr.net/vue/2.1.3/vue.js"></script>
  <body>

    <div id="app">
      <p>{{ message }}</p>
      <input type="button" @click="updated" value="更新資料" />
      <input type="button" @click="destroy" value="銷燬" />
    </div>

    <script type="text/javascript">
      var vm = new Vue({
        el: '#app',
        data: {
          message: "Welcome Vue"
        },
        methods: {
          updated() {
            this.message = '現在是更新後'
          },
          destroy () {
            vm.$destroy ();
          }
        },
        beforeCreate: function () {
          console.group('beforeCreate 建立前狀態===============》');
          console.log("%c%s", "color:red", "el     : " + this.$el); //undefined
          console.log("%c%s", "color:red", "data   : " + this.$data); //undefined
          console.log("%c%s", "color:red", "message: " + this.message);//undefined
        },
        created: function () {
          console.group('created 建立完畢狀態===============》');
          console.log("%c%s", "color:red", "el     : " + this.$el); //undefined
          console.log("%c%s", "color:green", "data   : " + this.$data); //[object Object]  =>  已被初始化
          console.log("%c%s", "color:green", "message: " + this.message); //Welcome Vue  =>  已被初始化
        },
        beforeMount: function () {
          console.group('beforeMount 掛載前狀態===============》');
          console.log("%c%s", "color:green", "el     : " + (this.$el)); //已被初始化
          console.log(this.$el); // 當前掛在的元素
          console.log("%c%s", "color:green", "data   : " + this.$data); //已被初始化
          console.log("%c%s", "color:green", "message: " + this.message); //已被初始化
        },
        mounted: function () {
          console.group('mounted 掛載結束狀態===============》');
          console.log("%c%s", "color:green", "el     : " + this.$el); //已被初始化
          console.log(this.$el);
          console.log("%c%s", "color:green", "data   : " + this.$data); //已被初始化
          console.log("%c%s", "color:green", "message: " + this.message); //已被初始化
        },
        beforeUpdate: function () {
          alert("更新前狀態");
          console.group('beforeUpdate 更新前狀態===============》'); //這裡指的是頁面渲染新資料之前
          console.log("%c%s", "color:green", "el     : " + this.$el);
          console.log(this.$el);
          console.log("%c%s", "color:green", "data   : " + this.$data);
          console.log("%c%s", "color:green", "message: " + this.message);
          alert("更新前狀態2");
        },
        updated: function () {
          console.group('updated 更新完成狀態===============》');
          console.log("%c%s", "color:green", "el     : " + this.$el);
          console.log(this.$el);
          console.log("%c%s", "color:green", "data   : " + this.$data);
          console.log("%c%s", "color:green", "message: " + this.message);
        },
        beforeDestroy: function () {
          console.group('beforeDestroy 銷燬前狀態===============》');
          console.log("%c%s", "color:red", "el     : " + this.$el);
          console.log(this.$el);
          console.log("%c%s", "color:red", "data   : " + this.$data);
          console.log("%c%s", "color:red", "message: " + this.message);
        },
        destroyed: function () {
          console.group('destroyed 銷燬完成狀態===============》');
          console.log("%c%s", "color:red", "el     : " + this.$el);
          console.log(this.$el);
          console.log("%c%s", "color:red", "data   : " + this.$data);
          console.log("%c%s", "color:red", "message: " + this.message)
        }
      })
    </script>
  </body>
</html>

通過控制檯的輸出情況可以讓我們更直觀的瞭解各個鉤子函式的作用。

1.created、mounted 建立和掛載
beforecreated:el 和 data 並未初始化
created:完成了 data 資料的初始化,el沒有
beforeMount:完成了 el 和 data 初始化
mounted :完成掛載


另外注意beforeMount時的p標籤內容還是{{ message }},這裡就是應用的 Virtual DOM(虛擬Dom)技術,先把坑佔住了。到後面mounted掛載的時候再把值渲染進去。

2.update 更新

我們單擊頁面中的“更新資料”按鈕,或直接鍵入vm.message="現在是更新後的資料",將資料更新。下面就能看到data裡的值被修改後,將會觸發update的操作。


這裡需要指出的時更新並非是data資料的更新,而是view層的資料更新而觸發的,這點要格外注意。

3.destroy 銷燬

點選銷燬按鈕或直接在控制檯鍵入vm.$destroy(),銷燬完成後,我們再重新改變message的值,vue不再對此動作進行響應了。但是原先生成的dom元素還存在,可以這麼理解,執行了destroy操作,後續就不再受vue控制了。因為這個Vue例項已經不存在了。


總結

beforecreate : 可以在這加個loading事件;

created :在這結束loading,還做一些初始化,實現函式自執行;
mounted : 在這發起後端請求,拿回資料,配合路由鉤子做一些事情;update:views層更新資料的時候要做些什麼,都在update上進行;
beforeDestory: 你確認刪除XX嗎? destoryed :當前元件已被刪除,清空相關內容。

相關推薦

Vue2.0學習——生命週期鉤子函式

Vue的生命週期就像人的一生,從出生、兒童、青年、中年、老年到死亡,經歷不同過程,Vue的元件也會經歷從建立到更新或銷燬的過程,而鉤子函式,就是把不同的任務掛到不同的階段,如ajax獲取資料就可以在mounted階段。下面結合網上一些學習到的東西綜合自己的見解簡述一下這部分內

React生命週期鉤子函式

<body> <div id="box"></div> <script src="react.15.6.js"></script> <script src="react-dom.15.6.js"></script> <

Vue2.0 探索之路——生命週期鉤子函式的一些理解

前言 在使用vue一個多禮拜後,感覺現在還停留在初級階段,雖然知道怎麼和後端做資料互動,但是對於mounted這個掛載還不是很清楚的。放大之,對vue的生命週期不甚瞭解。只知道簡單的使用,而不知道為什麼,這對後面的踩坑是相當不利的。 因為我們有時候會在幾個鉤子函式裡做一些

vue2.0專案實戰(4)生命週期鉤子函式詳解

最近的專案都使用vue2.0來開發,不得不說,vue真的非常好用,大大減少了專案的開發週期。在踩坑的過程中,因為對vue的生命週期不是特別瞭解,所以有時候會在幾個鉤子函式裡做一些事情,什麼時候做,在哪個函式裡做,我們不清楚。 下面來總結一下vue的生命週期。 vue生命週期簡介 咱們從上圖可以很明顯的看出

Vue2.0生命週期鉤子函式

var vm = new Vue({ el: "#container", data: { test : 'hello world' }, beforeCreate: function(){ console.log(this);

Vue2.0生命週期鉤子函式的一些理解

前言: 鉤子就好像是把人的出生到死亡分成一個個階段,你肯定是在出生階段起名字,而不會在成年或者死亡的階段去起名字。或者說你想在出生階段去約炮,也是不行的。元件也是一樣,每個階段它的內部構造是不一樣的。所以一般特定的鉤子做特定的事,比如ajax獲取資料就可以在mounted階段。 一、vue生命週期簡介

十四Vue的生命週期鉤子函式

                                  Vue的生命週期(鉤子函式)     Vue一共有10個生命週期函式,我們可以利用這些函式在vue的每個階段都進行操作資料或者改變內容

vue學習筆記(二)vue的生命週期鉤子函式

前言 通過上一章的學習,我們已經初步的瞭解了vue到底是什麼東西,可以幹什麼,而這一篇部落格主要介紹vue的生命週期和它常用的鉤子函式,如果有學過java的園友可能有接觸到在學習servlet的時候學過servlet的生命週期servlet 載入--->例項化--->服務--->銷燬,對於v

vue生命週期鉤子函式

vue生命週期簡介和鉤子函式 一、vue生命週期簡介 咱們從上圖可以很明顯的看出現在vue2.0都包括了哪些生命週期的函數了,總結一下,對官方文件的那張圖簡化一下,就得到了這張圖。 二、生命週期探究 對於執行順序和什麼時候執行,看上面圖基本有個瞭解了。下面我們將結

Vue-生命週期鉤子函式

參考:https://cn.vuejs.org/v2/guide/instance.html 每個 Vue 例項在被建立時都要經過一系列的初始化過程——例如,需要設定資料監聽、編譯模板、將例項掛載到 DOM 並在資料變化時更新 DOM 等。同時在這個過程中也會執行一些叫做生命週期鉤子的函式,這給

生命週期鉤子函式

生命週期的鉤子函式(寫在方法的下面,一共有11個)     1.vue的整個生命週期的特定時刻,自動呼叫的函式   2.beforeCreate 例項建立之前呼叫, 資料沒有掛載,不能訪問資料 &nbs

vue js 的生命週期鉤子函式

 用Vue框架,熟悉它的生命週期可以讓開發更好的進行。 首先先看看官網的圖,詳細的給出了vue的生命週期:    簡單理解為 它可以總共分為8個階段: beforeCreate(建立前), created(建立後), beforeMount

Vue的過濾器,生命週期鉤子函式和使用Vue-router

一.過濾器   1.區域性過濾器 在當前元件內部使用過濾器   給某些資料 添油加醋 //宣告 filters:{ '過濾器的名字':function(val,a,b){ //a 就是alax ,val就是當前的資料 } } //使用 管道符 資料 | 過濾器的名

Vue提高篇-生命週期及其鉤子函式

1.前言 (a)每個Vue例項在被建立之前都要經過一系列的初始化過程,這個過程就是vue的生命週期; (b)vue一整個的生命週期中會有很多鉤子函式提供給我們在vue生命週期不同的時刻進行操作; (c)鉤子函式中最為常用的是建立(created),掛載(mounted)的操作; 2.

詳解React生命週期鉤子函式

父元件 import React , {Component} from 'react' import Son from './Son' class Father extends Component { constructor(props){

Vue生命週期鉤子函式

Vue官網的生命週期圖 常用的八個鉤子函式的解釋 beforeCreated:元件例項剛剛被建立,元件屬性計算之前,如data屬性等。 created:元件例項建立完成,屬性已繫結,但DOM還未生成,$el屬性還不存在 beforeMount:模板掛載之前呼叫,$

Vue生命週期鉤子函式的一些理解

vue生命週期簡介 咱們從上圖可以很明顯的看出現在vue2.0都包括了哪些生命週期的函數了。 生命週期探究 對於執行順序和什麼時候執行,看上面兩個圖基本有個瞭解了。下面我們將結合程式碼去看看鉤子函式的執行。 ps:下面程式碼可以直接複製出去執行 <

【VueJS】Vue的生命週期鉤子函式

環境:Vue2.x版本 在Vue的官網有一張圖已經很好的詮釋了生命週期,我在這裡就不再多講了,直接貼圖,然後上程式程式碼。 <script src="https://cdn.bootc

Servlet學習筆記(設定servlet的字符集生命週期對映配置資料庫連線引數的區域性配置)

設定servlet的字符集 servlet是sun公司提供的一門用於開發動態web資源的技術,使用java語言編寫的執行在伺服器端的程式,通過http超文字傳輸協議接受和響應來自客戶端的請求。 servlet的產生是把“html標記”和“大量的業務處理邏輯”給分開,繼續留在html頁

Servlet學習筆記(一)之Servlet原理初始化生命週期結構體系

Servlet是用java語言編寫的應用到Web伺服器端的擴充套件技術,與java物件的區別是,Servlet物件主要封裝了對HTTP請求的處理,並且它的執行需要Servlet容器的支援(以下會介紹原因,也可以看之前的一篇介紹Servlet容器的部落格,(http://blog.csdn.net/megust