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

vue中組件傳參的幾種常用方法舉例

 更新時間:2023年08月23日 09:23:37   作者:尋源千鶴  
這篇文章主要給大家介紹了關(guān)于vue中組件傳參的幾種常用方法,Vue組件傳參方也是面試最??嫉膬?nèi)容,文中通過代碼實(shí)例介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考借鑒價值,需要的朋友可以參考下

1.父子組件

  • Props:通過在父組件中定義props屬性,將數(shù)據(jù)傳遞給子組件。子組件通過props屬性接收數(shù)據(jù)。例如:
// 父組件
<template>
  <child-component :message="hello"></child-component>
</template>
<script>
import ChildComponent from './ChildComponent.vue'
export default {
  components: {
    ChildComponent
  },
  data() {
    return {
      hello: 'Hello World!'
    }
  }
}
</script>
// 子組件
<template>
  <div>{{ message }}</div>
</template>
<script>
export default {
  props: {
    message: String
  }
}
</script>
  • $emit:通過在子組件中觸發(fā)事件,將數(shù)據(jù)傳遞給父組件。父組件通過在子組件上監(jiān)聽事件,接收數(shù)據(jù)。例如:
// 子組件
<template>
  <button @click="sendMessage">Send Message</button>
</template>
<script>
export default {
  methods: {
    sendMessage() {
      this.$emit('message-sent', 'Hello World!')
    }
  }
}
</script>
// 父組件
<template>
  <child-component @message-sent="handleMessage"></child-component>
</template>
<script>
import ChildComponent from './ChildComponent.vue'
export default {
  components: {
    ChildComponent
  },
  methods: {
    handleMessage(message) {
      console.log(message) // 'Hello World!'
    }
  }
}
</script>
  • Provide/Inject:通過在父組件中提供數(shù)據(jù),讓子孫組件可以注入數(shù)據(jù)。例如:
// 父組件
<template>
  <div>
    <provide-message :message="hello">
      <child-component></child-component>
    </provide-message>
  </div>
</template>
<script>
import ProvideMessage from './ProvideMessage.vue'
import ChildComponent from './ChildComponent.vue'
export default {
  components: {
    ProvideMessage,
    ChildComponent
  },
  data() {
    return {
      hello: 'Hello World!'
    }
  }
}
</script>
// ProvideMessage組件
<template>
  <div>
    <slot></slot>
  </div>
</template>
<script>
export default {
  provide() {
    return {
      message: this.message
    }
  },
  props: {
    message: String
  }
}
</script>
// 子組件
<template>
  <div>{{ message }}</div>
</template>
<script>
export default {
  inject: ['message']
}
</script>

以上是Vue中組件傳參的三種常用方法,分別是Props、$emit和Provide/Inject。通過這些方法,我們可以在組件之間傳遞數(shù)據(jù),實(shí)現(xiàn)組件之間的通信。

2.兄弟組件

  • 通過共同的父組件傳遞數(shù)據(jù):如果兩個兄弟組件有共同的父組件,可以通過在父組件中定義數(shù)據(jù),然后通過props屬性分別傳遞給兩個兄弟組件。例如:
// 父組件
<template>
  <div>
    <child-component-1 :message="hello"></child-component-1>
    <child-component-2 :message="world"></child-component-2>
  </div>
</template>
<script>
import ChildComponent1 from './ChildComponent1.vue'
import ChildComponent2 from './ChildComponent2.vue'
export default {
  components: {
    ChildComponent1,
    ChildComponent2
  },
  data() {
    return {
      hello: 'Hello',
      world: 'World'
    }
  }
}
</script>
// ChildComponent1組件
<template>
  <div>{{ message }}!</div>
</template>
<script>
export default {
  props: {
    message: String
  }
}
</script>
// ChildComponent2組件
<template>
  <div>{{ message }}!</div>
</template>
<script>
export default {
  props: {
    message: String
  }
}
</script>
  • 通過事件總線傳遞數(shù)據(jù):可以在Vue實(shí)例中創(chuàng)建一個事件總線,然后在兄弟組件中分別觸發(fā)和監(jiān)聽事件,從而實(shí)現(xiàn)數(shù)據(jù)傳遞。例如:
// Vue實(shí)例
<script>
export default {
  data() {
    return {
      message: ''
    }
  },
  created() {
    this.$on('message-sent', (message) => {
      this.message = message
    })
  }
}
</script>
// ChildComponent1組件
<template>
  <button @click="sendMessage">Send Message</button>
