91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

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

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

Vue如何實現遞歸組件

發布時間:2022-09-07 09:56:38 來源:億速云 閱讀:155 作者:iii 欄目:開發技術

本文小編為大家詳細介紹“Vue如何實現遞歸組件”,內容詳細,步驟清晰,細節處理妥當,希望這篇“Vue如何實現遞歸組件”文章能幫助大家解決疑惑,下面跟著小編的思路慢慢深入,一起來學習新知識吧。

一、遞歸組件是什么?

字面理解為層層遞進最后歸并到一起,它的特點就是層級分明。

例如餓了么組件庫的樹組件就是一個遞歸。

Vue如何實現遞歸組件

二、Vue實現遞歸的核心思路

1、循環出一級類別

2、判斷如果有多級,再調用自身。

三、代碼示例

1.父級

代碼如下(示例):

<template>
  <div>
    <!-- 遞歸組件 -->
    <Recursion :list="list" />  list為獲取數據,傳入子頁面
  </div>
</template>

<script>
import Recursion from "./recursion.vue";

export default {
  name: "index-Recursion",
  components: {
    Recursion,
  },
};
</script>

2.子級

代碼如下(示例):

<template>
  <div>
    <div class="item">
      <div>
          <ul>
            <li v-for="(l, id) of list" :key="id">
              {{ l.name }}
              <ul  v-if="l.chidren"> // 核心代碼1
                <li>
                    <index-chird :list="l.chidren" /> // 核心代碼2
                </li>
              </ul>
            </li>
          </ul>
        </div>
    </div>
  </div>
</template>

<script>
export default {
  name: "index-chird", // 自身組件
  props: {
    list: Array,
  },
  data() {
    return {
      list: [],
    };
  },

  watch: {
    list(newData) {
      this.list = newData;
    },
  },
  
};
</script>

<style  scoped>
.item {
  margin: 0 auto;
}
</style>

此處使用監聽器監聽數據變化,如果正常發請求傳遞數據不需要監聽,如果報出沒有拿到數據的錯誤可使用監聽器。

3、實現效果

Vue如何實現遞歸組件

補充:遞歸組件的應用場景

除了上述的樹形視圖外,評論也是一個不錯的應用場景,比如網易新聞的評論回復功能。或者一個包含父任務和多級子任務的todolist,總之,遞歸組件適合那些在UI上有父子關系的場景。

寫一個遞歸組件

其實,有一點也是在實現遞歸組件要注意的,就是要防止無限遞歸,造成調用棧溢出。上面說的子子孫孫,無窮盡也,說說可以,可是瀏覽器受不了啊。這就要根據實際場景來分析遞歸的終止條件。接下來,我們來寫一個遞歸組件。

上面的demo實現了一個模擬dom事件冒泡的操作,當點擊中心圓時,事件逐級傳遞,然后改變div的顏色,直到冒泡到最頂層。這里根據設置圓的數量進行遞歸,遞歸的終止條件是直到數量減到1:

<template>
...
    <colorful-circle 
         v-if="count > 1" // 控制遞歸條件
         :count="count - 1" // 每向下一層,count減1
         @colorChange="handleColor" 
    ></colorful-circle>
...
</template>

遞歸組件在事件監聽上也是一個有意思的地方,你可以一層一層接力,直到將事件冒泡到最頂層。代碼片段如下:

<template>
...
    <colorful-circle 
         v-if="count > 1" 
         :count="count - 1"
         @colorChange="handleColor" // 監聽子colorful-circle組件發出的事件
    ></colorful-circle>
...
</template>
 
<script>
name: 'colorful-circle',
...
methods: {
...
    handleColor(c) {
      this.color = Color(c).darkenByAmount( .05 ); // 在本層組件改變顏色
      setTimeout(() => {
        this.$emit('colorChange', this.color); // 把事件再冒泡到上一層組件
      },100)
    },
}
...
</script>

讀到這里,這篇“Vue如何實現遞歸組件”文章已經介紹完畢,想要掌握這篇文章的知識點還需要大家自己動手實踐使用過才能領會,如果想了解更多相關內容的文章,歡迎關注億速云行業資訊頻道。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

vue
AI

寿阳县| 敦煌市| 宜兰县| 县级市| 米脂县| 哈密市| 罗源县| 五大连池市| 瑞安市| 汕头市| 台中市| 镇江市| 江永县| 昂仁县| 关岭| 凤山市| 崇文区| 凌源市| 衢州市| 扬州市| 元氏县| 都安| 高雄县| 博湖县| 邛崃市| 沙坪坝区| 临清市| 龙泉市| 杭锦后旗| 通河县| 日土县| 常山县| 柞水县| 涡阳县| 乌兰浩特市| 延寿县| 静宁县| 德清县| 台前县| 静海县| 海门市|