国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

Vue組件通信——父子組件通信的四種方法

這篇具有很好參考價值的文章主要介紹了Vue組件通信——父子組件通信的四種方法。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

引入組件

  1. 全局引入

    在main.js文件中引入并注冊

    import ChildrenDemo from '@/views/components/ChildrenDemo'
    Vue.component('ChildrenDemo',ChildrenDemo)// 第一個參數(shù) 全局組件的名字(字符串類型),第二個參數(shù):引入的組件名(一般都與組件名保持一致)
    

    之后就可以全局使用組件了

  2. 局部引入

    在父組件中引入

    import ChildrenDemo from '@/views/components/ChildrenDemo'
    export default {
      components: {
        ChildrenDemo
      },
    }
    

    之后就可以在父組件中使用組件了

    <ChildrenDemo></ChildrenDemo>
    <!-- 或 -->
    <children-demo></children-demo>
    

一、props屬性綁定(父組件向子組件傳遞數(shù)據(jù))

在子組件 prop 中可以注冊一些自定義組件屬性,父組件調(diào)用子組件時可以向 prop 中的自定義屬性傳值。

子組件代碼:

<template>
  <div class="ChildrenDemo">
    <h1>{{title}}</h1>
  </div>
</template>

<script>
export default {
  name: 'ChildrenDemo',
  props:['title'],
  components: {
  },
  data () {
    return {
    }
  }
}
</script>

父組件代碼

<template>
  <div class="parent">
    <ChildrenDemo title="向子組件傳遞的title值"></ChildrenDemo>
  </div>
</template>

prop 也可以通過 v-bind 動態(tài)賦值

<ChildrenDemo :title="xxx"></ChildrenDemo>

如果要將一個對象的所有 property 都作為 prop 傳入,你可以使用不帶參數(shù)的 v-bind

例如,對于一個給定的對象 post

post: {
  id: 1,
  title: 'My Journey with Vue'
}

傳給子組件

<blog-post v-bind="post"></blog-post>

等價于:

<blog-post
  v-bind:id="post.id"
  v-bind:title="post.title"
></blog-post>

props的更多寫法

  1. 字符串?dāng)?shù)組形式

    props: ['title', 'likes', 'isPublished', 'commentIds', 'author']
    
  2. 指定prop值類型

    props: {
      title: String,
      likes: Number,
      isPublished: Boolean,
      commentIds: Array,
      author: Object,
      callback: Function,
      contactsPromise: Promise // or any other constructor
    }
    
  3. 指定 prop 的驗證要求

    當(dāng) prop 驗證失敗的時候,(開發(fā)環(huán)境構(gòu)建版本的) Vue 將會產(chǎn)生一個控制臺的警告。

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

    注意: prop 會在一個組件實例創(chuàng)建之前進(jìn)行驗證,所以實例的 property (如 data、computed 等) 在 defaultvalidator 函數(shù)中是不可用的。

prop雙向綁定

一般情況下,子組件不能直接修改從父組件接收的屬性值,否則會報錯,如果子組件需要接收值后處理再使用,可以將接收的值賦值給子組件本身的屬性,如data中的屬性或計算屬性。

如果希望子組件prop父組件中的值改變時,將變化同步到父組件中,可使用事件監(jiān)聽或**.sync修飾符**

.sync修飾符

.sync修飾符是一個語法糖,本質(zhì)上等同于事件監(jiān)聽的方法

參考:vue的.sync修飾符用法及原理詳解_weixin_58206976的博客-CSDN博客_vuesync修飾符

父組件

<h1>父組件title值:{{ title }}</h1>
<ChildrenDemo :title.sync="title"></ChildrenDemo>

子組件

<template>
  <div class="ChildrenDemo">
    <h1>子組件</h1>
    <input type="text" v-model="childTitle" />
  </div>
</template>

<script>
export default {
  props: ["title"],
  data() {
    return {};
  },
  computed: {
    childTitle: {
      get() {
        return this.title;
      },
      set(val) {
        this.$emit("update:title", val);//更新父組件中的title
      },
    },
  }
};
</script>

效果:當(dāng)子組件中input內(nèi)容改變時,父組件中的title會同步改變

Vue組件通信——父子組件通信的四種方法

二、監(jiān)聽子組件事件(子組件向父組件傳遞數(shù)據(jù),子組件觸發(fā)父組件方法)

通過 vue 實例方法 vm.$emit子組件可以自定義一個事件提交給父組件,觸發(fā)父組件的方法,父組件通過監(jiān)聽子組件的自定義事件可以接收子組件傳遞的數(shù)據(jù)。

子組件

<template>
  <div class="ChildrenDemo">
    <h1>子組件</h1>
    <button @click="changeParentTitle">點擊更改父組件title</button>
  </div>
