最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

vue.js動(dòng)態(tài)組件和插槽的使用匯總

 更新時(shí)間:2022年05月26日 15:55:00   作者:??pain_past_is_pleasur????  
這篇文章主要介紹了vue.js動(dòng)態(tài)組件和插槽的使用匯總,文章圍繞主題展開詳細(xì)的內(nèi)容介紹,具有一定的參考價(jià)值,需要的小伙伴可以參考一下

組件進(jìn)階-props校驗(yàn)

props校驗(yàn)

普通格式: props: ["propA", "propB"]。沒有類型檢查

高階格式:

props: {
    // 基礎(chǔ)的類型檢查 (`null` 和 `undefined` 會通過任何類型驗(yàn)證)
    propA: Number,
    // 多個(gè)可能的類型
    propB: [String, Number],
    // 必填的字符串
    propC: {
      type: String,
      required: true
    },
    // 帶有默認(rèn)值的數(shù)字
    propD: {
      type: Number,
      default: 100
    },
    // 帶有默認(rèn)值的對象
    propE: {
      type: Object,
      // 對象或數(shù)組默認(rèn)值必須從一個(gè)工廠函數(shù)獲取
      default: function () {
        return { message: 'hello' }
      }
    },
    // 自定義驗(yàn)證函數(shù)
    propF: {
      validator: function (value) {
        // 這個(gè)值必須匹配下列字符串中的一個(gè)
        return ['success', 'warning', 'danger'].indexOf(value) !== -1
      }
    }
  }

組件進(jìn)階 - 動(dòng)態(tài)組件

目標(biāo)效果:

需求: 完成一個(gè)注冊功能頁面, 2個(gè)按鈕切換, 額外封裝兩個(gè)組件:一個(gè)填寫注冊信息, 一個(gè)填寫用戶簡介信息

目標(biāo): 多個(gè)組件使用同一個(gè)掛載點(diǎn),并可以動(dòng)態(tài)切換,這就是動(dòng)態(tài)組件

目錄結(jié)構(gòu):

根組件
├── App.vue
└── components
    ├── UserName.vue # 用戶名和密碼輸入框
 ?? └── UserInfo.vue # 人生格言和自我介紹框

格式:

<component :is="comName"></component>

操作:

UserName.vue

<template>
  <div>
    <h2>UserName</h2>
    <p>用戶名:<input /> </p>
    <p>密碼:<textarea /> </p>
  </div>
</template>
<script>
export default {
}
</script>

在父組件App.vue中使用:

<template>
  <div>
    <button @click="comName = 'UserName'">賬號密碼填寫</button>
    <button @click="comName = 'UserInfo'">個(gè)人信息填寫</button>

    <p>下面顯示注冊組件:</p>
    <div style="border: 1px solid red">
      <!-- vue內(nèi)置的組件component, 可以動(dòng)態(tài)顯示組件 -->
      <component :is="comName"></component>
    </div>
  </div>
</template>
<script>
import UserName from "./UserName";
import UserInfo from "./UserInfo";
export default {
  data() {
    return {
      comName: "UserName",
    };
  },
  components: {
    UserName,
    UserInfo,
  },
};
</script>

注意:

  • is只能是動(dòng)態(tài)屬性=》:is="組件注冊后的標(biāo)簽名字符串或data變量"
  • 不能直接拿注冊標(biāo)簽名賦值使用

小結(jié):

vue內(nèi)置component組件, 配合is屬性, 設(shè)置要顯示的組件標(biāo)簽名字

組件進(jìn)階-keep-alive組件

目標(biāo):

掌握組件緩存的使用

背景:

組件切換會導(dǎo)致組件被頻繁銷毀和重新創(chuàng)建, 大多數(shù)情況下是有自己的意義的,但也可能會導(dǎo)致不必要的性能損耗

演示1: 可以先給UserName.vue和UserInfo.vue 注冊created和destroyed生命周期事件, 觀察創(chuàng)建和銷毀過程

keep-alive

使用Vue內(nèi)置的keep-alive組件, 可以讓包裹的組件保存在內(nèi)存中不被銷毀

格式:

演示2: 使用keep-alive內(nèi)置的vue組件, 讓動(dòng)態(tài)組件緩存而不是銷毀

