溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點(diǎn)擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

vuejs中有什么內(nèi)置組件

發(fā)布時間:2021-09-06 16:05:23 來源:億速云 閱讀:209 作者:小新 欄目:web開發(fā)

這篇文章給大家分享的是有關(guān)vuejs中有什么內(nèi)置組件的內(nèi)容。小編覺得挺實(shí)用的,因此分享給大家做個參考,一起跟隨小編過來看看吧。

vuejs中內(nèi)置組件有:“<component/>”、“<keep-alive>”、“<transition/>”、“<transition-group/>”、“<slot/>”、“<teleport/>”。

本教程操作環(huán)境:windows7系統(tǒng)、vue2.9.6版,DELL G3電腦。

vue 內(nèi)置組件

內(nèi)置組件可以直接在模板中使用,而不需注冊。

<keep-alive>、<transition>、<transition-group> 和 <teleport> 組件都可以被打包工具 tree-shake。所以它們只會在被使用的時候被引入。如果你需要直接訪問它們,也可以將它們顯性導(dǎo)入。

// Vue 的 CDN 構(gòu)建版本
const { KeepAlive, Teleport, Transition, TransitionGroup } = Vue
// Vue 的 ESM 構(gòu)建版本
import { KeepAlive, Teleport, Transition, TransitionGroup } from 'vue'

<component> 和 <slot> 是模板語法中組件形式的特性。它們不是真正的組件且無法像上述組件那樣被導(dǎo)入。

下面給大家簡單介紹一下vuejs中的內(nèi)置組件。

<component/>

多應(yīng)用與創(chuàng)建動態(tài)組件
參數(shù)有 is 和inline-template,前者多為字符串或自定義組件,后者為布爾類型,

代碼示例

<template>
  <div class="hello">
      <!-- 構(gòu)建動態(tài)組件 -->
      <div :is="currentComp"></div>
      <!-- 按鈕點(diǎn)擊切換組件 -->
      <button v-on:click="changeComponent">改變組件</button>
  </div>
</template>

<script>
//兩個自定義的組件
import login from '../components/login.vue'
import index from '../components/index.vue'
export default {
  name: 'BuildInComponent',
  components:{
      index,
      login
  },
  // 默認(rèn)顯示index組件
  data(){
      return {
          currentComp:index
      }
  },
  methods:{
      changeComponent(){
          if(this.currentComp == login){
              this.currentComp = index
          }else {
              this.currentComp = login
          }

      }
  }
}
</script>

<keep-alive>

<keep-alive> 包裹動態(tài)組件時,會緩存不活動的組件實(shí)例,而不是銷毀它們。和 <transition> 相似,<keep-alive> 是一個抽象組件:它自身不會渲染一個 DOM 元素,也不會出現(xiàn)在父組件鏈中。
此組件上的屬性有 include,exclude,max,前兩者為字符串或這則表達(dá)式,緩存/不緩存匹配到的組件,max表示最多可以緩存的組件數(shù)目。
匹配首先檢查組件自身的 name 選項(xiàng),如果 name 選項(xiàng)不可用,則匹配它的局部注冊名稱 (父組件 components 選項(xiàng)的鍵值)。匿名組件不能被匹配。
此組件通常與v-show,v-if,v-else-if,v-else,is等包含條件的組件結(jié)合使用

代碼示例

<template>
  <div class="hello">
      <!-- 使用keep-alive組件包裹其它條件渲染組件,不符合條件的則會被緩存,等下次條件成立時,則會立即渲染,提高渲染效率 -->
      <keep-alive>
          <div v-if="condition == 1">
              <span>我是111111111111</span>
          </div>
          <div v-else-if="condition == 2">
              <span>我是222222222222222</span>
          </div>
          <div v-else>
              <span>我是333333333333</span>
          </div>
      </keep-alive>

  </div>
</template>

<script>
export default {
  name: 'BuildInComponent',
  data(){
      return {
          condition:parseInt(Math.random()*3)
      }
  },


  
 
}
</script>

<transition/>