</template>
<script>
export default {
  methods: {
    sendMessage() {
      this.$root.$emit('message-sent', 'Hello')
    }
  }
}
</script>
// ChildComponent2組件
<template>
  <div>{{ message }} World!</div>
</template>
<script>
export default {
  computed: {
    message() {
      return this.$root.message
    }
  }
}
</script>
  • 通過Vuex狀態(tài)管理傳遞數(shù)據(jù):可以使用Vuex來管理應(yīng)用程序的狀態(tài),從而實(shí)現(xiàn)兄弟組件之間的數(shù)據(jù)傳遞。例如:
// Vuex store
import Vue from 'vue'
import Vuex from 'vuex'
Vue.use(Vuex)
export default new Vuex.Store({
  state: {
    message: ''
  },
  mutations: {
    setMessage(state, message) {
      state.message = message
    }
  }
})
// ChildComponent1組件
<template>
  <button @click="sendMessage">Send Message</button>
</template>
<script>
export default {
  methods: {
    sendMessage() {
      this.$store.commit('setMessage', 'Hello')
    }
  }
}
</script>
// ChildComponent2組件
<template>
  <div>{{ message }} World!</div>
</template>
<script>
export default {
  computed: {
    message() {
      return this.$store.state.message
    }
  }
}
</script>

以上是Vue中兄弟組件傳參的三種常用方法,分別是通過共同的父組件傳遞數(shù)據(jù)、通過事件總線傳遞數(shù)據(jù)和通過Vuex狀態(tài)管理傳遞數(shù)據(jù)。根據(jù)具體的場景和需求,選擇合適的方法來實(shí)現(xiàn)兄弟組件之間的數(shù)據(jù)傳遞。

3.祖先后代

  • 通過props和 e m i t 傳遞數(shù)據(jù):祖先組件可以通過 p r o p s 屬性將數(shù)據(jù)傳遞給中間組件,中間組件再通過 p r o p s 屬性將數(shù)據(jù)傳遞給后代組件。后代組件可以通過 emit傳遞數(shù)據(jù):祖先組件可以通過props屬性將數(shù)據(jù)傳遞給中間組件,中間組件再通過props屬性將數(shù)據(jù)傳遞給后代組件。后代組件可以通過 emit傳遞數(shù)據(jù):祖先組件可以通過props屬性將數(shù)據(jù)傳遞給中間組件,中間組件再通過props屬性將數(shù)據(jù)傳遞給后代組件。后代組件可以通過emit事件將數(shù)據(jù)傳遞回祖先組件。例如:
// 祖先組件
<template>
  <div>
    <middle-component :message="hello"></middle-component>
  </div>
</template>
<script>
import MiddleComponent from './MiddleComponent.vue'
export default {
  components: {
    MiddleComponent
  },
  data() {
    return {
      hello: 'Hello'
    }
  }
}
</script>
// 中間組件
<template>
  <div>
    <child-component :message="message" @message-sent="sendMessage"></child-component>
  </div>
</template>
<script>
import ChildComponent from './ChildComponent.vue'
export default {
  components: {
    ChildComponent
  },
  props: {
    message: String
  },
  methods: {
    sendMessage(message) {
      this.$emit('message-sent', message)
    }
  }
}
</script>
// 后代組件
<template>
  <div>{{ message }} World!</div>
</template>
<script>
export default {
  props: {
    message: String
  }
}
</script>
  • 通過provide和inject傳遞數(shù)據(jù):祖先組件可以通過provide方法提供數(shù)據(jù),后代組件可以通過inject方法注入數(shù)據(jù)。例如:
// 祖先組件
<template>
  <div>
    <middle-component>
      <child-component></child-component>
    </middle-component>
  </div>
</template>
<script>
import MiddleComponent from './MiddleComponent.vue'
export default {
  components: {
    MiddleComponent
  },
  provide() {
    return {
      message: 'Hello'
    }
  }
}
</script>
// 中間組件
<template>
  <div>
    <slot></slot>
  </div>
</template>
// 后代組件
<template>
  <div>{{ message }} World!</div>
</template>
<script>
export default {
  inject: ['message']
}
</script>
  • 通過Vuex狀態(tài)管理傳遞數(shù)據(jù):祖先組件和后代組件都可以通過Vuex來管理應(yīng)用程序的狀態(tài),從而實(shí)現(xiàn)數(shù)據(jù)傳遞。例如:
