【Vue】基礎(chǔ)(生命周期 & 常用指令)

生命周期


一個(gè)Vue實(shí)例是一個(gè)對(duì)象求豫,對(duì)象就會(huì)有生命周期,一個(gè)Vue實(shí)例會(huì)經(jīng)歷下面以下生命周期平痰。

  1. 實(shí)例初始化 - 初始化事件 & 生命周期
  2. 創(chuàng)建 - 數(shù)據(jù)觀測(cè)(data observer)& 觀察事件配置
  3. 掛載 - 視圖渲染
  4. 更新 - 若數(shù)據(jù)發(fā)生變更觸發(fā)重新渲染視圖
  5. 銷毀 - 組件因?yàn)榍袚Q或內(nèi)部調(diào)用vm.$destroy()方法

Vue在這個(gè)生命周期的幾個(gè)階段提供了鉤子函數(shù)齐婴,方便在這個(gè)過程添加自己代碼做一些處理

  1. 創(chuàng)建前/后 :beforeCreate/created
  2. 掛載前/后 :beforeMount/mounted
  3. 更新前/后 :beforeUpdate/updated
  4. 銷毀前/后 :beforeDestroy/destroyed
鉤子 $data綁定 $el綁定 渲染頁面
beforeCreate
created
beforeMount
mounted
beforeUpdate
updated
beforeDestroy
destroyed
驗(yàn)證代碼
<template>
  <div id="app">
    <h1 @click='clear'>{{message}}</h1>
    <img alt="Vue logo" src="./assets/logo.png" />
  </div>
</template>
<script>

export default {
  name: "App",
  data() {
    return { message: "Wilson Pan" };
  },
  methods: {
    clear() {
      this.$destroy();
    }
  },
  beforeCreate() {
    console.log("-----beforeCreate start------");
    console.log("$el : " + this.$el);
    console.log("$data : " + this.$data);
    console.log(this.$data);
    console.log("-----beforeCreate end------");
  },
  created() {
    console.log("-----created start------");
    console.log("$el : " + this.$el);
    console.log("$data : " + this.$data);
    console.log(this.$data);
    console.log("-----created end------");
  },
  beforeMount() {
    console.log("-----beforeMount start------");
    console.log("$el : " + this.$el);
    console.log("$data : " + this.$data);
    console.log(this.$el);
    console.log(this.$refs);

    debugger; // eslint-disable-line no-debugger

    console.log("-----beforeMount end------");
  },
  mounted() {
    console.log("-----mounted start------");
    console.log("$el : " + this.$el);
    console.log("$data : " + this.$data);
    console.log(this.$el);
    console.log(this.$refs);
    this.message = "Alice";
    console.log("-----mounted end------");
    debugger; // eslint-disable-line no-debugger
  },
  beforeUpdate() {
    console.log("-----beforeUpdate start------");
    console.log("$el : " + this.$el);
    console.log("$data : " + this.$data);
    console.log("-----beforeUpdate end------");
    debugger; // eslint-disable-line no-debugger
  },
  updated() {
    console.log("-----updated start------");
    console.log("$el : " + this.$el);
    console.log("$data : " + this.$data);
    console.log("-----updated end------");
    debugger; // eslint-disable-line no-debugger
  },
  beforeDestroy() {
    console.log("-----beforeDestroy start------");
    console.log("$el : " + this.$el);
    console.log("$data : " + this.$data);
    console.log("-----beforeDestroy end------");
    debugger; // eslint-disable-line no-debugger
  },
  destroyed() {
    console.log("-----destroyed start------");
    console.log("$el : " + this.$el);
    console.log("$data : " + this.$data);
    console.log("-----destroyed end------");
    debugger; // eslint-disable-line no-debugger
  }
};
</script>

<style>
#app {
  font-family: Avenir, Helvetica, Arial, sans-serif;
  -webkit-font-smoothing: antialiased;
  -moz-osx-font-smoothing: grayscale;
  text-align: center;
  color: #2c3e50;
  margin-top: 60px;
}
</style>

常用指令


  • v-text
    官方:更新元素的文本textContent
    注意:會(huì)對(duì)內(nèi)容進(jìn)行編譯,特殊字符編譯成轉(zhuǎn)義字符夕凝,保證是文本
<span v-text="message"></span>
<br />
<button v-text="buttonText" />
  • v-html
    官方:更新元素的 innerHTML
    注意:內(nèi)容按普通 HTML 插入 - 不會(huì)作為 Vue 模板進(jìn)行編譯
<span v-html="message"></span>
  • v-show
    官方:根據(jù)表達(dá)式之真假值烤蜕,切換元素的 display CSS 屬性
    注意:false 還是會(huì)創(chuàng)建元素,只是元素的display:none
<h3>v-show</h3>
<span v-show="showText">你看得到我</span>
<span v-show="!showText">你看不到我</span>
  • v-if/v-else-if/v-else
    官方:根據(jù)表達(dá)式的值的真假來有條件地渲染元素
    注意:false 不會(huì)創(chuàng)建元素
<h3>v-if</h3>
<span v-if="showText">你看得到我</span>
<span v-if="!showText">你看不到我</span>
  • v-for
    官方: 基于源數(shù)據(jù)多次渲染元素或模板塊
    注意:必須使用特定語法 alias in expression迹冤,為當(dāng)前遍歷的元素提供別名
