摘要:全局混入對象不會覆蓋組件中的同名鉤子函數將混合為一個數組,因此都將被調用。而鉤子函數混入和組件中的不合并,而是都執行,先執行混入中的鉤子,再執行組件中的。
組件引用 —— ref、$refs
給子組件或者原始DOM加上ref特性,就可以為其聲明引用標記,添加引用后,可以在Javascript中使用vm|this.$refs.refname獲取子組件或原始DOM。若是原始DOM,則效果如document.querySelector(ele);若是子組件,則結果為一個VueComponent實例對象
Vue.component("component-1", { props: ["subProp"], data: function () { return { subData: "child"s data" } }, template: "子組件內容" }) Vue.component("component-2", { template: "
獲取子組件data屬性[{{subDataVal}}]
獲取子組件prop特性[{{subPropVal}}]
獲取普通DOM元素值[{{commonDomVal}}]
- {{item.case}}
父組件數據定義:message、subPropVal、subDataVal、commonDomVal和一個數組items。
子組件一中定義有:propssubProp、datasubData
我們在一個組件
現在,就可以在綁定的按鈕單擊事件的回調中,通過this.$refs獲取組件和原始DOM的信息了,這些信息包括子組件的props、data和input元素的value值
如果和v-for一起使用,那么this.$refs.refname返回的是一個數組,引用原始DOM為一個原始DOM的數組,引用子組件為一個VueComponent數組,如在上面的例子中使用v-for&ref把輸出打印在控制臺如下:
混入(Mixins)在Vue中沒有通用的API來實現組件繼承的,但也有一些手段可以重復利用那些多個組件中相同的功能,比如這里的Mixin。當多個組件有相同屬性或方法時,可以抽取相同部分放入一個Mixins對象中。
Vue.mixin({ created: function () { console.log("全局混入對象") } }) var superPowersMixin = { data: function () { return { superPowers: false, //不會覆蓋組件中的`img` img: require("./angular.png"), } }, methods: { superMe: function () { this.$el.classList.add("super") this.superPowers = true }, goback: function () { this.$el.firstChild.innerText = "Forever Stay Here" } }, created: function () { this.$options.template = "" + "" + this.$options.template } } new Vue({ el: "#app-1", components: { vueImage: { data: function () { return { img: require("./vue.png") } }, template: "", methods: { goback: function () { this.$el.classList.remove("super") this.superPowers = false } }, //同名鉤子函數將混合為一個數組,因此都將被調用。混入對象的鉤子將在組件自身鉤子之前調用。 created: function () { this.$options.template = "" + this.$options.template + "" }, mixins: [superPowersMixin] }, reactImage: { data: function () { return { img: require("./react.png") } }, template: "", created: function () { this.$options.template = "" + this.$options.template + "" }, mixins: [superPowersMixin] } } })
在以上示例混入對象中,我們使用了屬性、模板、方法和鉤子函數,對于不同的選項來說,我們有不同的合并規則。
總體上來講,當選項是一個對象時,我們就合并成一個大的對象,如果對象中有重名的屬性時,我們就丟棄混入對象中的屬性。比如為組件vueImage添加混入時,屬性img和方法goback()就被丟棄。而鉤子函數混入和組件中的不合并,而是都執行,先執行混入中的鉤子,再執行組件中的。
利用混入可以模擬下繼承系統。
var SuperClass = { template: "{{message}}
", data() { return { message: "super class data" } }, methods: { superMethod() { this.message = "run super class method to change data" } } } var SubClass = { mixins: [SuperClass], template: "{{message}}
", methods: { superMethod() { this.message = "override super class method" }, subMethod() { this.message = "run sub class method to change data" } } } new Vue({ el: "#app-2", components: { SuperClass, SubClass } })
在這個例子中,為組件subClass混入了superClass,并從superClass那里繼承了屬性message,重寫了方法superMethod(),又添加了自己的方法subMethod()。感覺可以開發開發- -b。
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/93396.html
摘要:系列專欄博主結合工作實踐輸出的,解決實際問題的專欄,朋友們看過來開發實戰嵌入式通用開發實戰嵌入式開發實戰 【系列專欄】:博主結合工作實踐輸出的,解決實際問題的專欄,朋友們看過來! 《QT開發實戰》 《嵌入式通用開發實戰》 《嵌入式Linux開發實戰
摘要:雜項補充雜項補充一塊與內聯一塊與內聯塊塊獨行顯示支持寬高,寬度默認適應父級,高度默認由子級或內容撐開設置寬高后,采用設置的寬高內聯內聯同行顯示不支持寬高上下無效果,左右會起作用,不會影響它的高度,背景會影響。css雜項補充 一、塊與內聯 1.塊 獨行顯示 支持寬高,寬度默認適應父級,高度默認由子級或內容撐開 設置寬高后,采用設置的寬高 2.內聯 同行顯示 不支持寬高 margin上下無...
閱讀 2556·2023-04-25 20:05
閱讀 2885·2023-04-25 17:56
閱讀 2195·2021-10-14 09:49
閱讀 2679·2019-08-29 15:10
閱讀 2922·2019-08-29 12:25
閱讀 416·2019-08-28 18:23
閱讀 756·2019-08-26 13:26
閱讀 1370·2019-08-23 18:21