// Vuex store
import Vue from 'vue'
import Vuex from 'vuex'
Vue.use(Vuex)
export default new Vuex.Store({
  state: {
    message: 'Hello'
  },
  mutations: {
    setMessage(state, message) {
      state.message = message
    }
  }
})
// 祖先組件
<template>
  <div>
    <middle-component>
      <child-component></child-component>
    </middle-component>
  </div>
</template>
<script>
import MiddleComponent from './MiddleComponent.vue'
export default {
  components: {
    MiddleComponent
  }
}
</script>
// 中間組件
<template>
  <div>
    <slot></slot>
  </div>
</template>
// 后代組件
<template>
  <div>{{ message }} World!</div>
</template>
<script>
export default {
  computed: {
    message() {
      return this.$store.state.message
    }
  }
}
</script>

以上是Vue中祖先組件和后代組件傳遞數(shù)據(jù)的三種常用方法,分別是通過props和$emit傳遞數(shù)據(jù)、通過provide和inject傳遞數(shù)據(jù)和通過Vuex狀態(tài)管理傳遞數(shù)據(jù)。根據(jù)具體的場景和需求,選擇合適的方法來實(shí)現(xiàn)祖先組件和后代組件之間的數(shù)據(jù)傳遞。

4.參數(shù)傳遞和插槽之間的聯(lián)系

在Vue中,傳參和插槽是兩個不同的概念,但它們之間有一定的關(guān)系。

傳參是指在組件之間傳遞數(shù)據(jù),可以通過props和$emit、provide和inject、Vuex等方式實(shí)現(xiàn)。傳參的目的是讓組件之間可以共享數(shù)據(jù),從而實(shí)現(xiàn)組件之間的通信。

插槽是指在組件中定義一個或多個插槽,然后在使用該組件時,可以在插槽中插入任意內(nèi)容。插槽的目的是讓組件更加靈活,可以根據(jù)使用場景動態(tài)地插入不同的內(nèi)容。

傳參和插槽之間的關(guān)系在于,傳參可以用來控制插槽中的內(nèi)容。例如,可以通過props屬性將數(shù)據(jù)傳遞給子組件,在子組件中使用插槽來展示這些數(shù)據(jù)。又例如,可以通過$emit事件將子組件中的數(shù)據(jù)傳遞給父組件,在父組件中使用插槽來展示這些數(shù)據(jù)。

下面是一個示例,演示了如何通過傳參和插槽來控制組件中的內(nèi)容:

// 父組件
<template>
  <div>
    <child-component :message="hello">
      <template #default="{ message }">
        <div>{{ message }} World!</div>
      </template>
    </child-component>
  </div>
</template>
<script>
import ChildComponent from './ChildComponent.vue'
export default {
  components: {
    ChildComponent
  },
  data() {
    return {
      hello: 'Hello'
    }
  }
}
</script>
// 子組件
<template>
  <div>
    <slot :message="message"></slot>
  </div>
</template>
<script>
export default {
  props: {
    message: String
  },
  data() {
    return {
      message: this.message
    }
  }
}
</script>

在上面的示例中,父組件通過props屬性將數(shù)據(jù)傳遞給子組件,子組件通過插槽將數(shù)據(jù)傳遞給父組件。具體來說,父組件將數(shù)據(jù)hello傳遞給子組件,子組件將數(shù)據(jù)message傳遞給插槽,父組件通過插槽接收數(shù)據(jù)并展示在頁面上。

總之,傳參和插槽是兩個不同的概念,但它們之間有一定的關(guān)系。傳參可以用來控制插槽中的內(nèi)容,從而實(shí)現(xiàn)組件之間的通信和動態(tài)渲染。

總結(jié)

