Vue初級(jí) 組建通信 基本屬性 指令

  • Vue指令

  • Vue 基本屬性

  • Vue組件通信

Vue 基本屬性

data 屬性

在.vue擴(kuò)展名文件下,data屬性必須定義為函數(shù)形式唉地,在普通的Vue對(duì)象中据悔,data屬性就是一個(gè)對(duì)象。

相當(dāng)于react中state耘沼,代表了當(dāng)前組件的狀態(tài)极颓;組件呈現(xiàn)一個(gè)什么樣的狀態(tài),data屬性就必須有什么樣的描述耕拷。

el屬性

Vue 對(duì)象/組件將要掛載頁面元素讼昆,可以使用選擇器

  • 類型string | Element 選擇器|HTML元素

  • 限制:只在用 new 創(chuàng)建實(shí)例時(shí)生效。

  • 詳細(xì)

    提供一個(gè)在頁面上已存在的 DOM 元素作為 Vue 實(shí)例的掛載目標(biāo)骚烧。可以是 CSS 選擇器闰围,也可以是一個(gè) HTMLElement 實(shí)例赃绊。

 el:"#app"
})```

#### components屬性

*   **類型**:`Object`

*   **詳細(xì)**:

包含 Vue 實(shí)例可用組件的哈希表。

#### methods屬性

事件處理函數(shù)羡榴、組件業(yè)務(wù)邏輯函數(shù)等等都必須定義在methods屬性中碧查,注意定義在method屬性中的函數(shù),不能使用箭頭函數(shù)

*   **類型**:`{ [key: string]: Function }` 對(duì)象

*   **詳細(xì)**:

    methods 將被混入到 Vue 實(shí)例中≈沂郏可以直接通過 VM 實(shí)例訪問這些方法传惠,或者在指令表達(dá)式中使用。方法中的 `this` 自動(dòng)綁定為 Vue 實(shí)例稻扬。

    > 注意卦方,**不應(yīng)該使用箭頭函數(shù)來定義 method 函數(shù)** (例如 `plus: () => this.a++`)。理由是箭頭函數(shù)綁定了父級(jí)作用域的上下文泰佳,所以 `this` 將不會(huì)按照期望指向 Vue 實(shí)例盼砍,`this.a` 將是 undefined。

#### computed計(jì)算屬性

*   **類型**:`{ [key: string]: Function | { get: Function, set: Function } }`

```{
 key:function
 key:{

 }
}```
計(jì)算屬性對(duì)應(yīng)的是定義在data屬性中數(shù)據(jù)逝她,當(dāng)參與計(jì)算的data中的數(shù)據(jù)發(fā)生變化浇坐,相應(yīng)的計(jì)算屬性對(duì)應(yīng)函數(shù)會(huì)被調(diào)用,重新計(jì)算并且返回結(jié)果黔宛。計(jì)算屬性會(huì)監(jiān)聽data中參與計(jì)算的數(shù)據(jù)近刘。

計(jì)算屬性的結(jié)果會(huì)被緩存,除非依賴的響應(yīng)式屬性變化才會(huì)重新計(jì)算臀晃。注意跌宛,如果某個(gè)依賴 (比如非響應(yīng)式屬性) 在該實(shí)例范疇之外,則計(jì)算屬性是**不會(huì)**被更新的积仗。

#### watch 監(jiān)聽屬性

監(jiān)聽定義在data屬性中的數(shù)據(jù)疆拘,監(jiān)聽的數(shù)據(jù)發(fā)生變化,就會(huì)觸發(fā)相應(yīng)的處理函數(shù)

**類型**:`{ [key: string]: string | Function | Object | Array }`

```var vm = new Vue({
 data: {
 a: 1,
 b: 2,
 c: 3,
 d: 4,
 e: {
 f: {
 g: 5
 }
 }
 },
 watch: {
 a: function (val, oldVal) {
 console.log('new: %s, old: %s', val, oldVal)
 },
 // 方法名
 b: 'someMethod',
 // 該回調(diào)會(huì)在任何被偵聽的對(duì)象的 property 改變時(shí)被調(diào)用寂曹,不論其被嵌套多深
 c: {
 handler: function (val, oldVal) { /* ... */ },
 deep: true
 },
 // 該回調(diào)將會(huì)在偵聽開始之后被立即調(diào)用
 d: {
 handler: 'someMethod',
 immediate: true
 },
 // 你可以傳入回調(diào)數(shù)組哎迄,它們會(huì)被逐一調(diào)用
 e: [
 'handle1',
 function handle2 (val, oldVal) { /* ... */ },
 {
 handler: function handle3 (val, oldVal) { /* ... */ },
 /* ... */
 }
 ],
 // watch vm.e.f's value: {g: 5}
 'e.f': function (val, oldVal) { /* ... */ }
 }
})
vm.a = 2 // => new: 2, old: 1```