補(bǔ)充生命周期:

  • activated - 激活
  • deactivated - 失去激活狀態(tài)
<keep-alive>
    <!-- vue內(nèi)置的組件component, 可以動(dòng)態(tài)顯示組件 -->
    <component :is="comName"></component>
</keep-alive>

小結(jié):

keep-alive可以提高組件的性能, 內(nèi)部包裹的標(biāo)簽不會被銷毀和重新創(chuàng)建, 觸發(fā)激活和非激活的生命周期方法

組件進(jìn)階-keep-alive組件-指定緩存

目標(biāo):

掌握keep-alive的include屬性的用法

語法:

  • include="組件名1,組件名2..."
  • :include="['組件名1', '組件名2']"
<keep-alive include="name1,name2">
    <!-- vue內(nèi)置的組件component, 可以動(dòng)態(tài)顯示組件 -->
    <component :is="comName"></component>
</keep-alive>

注意:

匹配首先檢查組件自身的 name 選項(xiàng),如果 name 選項(xiàng)不可用,則匹配它的局部注冊名稱 (父組件 components 選項(xiàng)的鍵值)

組件進(jìn)階 - 默認(rèn)插槽

目標(biāo):

掌握組件插槽的使用

理解:

生活中的插槽

vue中的插槽

  • 組件通過插槽傳入自定義結(jié)構(gòu)
  • 用于實(shí)現(xiàn)組件的內(nèi)容分發(fā), 通過 slot 標(biāo)簽, 可以接收到寫在組件標(biāo)簽內(nèi)的內(nèi)容
  • vue提供組件插槽能力, 允許開發(fā)者在封裝組件時(shí),把不確定的部分定義為插槽

格式

在定義組件時(shí),在template中用slot來占個(gè)坑;

使用時(shí),將組件之間的內(nèi)容來填坑;

組件進(jìn)階-具名插槽

目標(biāo):

掌握具名插槽的使用

背景:

當(dāng)一個(gè)組件內(nèi)有2處以上需要外部傳入標(biāo)簽的地方

格式

使用:

<template #xxx>;

圖示:

  • 傳入的標(biāo)簽可以分別派發(fā)給不同的slot位置
  • v-slot一般跟template標(biāo)簽使用 (template是html5新出標(biāo)簽內(nèi)容模板元素, 不會渲染到頁面上, 一般被vue解析為內(nèi)部標(biāo)簽)

示例:

1.子組件-Pannel2.vue

<div class="container" v-show="isShow">
    <slot name="one"></slot>
    <slot name="two"></slot>
</div>

2 .父組件-UseSlot2.vue

v-slot可以簡化成#使用

v-bind可以省略成:    

v-on: 可以省略成@  

v-slot: 可以簡化成#

寫法1:

<Pannel2>
    <template v-slot:one>
		<img src="../assets/mm.gif" alt="" />
    </template>
    <template v-slot:two>
		<span>我是文字哦</span>
    </template>
</Pannel2>

寫法2:

<Pannel2>
    <!-- 簡化寫法 -->
    <template #one>
		<div>
            <p>寒雨連江夜入?yún)?</p>
            <p>平明送客楚山孤。</p>
            <p>洛陽親友如相問,</p>
            <p>一片冰心在玉壺。</p>
        </div>
    </template>
    <template #two>
		<img src="../assets/mm.gif" alt="" />
    </template>
</Pannel2>

小結(jié):

  • slot有可以設(shè)置多個(gè)
  • 定義組件時(shí):slot的name屬性起插槽名
  • 使用組件時(shí), template配合#插槽名傳入具體html標(biāo)簽或組件

組件進(jìn)階-作用域插槽(難點(diǎn))

目標(biāo):

掌握作用域插槽的用法

目標(biāo): 子組件中的數(shù)據(jù), 在給插槽賦值時(shí)在父組件環(huán)境下使用=> 子傳父=》傳數(shù)據(jù)

步驟:

  • 創(chuàng)建子組件, 準(zhǔn)備slot, 在slot上綁定屬性和子組件值
  • 使用子組件, 傳入自定義標(biāo)簽, 用template和v-slot="自定義變量名"
  • 自定義變量名會自動(dòng)綁定slot上所有屬性, 就可以使用子組件內(nèi)值, 并替換slot位置

