亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

詳解vue 組件

 更新時(shí)間:2020年06月11日 11:50:01   作者:WilsonPan  
這篇文章主要介紹了詳解vue 組件的相關(guān)知識(shí),文中講解非常細(xì)致,代碼供大家參考學(xué)習(xí),感興趣的朋友可以了解下

Vue的兩大核心

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

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

組件基礎(chǔ)

組件渲染過程

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

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

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

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

runtime-only(默認(rèn))

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

runtime-compiler

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

啟用runtime-compiler

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

module.exports = {
 runtimeCompiler: true //默認(rèn)false
}

組件定義

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

例子

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

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

2. 單文件組件(推薦)

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

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

<template> 里只能有一個(gè)根節(jié)點(diǎn),即第一層只能有一個(gè)節(jié)點(diǎn),不能多個(gè)節(jié)點(diǎn)平級(jí)

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

組件注冊(cè)

1. 全局注冊(cè)

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

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

優(yōu)點(diǎn)

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

缺點(diǎn)

  • 全局注冊(cè)的組件會(huì)全部一起打包,增加app.js體積

適合

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

2. 局部注冊(cè)

在需要的地方導(dǎo)入

<template>
 <div id="app">
 <customButton></customButton>
 </div>
</template>
<script>
import CustomButton from "./components/ComponentDemo.vue";

export default {
 name: "App",
 components: { CustomButton }
};
</script>

優(yōu)點(diǎn)

  • 按需加載

缺點(diǎn)

  • 每次使用必須導(dǎo)入,然后components指定

適合

  • 非基礎(chǔ)組件

組件使用

組件復(fù)用

<template>
 <div id="app">
 <img alt="Vue logo" src="./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>

每個(gè)組件都會(huì)創(chuàng)建一個(gè)新實(shí)例,組件的data必須是function,因?yàn)槊總€(gè)實(shí)例維護(hù)自己的data數(shù)據(jù)

組件傳參

1. 通過props屬性

定義一個(gè)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>

運(yùn)行效果

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會(huì)替換插槽的值,若為空,使用默認(rèn)的

運(yùn)行效果

注意:看到是用自定義組件的innerHtml替換插槽,若插槽只有一個(gè),可以不寫name attribute,若多個(gè)插槽需指定插槽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. 運(yùn)行效果

以上就是詳解vue 組件的詳細(xì)內(nèi)容,更多關(guān)于vue組件的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • Vue生命周期詳解

    Vue生命周期詳解

    這篇文章詳細(xì)介紹了Vue的生命周期,文中通過代碼示例介紹的非常詳細(xì)。對(duì)大家的學(xué)習(xí)有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2023-04-04
  • 使用Vue快速實(shí)現(xiàn)一個(gè)無縫輪播效果

    使用Vue快速實(shí)現(xiàn)一個(gè)無縫輪播效果

    這篇文章主要為大家詳細(xì)介紹了如何使用Vue快速實(shí)現(xiàn)一個(gè)無縫輪播效果,文中的示例代碼講解詳細(xì),具有一定的借鑒價(jià)值,有需要的小伙伴可以參考下
    2024-04-04
  • element table多層嵌套顯示的實(shí)踐

    element table多層嵌套顯示的實(shí)踐

    本文主要介紹了element table多層嵌套顯示的實(shí)踐,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-09-09
  • Vue中 v-if 和v-else-if頁面加載出現(xiàn)閃現(xiàn)的問題及解決方法

    Vue中 v-if 和v-else-if頁面加載出現(xiàn)閃現(xiàn)的問題及解決方法

    vue中v-if 和v-else-if在頁面加載的時(shí)候,不滿足條件的標(biāo)簽會(huì)加載然后再消失掉,如果要解決這個(gè)問題,下面小編給大家?guī)砹藢?shí)例代碼,需要的朋友參考下吧
    2018-10-10
  • vue項(xiàng)目優(yōu)化之通過keep-alive數(shù)據(jù)緩存的方法

    vue項(xiàng)目優(yōu)化之通過keep-alive數(shù)據(jù)緩存的方法

    本篇文章主要介紹了vue項(xiàng)目優(yōu)化之通過keep-alive數(shù)據(jù)緩存的方法,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2017-12-12
  • Element-ui Drawer抽屜按需引入基礎(chǔ)使用

    Element-ui Drawer抽屜按需引入基礎(chǔ)使用

    這篇文章主要為大家介紹了Element-ui Drawer抽屜按需引入基礎(chǔ)使用,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-07-07
  • Vue中的組件注冊(cè)方法及注意事項(xiàng)

    Vue中的組件注冊(cè)方法及注意事項(xiàng)

    在Vue中,組件是構(gòu)建頁面的基本單位。通過組件化開發(fā),可以提高代碼的復(fù)用性和可維護(hù)性。組件的注冊(cè)方法包括全局注冊(cè)和局部注冊(cè)兩種方式。同時(shí),需要注意組件名的命名規(guī)范、組件選項(xiàng)的定義方式、組件之間的通信等問題,以實(shí)現(xiàn)更好的組件復(fù)用和開發(fā)效率
    2023-05-05
  • Vue?中使用?WebWorker的示例代碼

    Vue?中使用?WebWorker的示例代碼

    這篇文章主要介紹了Vue中使用WebWorker的示例代碼,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2023-08-08
  • vue阻止重復(fù)請(qǐng)求實(shí)現(xiàn)示例詳解

    vue阻止重復(fù)請(qǐng)求實(shí)現(xiàn)示例詳解

    這篇文章主要為大家介紹了vue阻止重復(fù)請(qǐng)求實(shí)現(xiàn)示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-01-01
  • vue 使用monaco實(shí)現(xiàn)代碼高亮

    vue 使用monaco實(shí)現(xiàn)代碼高亮

    這篇文章主要介紹了vue 使用monaco實(shí)現(xiàn)代碼高亮的方法,幫助大家更好的理解和學(xué)習(xí)使用vue框架,感興趣的朋友可以了解下
    2021-03-03

最新評(píng)論