到此這篇關(guān)于vue中組件傳參的幾種常用方法的文章就介紹到這了,更多相關(guān)vue組件傳參內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 解決vue+webpack項(xiàng)目接口跨域出現(xiàn)的問題

    解決vue+webpack項(xiàng)目接口跨域出現(xiàn)的問題

    這篇文章主要介紹了解決vue+webpack項(xiàng)目接口跨域出現(xiàn)的問題,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-08-08
  • vue中遞歸組件的實(shí)現(xiàn)示例

    vue中遞歸組件的實(shí)現(xiàn)示例

    遞歸組件是Vue中用于渲染復(fù)雜嵌套結(jié)構(gòu)的強(qiáng)大工具,通過組件引用自身來簡化代碼,文中通過示例代碼介紹的非常詳細(xì),需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2024-12-12
  • Element-ui自定義table表頭、修改列標(biāo)題樣式、添加tooltip、:render-header使用

    Element-ui自定義table表頭、修改列標(biāo)題樣式、添加tooltip、:render-header使用

    這篇文章主要介紹了Element-ui自定義table表頭、修改列標(biāo)題樣式、添加tooltip、:render-header使用,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2019-04-04
  • Vue中插槽slot的使用方法

    Vue中插槽slot的使用方法

    插槽就是子組件中的提供給父組件使用的一個占位符,用<slot></slot> 表示,父組件可以在這個占位符中填充任何模板代碼,如 HTML、組件等,填充的內(nèi)容會替換子組件的<slot></slot>標(biāo)簽,這篇文章主要介紹了Vue插槽的理解和使用,需要的朋友可以參考下
    2023-03-03
  • Electron?store及shareObject進(jìn)程間數(shù)據(jù)交互存儲功能封裝

    Electron?store及shareObject進(jìn)程間數(shù)據(jù)交互存儲功能封裝

    這篇文章主要為大家介紹了Electron?store及shareObject進(jìn)程間數(shù)據(jù)交互存儲功能封裝示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-09-09
  • KKFileView結(jié)合vue多格式文件在線預(yù)覽功能實(shí)現(xiàn)

    KKFileView結(jié)合vue多格式文件在線預(yù)覽功能實(shí)現(xiàn)

    kkFileView是git的開源在線文件預(yù)覽項(xiàng)目,這篇文章主要介紹了KKFileView結(jié)合vue多格式文件在線預(yù)覽功能,本文給大家介紹的非常詳細(xì),需要的朋友可以參考下
    2024-02-02
  • 基于VuePress 輕量級靜態(tài)網(wǎng)站生成器的實(shí)現(xiàn)方法

    基于VuePress 輕量級靜態(tài)網(wǎng)站生成器的實(shí)現(xiàn)方法

    VuePress是一個基于Vue的輕量級靜態(tài)網(wǎng)站生成器以及為編寫技術(shù)文檔而優(yōu)化的默認(rèn)主題。這么文章給大家詳細(xì)介紹了vuepress 靜態(tài)網(wǎng)站生成器的方法,需要的朋友參考下吧
    2018-04-04
  • Vue項(xiàng)目中引用本地字體的完整指南

    Vue項(xiàng)目中引用本地字體的完整指南

    在前端開發(fā)中,我們經(jīng)常會遇到需要使用自定義字體的場景,比如品牌字體、設(shè)計(jì)稿還原等,在 Vue 項(xiàng)目中引入本地字體其實(shí)非常簡單,本文將一步步帶你完整實(shí)現(xiàn),需要的朋友可以參考下
    2026-03-03
  • v-if 導(dǎo)致 elementui 表單校驗(yàn)失效問題解決方案

    v-if 導(dǎo)致 elementui 表單校驗(yàn)失效問題解決方案

    在使用 elementui 表單的過程中,某些表單項(xiàng)需要通過 v-if 來判斷是否展示,但是這些表單項(xiàng)出現(xiàn)了檢驗(yàn)失效的問題,今天小編給大家介紹v-if 導(dǎo)致 elementui 表單校驗(yàn)失效問題解決方案,感興趣的朋友一起看看吧
    2024-01-01
  • nuxt.js框架使用小結(jié)

    nuxt.js框架使用小結(jié)

    本文主要介紹了nuxt.js框架使用小結(jié),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-08-08

最新評論

略阳县| 成安县| 海南省| 潮安县| 钟祥市| 自贡市| 资源县| 新和县| 肃宁县| 齐河县| 合阳县| 大方县| 灵山县| 镇平县| 常德市| 瑞丽市| 民和| 特克斯县| 定襄县| 镇巴县| 阳西县| 永仁县| 应用必备| 门源| 凤庆县| 弥渡县| 屯昌县| 万全县| 绵竹市| 阿瓦提县| 新津县| 方山县| 江油市| 镶黄旗| 宜都市| 德惠市| 洛阳市| 麻江县| 环江| 芜湖市| 双牌县|