示例:

具名插槽, 給slot綁定屬性和值:

<template>
  <div style="border:1px solid #ccc; margin:5px;padding:5px">
    <h2>子組件</h2>
    <!-- 給slot上補(bǔ)充自定義的屬性 -->
    <slot name="content" :a="1" :b="2">
      默認(rèn)內(nèi)容
    </slot>
  </div>
</template>

<script>
export default {
}
</script>

父組件

<template>
  <div style="border:1px solid #ccc; margin:5px;padding:5px">
    <h1>45-插槽-作用域插槽</h1>
    <MyCom>
      <!-- 
        v-slot:插槽名="對象" 
      對象會自動(dòng)接收這個(gè)插槽傳遞回來自定義屬性
      -->
      <template v-slot:content="scope">
        <!-- <h1>自定義的內(nèi)容,填坑, {{scope}}</h1> -->
        <h3>{{scope.a}}</h3>
        <p>{{scope.b}}</p>
      </template>
    </MyCom>
  </div>
</template>
<script>
// 父傳子
//  1.傳數(shù)據(jù)。 自定義屬性    (父)  props(子)
//  2.傳結(jié)構(gòu)。 在組件中寫內(nèi)容(父)  slot (子)
import MyCom from './MyCom.vue'
export default {
  components: { MyCom }
}
</script>

<style scoped>
.content{
background-color: #ccc;
}
</style>

小結(jié):

組件內(nèi)變量綁定在slot上, 然后使用組件v-slot:插槽名字="變量" ,變量上就會綁定slot傳遞的屬性和值

自定義指令-基本使用

自定義指令文檔(了解)

除了核心功能默認(rèn)內(nèi)置的指令 (v-model 和 v-show)等,Vue 也允許注冊自定義指令=》 v-xxx

  • html+css+js的復(fù)用的主要形式是組件
  • 你需要對普通 DOM 元素進(jìn)行底層操作,這時(shí)候就會用到自定義指令

作用:

擴(kuò)展標(biāo)簽額外的功能

自定義指令-定義方式

{
  data(){},
  methods: {},
  directives: {
    focus: { // 自定義指令名
        inserted(el){ // 固定配置項(xiàng) - 當(dāng)指令插入到標(biāo)簽自動(dòng)觸發(fā)此函數(shù)
            el.focus()
        }
    },
  },
}

示例 自動(dòng)獲取焦點(diǎn)

<template>
  <div>
    <input type="text" v-focus />
  </div>
</template>

<script>
export default {
  // 注冊
  directives: {
    focus: { // 自定義指令名
        inserted(el){ // 固定配置項(xiàng) - 當(dāng)指令插入到標(biāo)簽自動(dòng)觸發(fā)此函數(shù)
            el.focus()
        }
    }
  }
}
</script>

自定義指令-傳值和更新

目標(biāo): 使用自定義指令, 傳入一個(gè)值

需求: 定義color指令-傳入一個(gè)顏色, 給標(biāo)簽設(shè)置文字顏色

main.js定義處修改一下:

directives: {
  "color":{
    inserted(el, binding){ // 插入時(shí)觸發(fā)此函數(shù)
      el.style.color = binding.value;
    },
    update(el, binding){ // 更新綁定的變量時(shí)觸發(fā)此函數(shù)=》手動(dòng)更新
      el.style.color = binding.value;
    }
  }
}

Direct.vue處更改一下:

<p v-color="theColor" @click="changeColor">使用v-color指令控制顏色, 點(diǎn)擊變藍(lán)</p>
<script>
  data() {
    return {
      theColor: "red",
    };
  },
  methods: {
    changeColor() {
      this.theColor = 'blue';
    },
  },
</script>

總結(jié):

v-xxx, 自定義指令, 獲取原生DOM, 自定義操作

