摘要:綁定到子組件屬性綁定到父組件屬性在子組件模板內(nèi)將指令綁定到子組件屬性列表第一項,由于父組件找不到屬性,將不會顯示。哪都通快遞龍虎山天師府曜星社內(nèi)容分發(fā)中的被插入中,并且因為中的指令而進行迭代,迭代之后通過獲取上的屬性數(shù)據(jù)。
組件的作用域(一)
父組件模板的內(nèi)容在父組件作用域內(nèi)編譯;子組件模板的內(nèi)容在子組件作用域內(nèi)編譯。
父子組件的編譯相互獨立,編譯時只能使用各自作用域中的屬性和方法,例如,你不可以在父組件模板內(nèi),將一個指令綁定到子組件的屬性或方法上。如果這么做控制臺會報一個屬性未定義的錯誤。
如果想要綁定一個指令以便控制子組件的行為,那么你可以在子組件的模板內(nèi),將一個指令綁定到子組件的屬性或方法上;或者在父組件的模板內(nèi),將指令綁定到父組件的屬性或方法上。
new Vue({ el: "#app-2", data: { makeChildShow: true }, components: { "component-2-1": { template: "I am an sub component.", data: function () { return { childIsShow: true } } }, "component-2-2": { template: "I am an sub component.", data: function () { return { childIsShow: true } } } } })
- 綁定到子組件屬性:
- 綁定到父組件屬性:
- 在子組件模板內(nèi)將指令綁定到子組件屬性:
列表第一項,由于父組件找不到屬性childIsShow,將不會顯示。
默認情況下的內(nèi)容分發(fā)將父組件的內(nèi)容插入子組件模板的方式,我們稱為內(nèi)容分發(fā)。
默認情況下,在子組件中插入的父組件內(nèi)容是不顯示的。
new Vue({ el: "#app-1", data: { message: "I come from parent." }, components: { "component-1": { template: "I am an sub component.
", } } })
{{ message }}
內(nèi)容分發(fā)失敗,message不會顯示。
單個插口如果想使用內(nèi)容分發(fā),將父組件內(nèi)容插入到子組件的模板中,必須在子組件的模板內(nèi)標記一個
如果父組件沒有待分發(fā)的內(nèi)容,備選內(nèi)容成為最終渲染的結(jié)果。
new Vue({ el: "#app-3", components: { "component-3": { template: "
具名插口(多個插口)父組件標題
父組件插入內(nèi)容
單插口模式做內(nèi)容分發(fā),只能一股腦把套入子模板的內(nèi)容插入到有
而具名插口在內(nèi)容和slot上都做上標記,對應的內(nèi)容只能分發(fā)到對應的slot上。
標記內(nèi)容用slot="tag"; 標記slot用
new Vue({ el: "#app-4", components: { "component-4": { template: "" } } })
我來組成頭部
沒被標記的slot都我插
我來組成腿部
以上定義了兩個個不具名的插口,雖然這里顯示正確,但是控制臺報錯,說定義重復的默認插口會有不預期的錯誤
組件作用域(二)根據(jù)具名插口,再來看個組件作用域的例子
new Vue({ el: "#app-7", methods: { parentMethod: function () { console.log("It is the parent"s method"); } }, components:{ "component-7":{ methods:{ childMethod: function(){ console.log("It is the child"s method") } }, template:" " } } })
內(nèi)容分發(fā)部分①|(zhì) 內(nèi)容分發(fā)部分②|
內(nèi)容分發(fā)部分屬于父組件作用域,因此點擊按鈕的內(nèi)容分發(fā)部分,會調(diào)用父組件方法,輸出"It is the parent"s method"。
子組件模板定義屬于子組件作用域,點擊這個部分,會調(diào)用子組件方法,輸出"It is the child"s method"
在內(nèi)容分發(fā)的過程中,父組件分發(fā)的內(nèi)容可以使用定義在子組件模板
特殊的,在標簽中使用slot-scope,自身是不會在頁面上顯示,只起到傳遞數(shù)據(jù)媒介的作用。
new Vue({ el: "#app-5", components: { "component-5":{ template: "" } } })
{{slot_data_obj.slotvala}} {{slot_data_obj.slotvalb}}
由于slot-scope的值本質(zhì)上只是個javascript對象,因此可以使用es6的解構(gòu)語法進行
以上又可以怎么寫
{{slotvala}} {{slotvalb}}插口作用域應用在列表上
插口不僅可以通過自身屬性傳遞數(shù)據(jù)給分發(fā)的內(nèi)容,還可以在其上定義v-for指令,從而將迭代的特性也傳遞給分發(fā)的內(nèi)容。
new Vue({ el: "#app-6", components: { "component-6":{ data:function(){ return { items: [ {id:1,text:"哪都通快遞"}, {id:2,text:"龍虎山天師府"}, {id:3,text:"曜星社"} ] } }, template: "
{{ id+"、"+text }}
內(nèi)容分發(fā)中的被插入slot中,并且因為slot中的v-for指令而進行迭代,迭代之后通過slot-scope獲取slot上的屬性數(shù)據(jù)。
內(nèi)聯(lián)模板當使用子組件的內(nèi)聯(lián)特性——inline-template時,父組件的內(nèi)容分發(fā)部分就被解釋為子組件的模板,而子組件的template屬性也將被這個部分取代(取代后template失效),并且作用域也屬于子組件。
new Vue({ el:"#app-8", components:{ "component-8":{ template:"..."http://全部被替換 data:function(){ return { childMsg:"child"s data" } } } } })
這些將作為組件自身的模板。
而非父組件透傳進來的內(nèi)容。
子組件數(shù)據(jù): {{ childMsg }}
"child"s data"來自子組件的childMsg
由于其特點,在使用內(nèi)聯(lián)模板時,最容易產(chǎn)生的誤區(qū)就是混淆作用域。
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/93340.html
摘要:綁定到子組件屬性綁定到父組件屬性在子組件模板內(nèi)將指令綁定到子組件屬性列表第一項,由于父組件找不到屬性,將不會顯示。哪都通快遞龍虎山天師府曜星社內(nèi)容分發(fā)中的被插入中,并且因為中的指令而進行迭代,迭代之后通過獲取上的屬性數(shù)據(jù)。 組件的作用域(一) 父組件模板的內(nèi)容在父組件作用域內(nèi)編譯;子組件模板的內(nèi)容在子組件作用域內(nèi)編譯。 父子組件的編譯相互獨立,編譯時只能使用各自作用域中的屬性和方法,例...
摘要:假如以的作用域鏈作為類比,組件提供的對象其實就好比一個提供給子組件訪問的作用域,而對象的屬性可以看成作用域上的活動對象。所以,我借鑒了作用域鏈的思路,把當成是組件的作用域來使用。 前言 Context被翻譯為上下文,在編程領域,這是一個經(jīng)常會接觸到的概念,React中也有。 在React的官方文檔中,Context被歸類為高級部分(Advanced),屬于React的高級API,但官方...
摘要:事件總線事件總線首先創(chuàng)建了一個名為的空的實例然后全局定義了組件最后創(chuàng)建了實例。在父組件模板中,子組件標簽上使用指定一個名稱,并在父組件內(nèi)通過來訪問指定名稱的子組件。 學習筆記:組件詳解 組件詳解 組件與復用 Vue組件需要注冊后才可以使用。注冊有全局注冊和局部注冊兩種方式。 全局注冊 Vue.component(my-component, {}); 要在父實例中使用這個組件,必須要...
閱讀 1111·2021-11-16 11:45
閱讀 3132·2021-10-13 09:40
閱讀 723·2019-08-26 13:45
閱讀 1210·2019-08-26 13:32
閱讀 2177·2019-08-26 13:23
閱讀 918·2019-08-26 12:16
閱讀 2830·2019-08-26 11:37
閱讀 1758·2019-08-26 10:32