</template>

<script>
export default {
  components: {},
  data() {
    return {};
  },
  methods: {
    changeParentTitle() {
      this.$emit("childEvent", "子組件傳給父組件的title")//第一個參數(shù)是提交的事件名,后面的參數(shù)可以是多個需要傳遞給父組件的參數(shù)
    }
  }
};
</script>

父組件

<template>
  <div class="home">
    <h1>父組件title值:{{ title }}</h1>
    <ChildrenDemo :title="title" @childEvent="changeTitle"></ChildrenDemo>
  </div>
</template>

<script>
import ChildrenDemo from "@/views/components/ChildrenDemo";
export default {
  components: {
    ChildrenDemo,
  },
  data() {
    return {
      title: "My Journey with Vue"
    };
  },
  methods: {
    changeTitle: function (str) {
      this.title = str
    },
  },
};
</script>

上例中的操作和傳遞的值都比較簡單,也可以在事件處理函數(shù)中直接使用表達(dá)式,父組件通過 $event 訪問被子組件拋出的值

子組件:文章來源地址http://www.zghlxwxcb.cn/news/detail-415302.html

<button @click="$emit('childEvent', '子組件傳給父組件的title')">點擊更改父組件title</button>

父組件:

<ChildrenDemo :title="title" @childEvent="title = $event"></ChildrenDemo>

三、使用 $refs (父組件訪問子組件的數(shù)據(jù)和方法)

父組件使用 $refs 可以訪問子組件的數(shù)據(jù)和方法

使用時需在調(diào)用子組件時給子組件定義一個 ref 名

<ChildrenDemo ref="childrenDemo"></ChildrenDemo>
<button @click="getChildData">點擊獲取子組件數(shù)據(jù)</button>
getChildData: function () {
  let child = this.$refs.childrenDemo//獲取子組件實例
  console.log(child.value);//訪問子組件屬性
  child.childFn() //調(diào)用子組件的childFn()方法
},

注意:

  1. $refs 只會在組件渲染完成之后生效,并且它們不是響應(yīng)式的。這僅作為一個用于直接操作子組件的“逃生艙”——你應(yīng)該避免在模板或計算屬性中訪問 $refs。
  2. 由于ref 需要在dom渲染完成后才會有,在使用的時候確保dom已經(jīng)渲染完成。比如在生命周期 mounted(){} 鉤子中調(diào)用,或者在 this.$nextTick(()=>{}) 中調(diào)用。

四、使用$parent(子組件訪問父組件的數(shù)據(jù)和方法)

$parent property 可以用來從一個子組件訪問父組件的實例

子組件:

<button @click="getParentData">點擊獲取父組件數(shù)據(jù)</button>
getParentData(){
  let parent = this.$parent //獲取父組件實例
  console.log(parent.parentValue) //訪問父組件屬性
  parent.parentFn() //調(diào)用父組件的方法parentFn()
}

到了這里,關(guān)于Vue組件通信——父子組件通信的四種方法的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點擊違法舉報進(jìn)行投訴反饋,一經(jīng)查實,立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費用