到此這篇關(guān)于vue.js動(dòng)態(tài)組件和插槽的使用匯總的文章就介紹到這了,更多相關(guān)vue.js動(dòng)態(tài)組件和插槽內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Vue左滑組件slider使用詳解

    Vue左滑組件slider使用詳解

    這篇文章主要為大家詳細(xì)介紹了Vue左滑組件slider的使用,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2020-08-08
  • vue3使用百度地圖超詳細(xì)圖文教程

    vue3使用百度地圖超詳細(xì)圖文教程

    這篇文章主要給大家介紹了關(guān)于vue3使用百度地圖的相關(guān)資料,最近一個(gè)項(xiàng)目要用到地圖,因?yàn)槲⑿判〕绦蛴玫囊彩前俣鹊貓D,所以想著網(wǎng)頁端也用百度地圖,需要的朋友可以參考下
    2023-07-07
  • ubuntu中利用nginx部署vue項(xiàng)目的完整步驟

    ubuntu中利用nginx部署vue項(xiàng)目的完整步驟

    Nginx是一款輕量級的Web服務(wù)器/反向代理服務(wù)器及電子郵件(IMAP/POP3)代理服務(wù)器,在BSD-like 協(xié)議下發(fā)行,下面這篇文章主要給大家介紹了關(guān)于ubuntu中利用nginx部署vue項(xiàng)目的相關(guān)資料,需要的朋友可以參考下
    2022-02-02
  • VUE項(xiàng)目中引入vue-router的詳細(xì)過程

    VUE項(xiàng)目中引入vue-router的詳細(xì)過程

    vue-router 也叫 vue 路由,根據(jù)不同的路徑,來執(zhí)行不同的組件,這篇文章主要介紹了VUE項(xiàng)目中引入vue-router,需要的朋友可以參考下
    2023-05-05
  • Vue.js第四天學(xué)習(xí)筆記

    Vue.js第四天學(xué)習(xí)筆記

    這篇文章主要為大家詳細(xì)介紹了Vue.js第四天的學(xué)習(xí)筆記,json數(shù)組數(shù)據(jù)以csv格式導(dǎo)出,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2016-12-12
  • 簡單談一談Vue中render函數(shù)

    簡單談一談Vue中render函數(shù)

    vue中的render函數(shù),它返回的是一個(gè)虛擬節(jié)點(diǎn)vnode,也就是我們要渲染的節(jié)點(diǎn),下面這篇文章主要給大家介紹了關(guān)于Vue中render函數(shù)的相關(guān)資料,文中通過實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2022-09-09
  • Vue2中實(shí)現(xiàn)dialog的封裝方式

    Vue2中實(shí)現(xiàn)dialog的封裝方式

    這篇文章主要介紹了Vue2中實(shí)現(xiàn)dialog的封裝方式,具有很好的參考價(jià)值,希望對大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-01-01
  • vue+elementUI 復(fù)雜表單的驗(yàn)證、數(shù)據(jù)提交方案問題

    vue+elementUI 復(fù)雜表單的驗(yàn)證、數(shù)據(jù)提交方案問題

    這篇文章主要介紹了vue+elementUI 復(fù)雜表單的驗(yàn)證、數(shù)據(jù)提交方案,本文給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2019-06-06
  • Vue前后端不同端口的實(shí)現(xiàn)方法

    Vue前后端不同端口的實(shí)現(xiàn)方法

    今天小編就為大家分享一篇Vue前后端不同端口的實(shí)現(xiàn)方法,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-09-09
  • Vue-cli框架實(shí)現(xiàn)計(jì)時(shí)器應(yīng)用

    Vue-cli框架實(shí)現(xiàn)計(jì)時(shí)器應(yīng)用

    這篇文章主要為大家詳細(xì)介紹了Vue-cli框架實(shí)現(xiàn)計(jì)時(shí)器應(yīng)用,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-08-08

最新評論

闵行区| 中牟县| 新绛县| 都匀市| 昆山市| 上犹县| 夏津县| 阳江市| 中西区| 留坝县| 济南市| 光山县| 丹巴县| 肃北| 高雄市| 鄂托克前旗| 金乡县| 临潭县| 库车县| 潜江市| 南宁市| 资兴市| 嘉兴市| 香港 | 桑植县| 政和县| 应用必备| 琼结县| 全州县| 外汇| 蓬莱市| 张家川| 温州市| 博兴县| 武鸣县| 永平县| 黄浦区| 寿光市| 偃师市| 开封县| 响水县|