一、元件與復用
1、為什麼使用元件
vue元件就是提高重用性,**可復用。還有一些自定義標籤,每乙個標籤代表乙個元件,比如:、、
等。
2、元件用法
vue元件需要註冊後才可以使用。註冊有全域性註冊
和區域性註冊
兩種方式。
全域性註冊
vue.component('my-component', );
要在父例項中使用這個元件,必須要在例項建立前註冊,之後就可以用的形式來使用元件。使用小寫加減號分割的形式命名。
vue.component('my-component', );
template
的dom結構必須被乙個元素包含,缺少
會無法渲染並報錯。
在vue例項中,使用components
選項可以區域性註冊元件,註冊後的元件只在該例項作用域下有效。
vue元件的模板在某些情況下會受到html的限制,比如內規定只允許是
、、
等這些**元素,所以在內直接使用元件時無效的。這種情況下,可以使用特殊的
is
屬性來掛載元件。
vue.component('my-component', );
常見的限制元素還有vue元件的子元件用emi
t()來
觸發事件
,父元件
用emit()來觸發事件,父元件用
emit()
來觸發事
件,父組
件用on()來監聽子元件的事件。
父元件也可以直接在子元件的自定義標籤上使用v-on來監聽子元件觸發的自定義事件。
vue.component('my-component',
},methods: ,
handlereduce: function ()
}});new vue(,
methods:
}});
在改變元件的data "counter"後,通過emi
t()再
把它傳遞
給父元件
,父元件
用@in
crea
se和@
redu
ce
。emit()再把它傳遞給父元件,父元件用@increase和@reduce。
emit()
再把它傳
遞給父組
件,父組
件用@i
ncre
ase和
@red
uce。
emit()方法的第乙個引數是自定義事件的名稱。
除了用v-on在元件上監聽自定義事件外,也可以監聽dom事件,這時可以用.native修飾符表示監聽時乙個原生事件,監聽的是該元件的根元素。
2、使用v-model
vue可以在自定義元件上使用v-model
指令。
元件$emit()
的事件名時特殊的input
,在使用元件的父級,並沒有在
上使用@input="handler"
,而是直接用了v-model
繫結的乙個資料total
。
v-model
還可以用來建立自定義的表單輸入元件,進行資料雙向繫結。
-vue.component('my-component',
}});new vue(,
methods:
}});
實現這樣乙個具有雙向繫結的v-model元件要滿足下面兩個要求:
接收乙個value屬性
在有新的value時觸發input事件
3、非父子元件通訊
在實際業務中,除了父子元件通訊外,還有很多非父子元件通訊的場景,非父子元件一般有兩種,兄弟元件和跨多級元件。
在vue 1.x版本中,除了$emit()
方法外,還提供了¥dispatch()
和$broadcast()
。
$dispatch()
用於向上級派發事件,只要是它的父級(一級或多級以上),都可以在vue例項的events
選項內接收。
此例項只在vue 1.x版本中有效:
vue.component('my-component',
}});new vue(,
events:
}});
這些方法在vue 2.x版本中已廢棄。
在vue 2.x中,推薦任何乙個空的vue例項作為**事件匯流排(bus),也就是乙個中介。
var bus = new vue();
vue.component('component-a',
}}); data: ,
mounted: function () )
}});
這種方法巧妙而輕量地實現了任何元件間的通訊,包括父子、兄弟、跨級。
除了**事件匯流排bus
外,還有兩種方法可以實現元件間通訊:父鏈和子元件索引。
父鏈
在子元件中,使用this.$parent
可以直接訪問該元件的父例項或元件,父元件也可以通過this.$children
訪問它所有的子元件,而且可以遞迴向上或向下無限訪問,直到根例項或最內層的元件。
vue.component('component-a',
}}); data:
});
子元件索引
當子元件較多時,通過this.$children
來遍歷出需要的乙個元件例項是比較困難的,尤其是元件動態渲染時,它們的序列是不固定的。
vue提供了子元件索引的方法,用特殊的屬性ref來為子元件指定乙個索引名稱。
vue.component('component-a',
},}); methods:
}});
在父元件模板中,子元件標籤上使用ref指定乙個名稱,並在父元件內通過this.$refs來訪問指定名稱的子元件。
refvue 2.x將v-el和v-ref合併成ref,vue會自動去判斷是普通標籤還是元件。s只在組
件渲染完
成後才填
充,並且
它是非響
應式的。
它僅僅作
為乙個直
接訪問子
元件的應
急方案,
應當避免
在模板或
計算屬性
中使
用refs只在元件渲染完成後才填充,並且它是非響應式的。它僅僅作為乙個直接訪問子元件的應急方案,應當避免在模板或計算屬性中使用
refs只在
元件渲染
完成後才
填充,並
且它是非
響應式的
。它僅僅
作為乙個
直接訪問
子元件的
應急方案
,應當避
免在模板
或計算屬
性中使用
refs。
Linux複習篇(第七章)
互動程序。它是由某種shell程式啟動的程序,如執行乙個命令。互動程序既可以在前台執行,也可以在後台執行。批處理程序。這種程序和終端沒有聯絡,但它是乙個程序系列。監控程序。也稱為守護程序,它是在linux系統啟動時執行的程序,並且執行在後台。at命令用於在使用者指定的時刻執行指定的命令或命令序列。指...
Linux 入門篇第七章
命令列歷史 1 ifconfig 2 init 3 3 clear 4 ls 5 clear 6 lsblk 7 claer 8 clear 9 ls 10 clear 11 ls 12 lsblk 13 pwd 14 hostname 15 pwd 如果機器出問題了,你可以檢視歷史看執行錯了什麼命...
Python 基礎教程(第七章)
在方法或者變數前加上雙下劃線 即可將他們變為私有 類的定義就是執行 塊 多重繼承 class calculator def calculate self,expression self.value eval expression class talker def talk self print hi...