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