添加被包裹元素的過渡效果,<transition> 元素作為單個元素/組件的過渡效果。<transition> 只會把過渡效果應(yīng)用到其包裹的內(nèi)容上,而不會額外渲染 DOM 元素,也不會出現(xiàn)在檢測過的組件層級中。
通常與v-show v-if is等組合使用;
有css過渡和js過渡
常用屬性:name:字符串,用于自動生成 CSS 過渡類名;css:布爾類型,是否使用 CSS 過渡類。默認(rèn)為 true。如果設(shè)置為 false,將只通過組件事件觸發(fā)注冊的 JavaScript 鉤子
還可以通過enter-class,leave-class等屬性,自定義類名,通常在和第三方的動畫庫時結(jié)合使用;

  • css過渡

    css過渡的類名有transition屬性的name屬性值(記作v,若沒有name屬性值,則默認(rèn)為v-),組合以下幾種構(gòu)成:

    1. v-enter:定義進(jìn)入過渡的開始狀態(tài)。在元素被插入之前生效,在元素被插入之后的下一幀移除。

    2. v-enter-active:定義進(jìn)入過渡生效時的狀態(tài)。在整個進(jìn)入過渡的階段中應(yīng)用,在元素被插入之前生效,在過渡/動畫完成之后移除。這個類可以被用來定義進(jìn)入過渡的過程時間,延遲和曲線函數(shù)。

    3. v-enter-to: 2.1.8版及以上 定義進(jìn)入過渡的結(jié)束狀態(tài)。在元素被插入之后下一幀生效 (與此同時 v-enter 被移除),在過渡/動畫完成之后移除。

    4. v-leave: 定義離開過渡的開始狀態(tài)。在離開過渡被觸發(fā)時立刻生效,下一幀被移除。

    5. v-leave-active:定義離開過渡生效時的狀態(tài)。在整個離開過渡的階段中應(yīng)用,在離開過渡被觸發(fā)時立刻生效,在過渡/動畫完成之后移除。這個類可以被用來定義離開過渡的過程時間,延遲和曲線函數(shù)。

    6. v-leave-to: 2.1.8版及以上 定義離開過渡的結(jié)束狀態(tài)。在離開過渡被觸發(fā)之后下一幀生效 (與此同時 v-leave 被刪除),在過渡/動畫完成之后移除。

代碼示例

<template>
  <div class="hello">
      <!-- css過渡示例,transition組件 名稱為slide-fade, -->
      <div id="example-1">
        <button @click="show = !show">
            Toggle render
        </button>
        <transition name="slide-fade">
            <p v-if="show">hello</p>
        </transition>
      </div>
        <!-- css動畫示例 -->
      <div id="example-2">
        <button @click="show = !show">Toggle show</button>
        <transition name="bounce">
            <p v-if="show">Lorem ipsum dolor sit amet, consectetur adipiscing elit. Mauris facilisis enim libero, at lacinia diam fermentum id. Pellentesque habitant morbi tristique senectus et netus.</p>
        </transition>
      </div>

  </div>
</template>

<script>
export default {
  name: 'BuildInComponent',
  data(){
      return {
          show: true
      }
  },
}
</script>

<!-- Add "scoped" attribute to limit CSS to this component only -->
<style scoped>
/* 可以設(shè)置不同的進(jìn)入和離開動畫 */
/* 設(shè)置持續(xù)時間和動畫函數(shù) */
.slide-fade-enter-active {
  transition: all .3s ease;
}
.slide-fade-leave-active {
  transition: all .8s cubic-bezier(1.0, 0.5, 0.8, 1.0);
}
.slide-fade-enter, .slide-fade-leave-to
/* .slide-fade-leave-active for below version 2.1.8 */ {
  transform: translateX(10px);
  opacity: 0;
}

/* 也可以使用css動畫 */
.bounce-enter-active {
  animation: bounce-in .5s;
}
.bounce-leave-active {
  animation: bounce-in .5s reverse;
}
@keyframes bounce-in {
  0% {
    transform: scale(0);
  }
  50% {
    transform: scale(1.5);
  }
  100% {
    transform: scale(1);
  }
}
</style>
  • js過渡

