vue-------內置組件

vue api強化學習之-------內置組件

vue創建的全局組件,我們可以在應用的任何地方使用此組件來組織我們的組件。

<component/>

多應用與創建動態組件
參數有 is 和inline-template,前者多爲字符串或自定義組件,後者爲布爾類型,

代碼示例

<template>
  <div class="hello">
      <!-- 構建動態組件 -->
      <div :is="currentComp"></div>
      <!-- 按鈕點擊切換組件 -->
      <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
  },
  // 默認顯示index組件
  data(){
      return {
          currentComp:index
      }
  },
  methods:{
      changeComponent(){
          if(this.currentComp == login){
              this.currentComp = index
          }else {
              this.currentComp = login
          }

      }
  }
}
</script>

<keep-alive>

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

代碼示例

<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> 只會把過渡效果應用到其包裹的內容上,而不會額外渲染 DOM 元素,也不會出現在檢測過的組件層級中。
通常與v-show v-if is等組合使用;
有css過渡和js過渡
常用屬性:name:字符串,用於自動生成 CSS 過渡類名;css:布爾類型,是否使用 CSS 過渡類。默認爲 true。如果設置爲 false,將只通過組件事件觸發註冊的 JavaScript 鉤子
還可以通過enter-class,leave-class等屬性,自定義類名,通常在和第三方的動畫庫時結合使用;

  • css過渡

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

    1. v-enter:定義進入過渡的開始狀態。在元素被插入之前生效,在元素被插入之後的下一幀移除。
    2. v-enter-active:定義進入過渡生效時的狀態。在整個進入過渡的階段中應用,在元素被插入之前生效,在過渡/動畫完成之後移除。這個類可以被用來定義進入過渡的過程時間,延遲和曲線函數。
    3. v-enter-to: 2.1.8版及以上 定義進入過渡的結束狀態。在元素被插入之後下一幀生效 (與此同時 v-enter 被移除),在過渡/動畫完成之後移除。
    4. v-leave: 定義離開過渡的開始狀態。在離開過渡被觸發時立刻生效,下一幀被移除。
    5. v-leave-active:定義離開過渡生效時的狀態。在整個離開過渡的階段中應用,在離開過渡被觸發時立刻生效,在過渡/動畫完成之後移除。這個類可以被用來定義離開過渡的過程時間,延遲和曲線函數。
    6. v-leave-to: 2.1.8版及以上 定義離開過渡的結束狀態。在離開過渡被觸發之後下一幀生效 (與此同時 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>
/* 可以設置不同的進入和離開動畫 */
/* 設置持續時間和動畫函數 */
.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 鉤子函數,在鉤子函數中,使用js進行動畫的操作;
當只用 JavaScript 過渡的時候,在 enter 和 leave 中必須使用 done 進行回調。否則,它們將被同步調用,過渡會立即完成
對於僅使用 JavaScript 過渡的元素添加 v-bind:css=“false”,Vue 會跳過 CSS 的檢測。這也可以避免過渡過程中 CSS 的影響。

// 使用js過渡,通常在組件中監聽事件,並寫好監聽到的回調函數即可
<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>

參考鏈接----官網
參考鏈接----掘金1
參考鏈接----掘金2

<slot/>

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

參考鏈接

原來vue的slot可以這麼玩轉
細談 vue - slot 篇
對於 vue 的 slot 解釋,最通俗易懂的版本

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章