#### 監(jiān)聽屬性和計(jì)算屬性的區(qū)別

[https://www.cnblogs.com/jiajialove/p/11327945.html](https://www.cnblogs.com/jiajialove/p/11327945.html)

## Vue 指令

#### v-show

根據(jù)表達(dá)式之真假值,切換元素的 `display` CSS 屬性隆圆。

當(dāng)條件變化時(shí)該指令觸發(fā)過渡效果漱挚。

v-show綁定的boolean值,如果綁定值是true渺氧,則當(dāng)前元素顯示旨涝,如果綁定的值是false,則當(dāng)前元素隱藏

#### v-bind

動(dòng)態(tài)地綁定一個(gè)或多個(gè)屬性侣背,或一個(gè)組件 prop 到表達(dá)式白华。

#### v-if v-else v-else-if

有條件的渲染元素或者組件,只有v-if可以單獨(dú)使用贩耐,v-else或者v-elsep-if必須與v-if聯(lián)用

v-if:如果指令綁定的表達(dá)式的取值為true弧腥,則指令所在的元素被渲染,否則則不渲染

v-else:如果上一兄弟元素的v-if取值為false潮太,則v-else所在元素被渲染管搪,反之虾攻,上一兄弟元素的v-if綁定的值為true,則不渲染

v-else-if:如果上一兄弟元素綁定的表達(dá)式的值沒有匹配到更鲁,則判斷v-else-if的取值霎箍,如果是true,則指令所在元素被渲染澡为,否則不渲染

#### v-text

更新元素的 `textContent`漂坏。如果要更新部分的 `textContent`,需要使用 `{{ Mustache }}`插值缀壤。

```<span v-text="msg"></span>
<!-- 和下面的一樣 -->
<span>{{msg}}</span>```

#### v-html

等同于innerHTML樊拓,更新元素的 innerHTML

#### v-for

基于源數(shù)據(jù)多次渲染元素或模板塊。此指令之值塘慕,必須使用特定語法 `alias in expression`筋夏,為當(dāng)前遍歷的元素提供別名:

```<div class="list_item" v-for="(number,index) in items" :key="index">{{number}}</div>```

#### v-on

綁定事件監(jiān)聽器。事件類型由參數(shù)指定图呢。表達(dá)式可以是一個(gè)方法的名字或一個(gè)內(nèi)聯(lián)語句条篷,如果沒有修飾符也可以省略。

用在普通元素上時(shí)蛤织,只能監(jiān)聽原生 DOM 事件用在自定義元素組件上時(shí)赴叹,也可以監(jiān)聽子組件觸發(fā)的自定義事件。

##### 事件修飾符

*   `.stop` - 調(diào)用 `event.stopPropagation()` 阻止事件冒泡指蚜。

*   `.prevent` - 調(diào)用 `event.preventDefault()`乞巧。阻止元素的默認(rèn)行為。

*   `.capture` - 添加事件偵聽器時(shí)使用 capture 模式摊鸡。

*   `.self` - 只當(dāng)事件是從偵聽器綁定的元素本身觸發(fā)時(shí)才觸發(fā)回調(diào)绽媒。

*   `.{keyCode | keyAlias}` - 只當(dāng)事件是從特定鍵觸發(fā)時(shí)才觸發(fā)回調(diào)。

*   `.native` - 監(jiān)聽組件根元素的原生事件免猾。

*   `.once` - 只觸發(fā)一次回調(diào)是辕。

*   `.left` - (2.2.0) 只當(dāng)點(diǎn)擊鼠標(biāo)左鍵時(shí)觸發(fā)。

*   `.right` - (2.2.0) 只當(dāng)點(diǎn)擊鼠標(biāo)右鍵時(shí)觸發(fā)猎提。

*   `.middle` - (2.2.0) 只當(dāng)點(diǎn)擊鼠標(biāo)中鍵時(shí)觸發(fā)获三。

*   `.passive` - (2.3.0) 以 `{ passive: true }` 模式添加偵聽器

```<!-- 方法處理器 -->
<button v-on:click="doThis"></button>
?
<!-- 動(dòng)態(tài)事件 (2.6.0+) -->
<button v-on:[event]="doThis"></button>
?
<!-- 內(nèi)聯(lián)語句 -->
<button v-on:click="doThat('hello', $event)"></button>
?
<!-- 縮寫 -->
<button @click="doThis"></button>
?
<!-- 動(dòng)態(tài)事件縮寫 (2.6.0+) -->
<button @[event]="doThis"></button>
?
<!-- 停止冒泡 -->
<button @click.stop="doThis"></button>
?
<!-- 阻止默認(rèn)行為 -->
<button @click.prevent="doThis"></button>
?
<!-- 阻止默認(rèn)行為,沒有表達(dá)式 -->
<form @submit.prevent></form>
?
<!--  串聯(lián)修飾符 -->
<button @click.stop.prevent="doThis"></button>
?
<!-- 鍵修飾符锨苏,鍵別名 -->
<input @keyup.enter="onEnter">
?
<!-- 鍵修飾符疙教,鍵代碼 -->
<input @keyup.13="onEnter">
?
<!-- 點(diǎn)擊回調(diào)只會(huì)觸發(fā)一次 -->
<button v-on:click.once="doThis"></button>
?
<!-- 對(duì)象語法 (2.4.0+) -->
<button v-on="{ mousedown: doThis, mouseup: doThat }"></button>```
#### v-model 雙向綁定

只能輸入元素上使用

##### 修飾符:

*   [`.lazy`](https://cn.vuejs.org/v2/guide/forms.html#lazy) - 取代 `input` 監(jiān)聽 `change` 事件

*   [`.number`](https://cn.vuejs.org/v2/guide/forms.html#number) - 輸入字符串轉(zhuǎn)為有效的數(shù)字

*   [`.trim`](https://cn.vuejs.org/v2/guide/forms.html#trim) - 輸入首尾空格過濾

## Vue 組件通信

#### props屬性

*   **類型**:`Array | Object`

*   **詳細(xì)**:

    props 可以是數(shù)組或?qū)ο螅糜诮邮諄碜愿附M件的數(shù)據(jù)蚓炬。props 可以是簡(jiǎn)單的數(shù)組松逊,或者使用對(duì)象作為替代,對(duì)象允許配置高級(jí)選項(xiàng)肯夏,如類型檢測(cè)、自定義驗(yàn)證和設(shè)置默認(rèn)值。

#### 發(fā)布訂閱模式

#### 父?jìng)髯?
*1* 驯击、在父組件中的子組件標(biāo)簽中定義傳遞數(shù)據(jù)屬性烁兰,需要使用動(dòng)態(tài)綁定來傳遞數(shù)據(jù)

*2* 、在子組件中徊都,增加props屬性沪斟,在props屬性中定義一個(gè)與傳遞數(shù)據(jù)時(shí)定義名稱相同屬性用來接受數(shù)據(jù),然后表明數(shù)據(jù)數(shù)據(jù)類型

*3* 暇矫、使用數(shù)據(jù)

``` //父組件
<NavigationBar title="我的"/>
?
?
//子組件
<template>
 <div class="navigation_bar_container">
 <div class="navigation_bar_wrapper">
 <div class="navigation_bar_back_icon">
 <img src="../assets/fanhui.png"
 v-on:click="onClicBack"/>
 </div>
 <div>{{title}}</div>
 <div></div>
 </div>
 </div>
</template>
?
<script>
export default {
 //props屬性
 props:{
 title:String//如果傳遞的數(shù)據(jù)不符合定義時(shí)的數(shù)據(jù)類型主之,vue將拋出警告
 }```
### 子傳父

利用Vue提供的觸發(fā)自定義事件$emit函數(shù)實(shí)現(xiàn)

*1* 、子組件需要向父組件傳遞數(shù)據(jù)時(shí)李根,使用$emit函數(shù)出發(fā)自定義事件槽奕,并傳遞數(shù)據(jù)

*2* 、在父組件中房轿,增加對(duì)自定義事件的監(jiān)聽粤攒,子組件觸發(fā)自定義事件后,父組件監(jiān)聽并執(zhí)行事件對(duì)應(yīng)的處理函數(shù)囱持,然后獲取子組件傳遞給父組件的數(shù)據(jù)

```//子組件
methods:{
 onClicBack(){
 // 函數(shù)
 //參數(shù)1:自定義事件名稱
 //參數(shù)2:事件觸發(fā)需要傳遞的數(shù)據(jù)
 this.$emit("goback",111111)
 }
 }
?
//父組件
//監(jiān)聽自定義事件goback夯接,觸發(fā)后執(zhí)行函數(shù)back
 <NavigationBar title="我的"
 v-on:goback="back"/>```
#### 跨組件傳值(兄弟組件傳值)

在Vue中,兄弟組件傳值我們使用的是eventBus方式

首先纷妆,創(chuàng)建一個(gè)名稱為EventBus的Vue對(duì)象(組件):

```import Vue from "vue";
//中轉(zhuǎn)站
//創(chuàng)建了一個(gè)Vue對(duì)象盔几,使用這個(gè)vue對(duì)象作為中轉(zhuǎn)站
const EventBus = new Vue({

})

export default EventBus;

然后,在將要傳遞數(shù)據(jù)的組件中引入掩幢,當(dāng)我們想要傳遞數(shù)據(jù)的時(shí)候逊拍,使用EventBus對(duì)象觸發(fā)一個(gè)自定義事件,將需要傳遞的數(shù)據(jù)以事件觸發(fā)方式傳遞:

  <div class="input_container">
    <div class="input">
      <input type="text" placeholder="請(qǐng)輸入將要提交的內(nèi)容"
      v-model="inputValue"/>
    </div>
    <div class="button">
      <button v-on:click="onClcikSumit">提交</button>
    </div>
  </div>
</template>

<script>
import EventBus from "../EventBus/EventBus";

export default {
  data(){
    return{
      inputValue:""
    }
  },
  methods:{
    onClcikSumit(){
      // var inputValue = this.$refs.input.value;
      // window.console.log(this.inputValue);
      //$emit觸發(fā)一個(gè)自定義事件
      EventBus.$emit("submitMessage",this.inputValue);
    }
  }
}
</script>

最后粒蜈,在接受數(shù)據(jù)的組件中顺献,同樣引入EventBus組件,在接受數(shù)據(jù)組件掛載結(jié)束的生命周期函數(shù)中枯怖,監(jiān)聽觸發(fā)的自定義事件:

  <div class="content_container">
    {{content}}
  </div>
</template>

<script>
import EventBus from "../EventBus/EventBus";

export default {
  data(){
    return{
      content:""
    }
  },
  mounted(){
    EventBus.$on("submitMessage",(message)=>{
      this.content = message
      window.console.log(message)
    });
  }
}
</script>

當(dāng)事件觸發(fā)后注整,就會(huì)監(jiān)聽到事件,然后執(zhí)行事件對(duì)應(yīng)的函數(shù)度硝,獲取到傳遞的數(shù)據(jù)肿轨。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市蕊程,隨后出現(xiàn)的幾起案子椒袍,更是在濱河造成了極大的恐慌,老刑警劉巖藻茂,帶你破解...
    沈念sama閱讀 210,978評(píng)論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件驹暑,死亡現(xiàn)場(chǎng)離奇詭異玫恳,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)优俘,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 89,954評(píng)論 2 384
  • 文/潘曉璐 我一進(jìn)店門京办,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人帆焕,你說我怎么就攤上這事惭婿。” “怎么了叶雹?”我有些...
    開封第一講書人閱讀 156,623評(píng)論 0 345
  • 文/不壞的土叔 我叫張陵财饥,是天一觀的道長。 經(jīng)常有香客問我折晦,道長钥星,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,324評(píng)論 1 282
  • 正文 為了忘掉前任筋遭,我火速辦了婚禮打颤,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘漓滔。我一直安慰自己编饺,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,390評(píng)論 5 384
  • 文/花漫 我一把揭開白布响驴。 她就那樣靜靜地躺著透且,像睡著了一般。 火紅的嫁衣襯著肌膚如雪豁鲤。 梳的紋絲不亂的頭發(fā)上秽誊,一...
    開封第一講書人閱讀 49,741評(píng)論 1 289
  • 那天,我揣著相機(jī)與錄音琳骡,去河邊找鬼锅论。 笑死,一個(gè)胖子當(dāng)著我的面吹牛楣号,可吹牛的內(nèi)容都是我干的最易。 我是一名探鬼主播,決...
    沈念sama閱讀 38,892評(píng)論 3 405
  • 文/蒼蘭香墨 我猛地睜開眼炫狱,長吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼藻懒!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起视译,我...
    開封第一講書人閱讀 37,655評(píng)論 0 266
  • 序言:老撾萬榮一對(duì)情侶失蹤嬉荆,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后酷含,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體鄙早,經(jīng)...
    沈念sama閱讀 44,104評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡汪茧,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,451評(píng)論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了蝶锋。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片陆爽。...
    茶點(diǎn)故事閱讀 38,569評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡什往,死狀恐怖扳缕,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情别威,我是刑警寧澤躯舔,帶...
    沈念sama閱讀 34,254評(píng)論 4 328
  • 正文 年R本政府宣布,位于F島的核電站省古,受9級(jí)特大地震影響粥庄,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜豺妓,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,834評(píng)論 3 312
  • 文/蒙蒙 一惜互、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧琳拭,春花似錦训堆、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,725評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至絮缅,卻和暖如春鲁沥,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背耕魄。 一陣腳步聲響...
    開封第一講書人閱讀 31,950評(píng)論 1 264
  • 我被黑心中介騙來泰國打工画恰, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人吸奴。 一個(gè)月前我還...
    沈念sama閱讀 46,260評(píng)論 2 360
  • 正文 我出身青樓允扇,卻偏偏與公主長得像,于是被迫代替她去往敵國和親奄抽。 傳聞我的和親對(duì)象是個(gè)殘疾皇子蔼两,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,446評(píng)論 2 348