//推薦駝峰命名 或者 使用 '-' 還是看個人看法習慣
const globalcomponent =),
template:
'這是乙個全域性元件'}
const localcomponent =),
template:
'這是乙個區域性元件'}
vue.
component
('globalcomponent'
, globalcomponent)
;//元件名,元件option物件
const vm =
newvue(,
el:, components:
//區域性註冊})
// vm無需復用,所以data可以是直接的物件
const
index=(
)=>
import
('url'
);
//結合上一案例
const vm =
newvue(,
el:,//這裡其實也可以不掛載globalcomponent ,因為已經全域性註冊了
components:
//區域性註冊,
template:
`
`,methods:
})
大家在平時可能都要這樣的需求,就是頁面首部header和尾部footer幾乎相同,可能也只是樣式有稍微的差距,用插槽可實現ui頁面級別的元件復用。
const head =
const vm =
newvue
(//區域性註冊,
template:
` 渲染父級的main的內容
`})
預設的插槽default,和使用插槽模板的非縮寫形式 v-slot:name
const layoutcomponent =
, template:
` 這是main插槽的預設渲染內容,請注意main插槽裡和head和foot的內容區別
這裡是預設的插槽內容
這裡是預設的插槽內容`}
const vm =
newvue
(//區域性註冊,
template:
` 剩餘的這一段內容全部其實被模板的name為default的插槽接受
渲染父級的main的內容
剩餘的這一段內容全部其實被模板的name為default的插槽接受
`})
作用域插槽
插槽可以理解為在父級元件中渲染好的元素,最後放到模板檔案找個空位,渲染。但是如果資料其實是在模板元件內部,而父級元件無法獲取,那麼這就無法實現復用。
有乙個解決方法就是作用域插槽。
//既然是作用域插槽,那麼在模板元件中插槽的宣告肯定不一樣
const layoutcomponent =,,
mainlist:
['zix'
,'wucan']}
),components:
, template:
` 這是main插槽的預設渲染內容,請注意main插槽裡和head和foot的內容區別
`}const vm =
newvue
(//區域性註冊,
template:
` 物件接受模板裡繫結的資料屬性的集合,這裡用解構分離宣告變數 }
`})
動態插槽名v-slot:[name]
對js程式設計要求能力較強。渲染函式,它比模板更接近編譯器建立乙個虛擬dom需要什麼呢?我們先自己分析下
class
="body"
>
>
header
>
>
footer
>
body
>
我們假設body是根節點,由於是樹形結構,遞迴,假設n-1層子vdom為children = […vnodes],那麼n層如何表示,
n
=, attrs:
,
otherneedattribute
},// attribute是可選的,即使傳入的是兩個引數,也會特殊處理為 childrenvdom 實參
childrenvdom:
[...
vnodes]}
n=}}
為什麼先講jsx,因為其開發效率要不乙個個節點通過api建立虛擬dom高不知道多少倍。
createelement
('anchored-heading',}
,[createelement
('span'
,'hello'),
' world!'
])
jsx需要babel外掛程式 由於涉及內容其實較多(基本webpack搭建,各種配置),挖個坑先在這,我們就來簡單一點的vue-cli-4.x寫cli>3的都預設支援jsx語法的解析了
// jsx.vue檔案中可以這麼寫,rander優先順序大於template屬性值,小於template標籤
<
/template>
export
default
}<
/script>
<
/style>
//對於乙個vue檔案,注意它在被import時會經過vue-cli的打包解析成乙個物件,這一點可以從console.log(import ..)看出。有意思的是,在vue檔案上,最後形成的元件option物件在模板解析上有優先順序選取。1 => template標籤;2 => rander函式,3 => template物件屬性。
檔案
//由於單純的寫vue雖然可以通過編譯,但是寫jsx是沒有提示的,這就讓人難受了,不過有乙個方案就是直接寫jsx檔案
//注意,.vue檔案是經過解析最後變成了乙個元件option物件,並可以提供掛載,其實,被匯入父元件的模組就不定需要.vue檔案了,可以是乙個單純的完整的返回元件引數物件的js檔案,或者說jsx檔案
//jsx檔案,本質上是js檔案,只不過可以用jsx元素而已,最後被匯入的時候依然會進過編譯。其實只是單純的js檔案也可以這麼用,至於為什麼可能是做過一些處理,我不太清楚
export
default
, template:
`jsx元件template `
}
沒有自身需要維持的資料的元件 => 這正是為什麼叫函式式元件
//1.
<
/template>
//2.
vue.
component
('functioncomponent'
,= context;
//context 其實就相當於react的props,表現的真正的元件像函式傳參一樣,我個人認識
//這種叫做透傳
return
createelement
('labelname'
, data, children)}}
)
vue掛載(mount)和繼承(extend)
vue之外掛程式和庫(含loading外掛程式實戰)
Vue核心知識 Vue的元件之render函式
元件中的 template 會被編譯成 render function。下例中,直接用 render function 代替 template,結果相同。import vue from vue const component this.slots.default data value compone...
Vue 中元件概念
1 為了能在模板中使用,元件必須先註冊以便 vue 能夠識別。這裡有兩種元件的註冊型別 全域性註冊和區域性註冊。1.1 全域性註冊是通過vue.component來向vue註冊,例子 vue.component my component name 全域性註冊的元件可以用在其被註冊之後的任何 通過ne...
07丨Vue元件的核心概念 2 事件
子元件通過this.emit 事件源 接收的引數 通過乙個事件的demo來演示一下。通過emit傳遞給父元件 有乙個input繫結了乙個change事件,通過handlechange去接收change的 下面還有兩個按鈕,乙個是重置成功,乙個是重置失敗。在外層的div上同樣的繫結了乙個click,也...