相關(guān)文章

  • VUE3+TS(父子、兄弟組件通信)

    目錄 父傳子值、方法(子調(diào)用父值、方法) 子傳父值(父調(diào)用子值) 父讀子(子傳父)(父調(diào)用子值、方法) 兄弟(任意組件)通信 引入Mitt來完成任意組件通信 1、統(tǒng)一規(guī)范寫法,通過在子組件標(biāo)簽上綁定屬性和值,來傳遞到子組件,子組件再通過defineProps來接收,先給其

    2023年04月08日
    瀏覽(21)
  • 【Vue】實現(xiàn)當(dāng)前頁面刷新的四種方法

    【Vue】實現(xiàn)當(dāng)前頁面刷新的四種方法

    這兩周在寫一個后臺管理,每次調(diào)用接口實現(xiàn)增刪改查的過程中,都需要刷新當(dāng)前頁面或者刷新數(shù)據(jù)。如果手動點擊瀏覽器的小圈圈不僅麻煩、用戶體驗感極差,而且不會真的有人讓用戶手動刷新叭。。。這個問題可以稱得上是前端的bug了。那么,順著這個問題,一通搜尋下

    2023年04月26日
    瀏覽(46)
  • vue3 常用的組件互相通信(父子、兄弟、爺孫、任意組件)

    目錄 前言:目前組件通信方法有好多種,我這挑選一部分來講 1、父傳子 2、子傳父 3、兄弟之間通信 3.1、父組件充當(dāng)中間件 3.2、全局事件總線—EventBus 4、爺孫之間通信 5、任意組件、全局 方案 父傳子 子傳父 props / emits props emits v-model / emits v-model emits ref / emits ref emits provi

    2024年02月15日
    瀏覽(51)
  • Vue3父子組件間傳參通信

    Vue3父子組件間傳參通信

    本文主要是記錄Vue3在setup語法糖下的父子組件間傳參的四種方式 Vue3+TypeScript 父組件傳值給子組件主要是由父組件為子組件通過v-bind綁定數(shù)值,而后傳給子組件;子組件則通過defineProps接收使用。 如下為父組件 Father.vue 如下為子組件Son.vue 父組件 Father.vue 中在調(diào)用 Son.vue 這個子

    2024年01月19日
    瀏覽(27)
  • Web前端 ---- 【Vue】(組件)父子組件之間的通信一文帶你了解

    Web前端 ---- 【Vue】(組件)父子組件之間的通信一文帶你了解

    目錄 前言 父組件傳子組件 ---- props 給要傳遞數(shù)據(jù)的子組件綁定要傳過去的屬性及屬性值 在子組件中使用props配置項接收 props配置項 子組件傳父組件 ---- 組件的自定義事件 子組件向父組件傳遞數(shù)據(jù) 通過代碼來綁定自定義事件 本文將介紹在Vue中父子組件如何進(jìn)行通信 這里先介

    2024年02月05日
    瀏覽(632)
  • 項目中使用iframe引入html 解決路由錯亂問題以及父子組件傳值調(diào)用方法

    項目中使用iframe引入html 解決路由錯亂問題以及父子組件傳值調(diào)用方法

    父組件 子組件: 方法一、通過子組件iframe1向父組件傳值,再通過父組件向子組件iframe2傳值可達(dá)到目的; 注意:模擬時 需要開啟服務(wù)器,否則會出現(xiàn)跨域問題! 看圖你應(yīng)該就明白了 在項目中使用iframe引入html,引入的html中有路由跳轉(zhuǎn),當(dāng)點擊html頁面中的路由跳轉(zhuǎn)時,瀏覽器

    2024年02月01日
    瀏覽(25)
  • vue3探索——組件通信之v-model父子組件數(shù)據(jù)同步

    再很多場景中,我們可能想在子組件中修改父組件的數(shù)據(jù),但事實上,vue不推薦我們這么做,因為數(shù)據(jù)的修改不容易溯源。 在vue2中,我們使用 .sync 修飾符+自定義事件 \\\'update:xxx\\\' ,來使父子組件數(shù)據(jù)同步。 這里不作過多說明,有需要請自行了解。 vue3的寫法與vue2基本一致。最

    2024年02月11日
    瀏覽(22)
  • Vue-Element-Admin項目學(xué)習(xí)筆記(9)表單組件封裝,父子組件雙向通信

    Vue-Element-Admin項目學(xué)習(xí)筆記(9)表單組件封裝,父子組件雙向通信

    前情回顧: vue-element-admin項目學(xué)習(xí)筆記(1)安裝、配置、啟動項目 vue-element-admin項目學(xué)習(xí)筆記(2)main.js 文件分析 vue-element-admin項目學(xué)習(xí)筆記(3)路由分析一:靜態(tài)路由 vue-element-admin項目學(xué)習(xí)筆記(4)路由分析二:動態(tài)路由及permission.js vue-element-admin項目學(xué)習(xí)筆記(5)路由分析

    2024年02月11日
    瀏覽(30)
  • vue3探索——使用ref與$parent實現(xiàn)父子組件間通信

    在vue3中,可以使用vue3的API defineExpose() 函數(shù)結(jié)合 ref 或者 $parent ,實現(xiàn)父子組件數(shù)據(jù)的傳遞。 子組件:通過 defineExpose() 函數(shù),向外暴露響應(yīng)式數(shù)據(jù)或者方法 父組件:通過 ref 獲取子組件實例,進(jìn)而獲取子組件暴露的響應(yīng)式數(shù)據(jù)或方法 ?? 你沒看錯!這里的 ref 就是經(jīng)常用來定

    2024年02月10日
    瀏覽(25)
  • vue3中監(jiān)聽,組件通信如父子傳值、Vuex、Event Bus的使用

    目錄 一、監(jiān)聽 二、父子傳值: 1、父傳子: 2、子傳父 三、全局狀態(tài)管理(Vuex): 四、事件總線(Event Bus): 我們有一個父組件ParentComponent和一個子組件ChildComponent。在父組件中,我們使用:childProp=\\\"parentData\\\"將數(shù)據(jù)傳遞給子組件。在子組件中,我們使用defineProps來接收父組件

    2024年02月13日
    瀏覽(32)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包