av一区二区在线观看_亚洲男人的天堂网站_日韩亚洲视频_在线成人免费_欧美日韩精品免费观看视频_久草视

您的位置:首頁技術(shù)文章
文章詳情頁

詳解vue 組件

瀏覽:96日期:2023-01-14 09:32:42

Vue的兩大核心

1. 數(shù)據(jù)驅(qū)動 - 數(shù)據(jù)驅(qū)動界面顯示

2. 模塊化 - 復用公共模塊,組件實現(xiàn)模塊化提供基礎(chǔ)

組件基礎(chǔ)

組件渲染過程

template ---> ast(抽象語法樹) ---> render ---> VDom(虛擬DOM) ---> 真實的Dom ---> 頁面

Vue組件需要編譯,編譯過程可能發(fā)生在

打包過程 (使用vue文件編寫) 運行時(將字符串賦值template字段,掛載到一個元素上并以其 DOM 內(nèi)部的 HTML 作為模板)

對應(yīng)的兩種方式 runtime-only vs runtime-compiler

runtime-only(默認)

打包時只包含運行時,因此體積更少 將template在打包的時候,就已經(jīng)編譯為render函數(shù),因此性能更好

runtime-compiler

打包時需要包含(運行時 + 編譯器),因此體積更大,大概多10Kb 在運行的時候才把template編譯為render函數(shù),因此性能更差

啟用runtime-compiler

vue.config.js(若沒有手動創(chuàng)建一個)

module.exports = { runtimeCompiler: true //默認false}組件定義

1. 字符串形式定義(不推薦)

例子

const CustomButton = { template: '<button>自定義按鈕</button>'};

這種形式在運行時才把template編譯成render函數(shù),因此需要啟用運行時編譯(runtime-compiler)

2. 單文件組件(推薦)

創(chuàng)建.vue后綴的文件,定義如下

<template> <div> <button>自定義按鈕</button> </div></template>

<template> 里只能有一個根節(jié)點,即第一層只能有一個節(jié)點,不能多個節(jié)點平級

這種形式在打包的時就編譯成render函數(shù),因此跟推薦這種方式定義組件

組件注冊

1. 全局注冊

全局注冊是通過Vue.component()注冊

import CustomButton from ’./components/ComponentDemo.vue’Vue.component(’CustomButton’, CustomButton)

優(yōu)點

其他地方可以直接使用 不再需要components指定組件

缺點

全局注冊的組件會全部一起打包,增加app.js體積

適合

基礎(chǔ)組件全局注冊

2. 局部注冊

在需要的地方導入

<template> <div id='app'> <customButton></customButton> </div></template><script>import CustomButton from './components/ComponentDemo.vue';export default { name: 'App', components: { CustomButton }};</script>

優(yōu)點

按需加載

缺點

每次使用必須導入,然后components指定

適合

非基礎(chǔ)組件組件使用

組件復用

<template> <div id='app'> <img alt='Vue logo' src='http://m.4tl426be.cn/bcjs/assets/logo.png' /> <customButton></customButton> <customButton></customButton> <customButton></customButton> </div></template>

customButton 組件

<template> <div id='app'> <button @click='increment'>click me {{times}} times</button> </div></template><script>export default { data() { return { times: 0 }; }, methods: { increment() { return this.times++; } }};</script>

每個組件都會創(chuàng)建一個新實例,組件的data必須是function,因為每個實例維護自己的data數(shù)據(jù)

組件傳參

1. 通過props屬性

定義一個button,按鈕文本通過props傳入

<template> <button> {{buttonText}} </button></template><script>export default { props: { buttonText: String }};</script>

調(diào)用者通過attribute傳入

<customButton buttonText='Button 1'></customButton><customButton buttonText='Button 2'></customButton><customButton buttonText='Button 3'></customButton>

運行效果

詳解vue 組件

2. 通過插槽<slot></slot>

組件在需要替換的地方放入插槽<slot></slot>

<template> <button style='margin:10px'><slot>Defalt Button</slot></button></template><script>export default { props: { buttonText: String }};</script>

調(diào)用者的innerHtml會替換插槽的值,若為空,使用默認的

運行效果

詳解vue 組件

注意:看到是用自定義組件的innerHtml替換插槽,若插槽只有一個,可以不寫name attribute,若多個插槽需指定插槽name attribute

自定義事件

1. 在組件內(nèi)部調(diào)用this.$emit觸發(fā)自定義事件

<template> <div style='margin:10px'> <button @click='increment'> <slot>Defalt Button</slot> </button> <span>Click me {{times}} times</span> </div></template><script>export default { props: { buttonText: String }, data() { return { times: 0 }; }, methods: { increment() { this.times++; ('increment'); } }};</script>

2. 調(diào)用者監(jiān)聽自定義事件

<template> <div id='app'> <customButton @increment='handleIncrement'></customButton> <customButton @increment='handleIncrement'> <span style='color:blue'>Button 2</span> </customButton> <customButton @increment='handleIncrement'>Button 3</customButton> <p>Total click {{totalClicks}} times</p> </div></template><script>import CustomButton from './components/ComponentDemo.vue';export default { name: 'App', components: { CustomButton }, data() { return { totalClicks: 0 }; }, methods: { handleIncrement() { this.totalClicks++; } }};</script>

3. 運行效果

詳解vue 組件

以上就是詳解vue 組件的詳細內(nèi)容,更多關(guān)于vue組件的資料請關(guān)注好吧啦網(wǎng)其它相關(guān)文章!

標簽: Vue
相關(guān)文章:
主站蜘蛛池模板: 日韩精品免费视频 | 日韩欧美国产一区二区 | 国产午夜精品一区二区三区四区 | 北条麻妃视频在线观看 | 日韩三区在线 | 欧美日韩国产一区二区三区 | 成人精品一区二区三区 | 在线观看亚洲欧美 | 国产在线拍偷自揄拍视频 | 久久91精品国产 | 欧美激情在线精品一区二区三区 | 国产成人精品一区二区三区 | www.毛片| 一色一黄视频 | 天天操 天天操 | 欧美成人猛片aaaaaaa | 97精品久久 | 亚洲欧美在线一区 | 精品1区 | 国产精品一区二区视频 | 91精品久久久久久久久久入口 | 国产成人免费网站 | 亚洲高清在线 | www国产亚洲精品久久网站 | 精品国产色 | 日日骚av | 国内自拍偷拍 | 午夜寂寞影院在线观看 | 亚洲国产精品一区二区三区 | 免费在线看黄 | 日韩av电影院 | 伊人看片| 欧美亚洲国产一区二区三区 | 男女一区二区三区 | 欧美lesbianxxxxhd视频社区 | 国产精品成人在线播放 | 99久久国产 | 国精产品一区一区三区免费完 | 日本特黄特色aaa大片免费 | 日韩 欧美 综合 | 亚洲视频区 |