也可以在屬性中聲明 JavaScript 鉤子函數(shù),在鉤子函數(shù)中,使用js進(jìn)行動畫的操作;
當(dāng)只用 JavaScript 過渡的時候,在 enter 和 leave 中必須使用 done 進(jìn)行回調(diào)。否則,它們將被同步調(diào)用,過渡會立即完成
對于僅使用 JavaScript 過渡的元素添加 v-bind:css=“false”,Vue 會跳過 CSS 的檢測。這也可以避免過渡過程中 CSS 的影響。

// 使用js過渡,通常在組件中監(jiān)聽事件,并寫好監(jiān)聽到的回調(diào)函數(shù)即可<transition
  v-on:before-enter="beforeEnter"
  v-on:enter="enter"
  v-on:after-enter="afterEnter"
  v-on:enter-cancelled="enterCancelled"

  v-on:before-leave="beforeLeave"
  v-on:leave="leave"
  v-on:after-leave="afterLeave"
  v-on:leave-cancelled="leaveCancelled">
  <!-- ... --></transition>

<transition-group/>

Props:

  • tag - string - 如果未定義,則不渲染動畫元素。

  • move-class - 覆蓋移動過渡期間應(yīng)用的 CSS 類。

  • 除了 mode - 其他 attribute 和 <transition> 相同。

事件:

  • 事件和 <transition> 相同。

用法:

<transition-group> 提供了多個元素/組件的過渡效果。默認(rèn)情況下,它不會渲染一個 DOM 元素包裹器,但是可以通過 tag attribute 來定義。

注意,每個 <transition-group> 的子節(jié)點(diǎn)必須有獨(dú)立的 key,動畫才能正常工作。

<transition-group> 支持通過 CSS transform 過渡移動。當(dāng)一個子節(jié)點(diǎn)被更新,從屏幕上的位置發(fā)生變化,它會被應(yīng)用一個移動中的 CSS 類 (通過 name attribute 或配置 move-class attribute 自動生成)。如果 CSS transform property 是“可過渡” property,當(dāng)應(yīng)用移動類時,將會使用 FLIP 技術(shù)使元素流暢地到達(dá)動畫終點(diǎn)。

<transition-group tag="ul" name="slide">
  <li v-for="item in items" :key="item.id">
    {{ item.text }}
  </li>
</transition-group>

<slot/>

vue的內(nèi)容分發(fā)非常適合“固定部分+動態(tài)部分”的組件的場景,固定部分可以是結(jié)構(gòu)固定,也可以是邏輯固定,比如下拉loading,下拉loading只是中間內(nèi)容是動態(tài)的,而拉到底部都會觸發(fā)拉取更多內(nèi)容的操作,因此我們可以把下拉loading做成一個有slot的插件

Props:

  • name - string,用于具名插槽

用法:

  • <slot> 元素作為組件模板之中的內(nèi)容分發(fā)插槽。<slot> 元素自身將被替換。

<teleport/>

Props:

  • to - string。需要 prop,必須是有效的查詢選擇器或 HTMLElement (如果在瀏覽器環(huán)境中使用)。指定將在其中移動 <teleport> 內(nèi)容的目標(biāo)元素

<!-- 正確 -->
<teleport to="#some-id" />
<teleport to=".some-class" />
<teleport to="[data-teleport]" />

<!-- 錯誤 -->
<teleport to="h2" />
<teleport to="some-string" />

disabled - boolean。此可選屬性可用于禁用 <teleport> 的功能,這意味著其插槽內(nèi)容將不會移動到任何位置,而是在你在周圍父組件中指定了 <teleport> 的位置渲染。

<teleport to="#popup" :disabled="displayVideoInline">
  <video src="./my-movie.mp4">
</teleport>

請注意,這將移動實(shí)際的 DOM 節(jié)點(diǎn),而不是被銷毀和重新創(chuàng)建,并且它還將保持任何組件實(shí)例的活動狀態(tài)。所有有狀態(tài)的 HTML 元素 (即播放的視頻) 都將保持其狀態(tài)。

感謝各位的閱讀!關(guān)于“vuejs中有什么內(nèi)置組件”這篇文章就分享到這里了,希望以上內(nèi)容可以對大家有一定的幫助,讓大家可以學(xué)到更多知識,如果覺得文章不錯,可以把它分享出去讓更多的人看到吧!

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報,并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

vue
AI