<h3>v-for</h3>
待學(xué)內(nèi)容
<ul>
    <li v-for="(item, index) in todoList" :key="item.id">{{index+1}} - {{ item.name }}</li>
</ul>
  • v-on
    縮寫:@
    官方:綁定事件監(jiān)聽器
<h3>v-on</h3>
<button v-on:click="clickMe">點(diǎn)擊事件</button>
<button @click="clickMe">縮寫點(diǎn)擊</button>
<button @[buttonEvent]="clickMe">動(dòng)態(tài)事件</button>
<button @click.once="clickMe">只觸發(fā)一次</button>
<button @click.left="clickMe">鼠標(biāo)左鍵點(diǎn)擊</button>
<button @click.right="clickMe">鼠標(biāo)右鍵點(diǎn)擊</button>
  • v-bind

縮寫::
官方: 動(dòng)態(tài)地綁定一個(gè)或多個(gè) attribute,或一個(gè)組件 prop 到表達(dá)式

<!-- 綁定一個(gè)屬性 -->
<img v-bind:src="imageSrc">

<!-- 動(dòng)態(tài) attribute 名 (2.6.0+) -->
<button v-bind:[key]="value"></button>

<!-- 縮寫 -->
<img :src="imageSrc">

<!-- 動(dòng)態(tài) attribute 名縮寫 (2.6.0+) -->
<button :[key]="value"></button>

<!-- 內(nèi)聯(lián)字符串拼接 -->
<img :src="'/path/to/images/' + fileName">

<!-- class 綁定 -->
<div :class="{ red: isRed }"></div>
<div :class="[classA, classB]"></div>
<div :class="[classA, { classB: isB, classC: isC }]">

<!-- style 綁定 -->
<div :style="{ fontSize: size + 'px' }"></div>
<div :style="[styleObjectA, styleObjectB]"></div>

<!-- 綁定一個(gè)有屬性的對(duì)象 -->
<div v-bind="{ id: someProp, 'other-attr': otherProp }"></div>

<!-- 通過 prop 修飾符綁定 DOM 屬性 -->
<div v-bind:text-content.prop="text"></div>

<!-- prop 綁定虎忌∨葆悖“prop”必須在 my-component 中聲明。-->
<my-component :prop="someThing"></my-component>

<!-- 通過 $props 將父組件的 props 一起傳給子組件 -->
<child-component v-bind="$props"></child-component>
  • v-model
    官方:在表單控件或者組件上創(chuàng)建雙向綁定
<input v-model="message" placeholder="edit me">
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末膜蠢,一起剝皮案震驚了整個(gè)濱河市堪藐,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌挑围,老刑警劉巖礁竞,帶你破解...
    沈念sama閱讀 207,248評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異杉辙,居然都是意外死亡模捂,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,681評(píng)論 2 381
  • 文/潘曉璐 我一進(jìn)店門蜘矢,熙熙樓的掌柜王于貴愁眉苦臉地迎上來狂男,“玉大人,你說我怎么就攤上這事品腹♂常” “怎么了?”我有些...
    開封第一講書人閱讀 153,443評(píng)論 0 344
  • 文/不壞的土叔 我叫張陵舞吭,是天一觀的道長(zhǎng)泡垃。 經(jīng)常有香客問我,道長(zhǎng)羡鸥,這世上最難降的妖魔是什么蔑穴? 我笑而不...
    開封第一講書人閱讀 55,475評(píng)論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮兄春,結(jié)果婚禮上澎剥,老公的妹妹穿的比我還像新娘。我一直安慰自己赶舆,他們只是感情好哑姚,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,458評(píng)論 5 374
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著芜茵,像睡著了一般叙量。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上九串,一...
    開封第一講書人閱讀 49,185評(píng)論 1 284
  • 那天绞佩,我揣著相機(jī)與錄音寺鸥,去河邊找鬼。 笑死品山,一個(gè)胖子當(dāng)著我的面吹牛胆建,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播肘交,決...
    沈念sama閱讀 38,451評(píng)論 3 401
  • 文/蒼蘭香墨 我猛地睜開眼笆载,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了涯呻?” 一聲冷哼從身側(cè)響起凉驻,我...
    開封第一講書人閱讀 37,112評(píng)論 0 261
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎复罐,沒想到半個(gè)月后涝登,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,609評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡效诅,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,083評(píng)論 2 325
  • 正文 我和宋清朗相戀三年胀滚,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片填帽。...
    茶點(diǎn)故事閱讀 38,163評(píng)論 1 334
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡蛛淋,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出篡腌,到底是詐尸還是另有隱情褐荷,我是刑警寧澤,帶...
    沈念sama閱讀 33,803評(píng)論 4 323
  • 正文 年R本政府宣布嘹悼,位于F島的核電站叛甫,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏杨伙。R本人自食惡果不足惜其监,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,357評(píng)論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望限匣。 院中可真熱鬧抖苦,春花似錦、人聲如沸米死。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,357評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽峦筒。三九已至究西,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間物喷,已是汗流浹背卤材。 一陣腳步聲響...
    開封第一講書人閱讀 31,590評(píng)論 1 261
  • 我被黑心中介騙來泰國打工遮斥, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人扇丛。 一個(gè)月前我還...
    沈念sama閱讀 45,636評(píng)論 2 355
  • 正文 我出身青樓术吗,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國和親帆精。 傳聞我的和親對(duì)象是個(gè)殘疾皇子藐翎,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,925評(píng)論 2 344

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