vue怎麼修改父元件值

2022-12-30 18:00:49

vue修改父元件值的方法:1、通過props的方式,將父元件的方法傳遞到子元件,在子元件中通過props接收;2、通過「this.$emit」觸發父元件方法實現修改;3、通過「this.$parent」直接觸發父元件修改即可。

本教學操作環境:Windows10系統、Vue 3版、Dell G3電腦。

vue怎麼修改父元件值?

vue中子元件更改父元件資料

因為vue是單項資料流,所以沒辦法直接在子元件中去修改父元件裡面的資料,vue提倡單項資料流,為了防止專案過於複雜時,導致資料流難以理解。參照Vue的官網的話:父系 prop 的更新會向下流動到子元件中,但是反過來則不行。這樣會防止從子元件意外改變父及元件的狀態,從而導致你的應用的資料流向難以理解。所以在專案開發過程中,我們總是通過子元件觸發父元件中方法的方式,通過父元件的方法,更改父元件的資料。

一、props傳遞方法

通過props的方式,將父元件的方法傳遞到子元件,在子元件中通過props接收,可以在當前元件的範例上直接觸發父元件的方法,從而實現子元件更改父元件的值。同事也可以將子元件的資料,以引數的形式傳送給父元件。

由於程式碼不多,就暫且全部展示,僅需關心相關事件就可以

//父元件,設定更改自己資料的方法,將該方法傳遞給子元件
<template>
  <div>
    <h1>我是父元件</h1>
    <HelloWorld :msg="msg" :changeMsg="changeMsg"/>
  </div>
</template>
 
<script>
import HelloWorld from '@/components/HelloWorld.vue'
 
export default {
  name: 'Home',
  components: {
    HelloWorld
  },
  methods:{
    changeMsg(text,num){
      console.log(text,num);
      this.msg=this.msg+1
    }
  },
  data(){
    return{
      msg:1
    }
  }
}
</script>
 
 
 
//子元件,接收父元件傳遞過來的方法,通過props接收到的方法和資料,在元件範例上可以直接獲取和觸發
<template>
  <div>
    <h1>我是子元件<button @click="changeFatherData">點我更改父元件資料</button></h1>
    <h1>父元件資料:{{msg}}</h1>
    
  </div>
</template>
 
<script>
export default {
  name: 'HelloWorld',
  props: {
    msg: Number,
    changeMsg:Function
  },
  data(){
    return{
      text:"我是子元件資料,我要傳送給父元件",
      num:12
    }
  },
  methods:{
    changeFatherData(){
      this.changeMsg(this.text,this.num)
    }
  },
}
</script>
 
<style scoped>
 
</style>
登入後複製

二、通過this.$emit觸發父元件方法實現

在父元件中自定義一個方法,然後傳遞給子元件,子元件通過this.$emit直接觸發父元件中的資料,實現父子元件通訊。子元件觸發事件,父元件監聽事件。

//父元件,將定義的方法傳遞給子元素
<template>
  <div>
    <h1>我是父元件</h1>
    <HelloWorld :msg="msg" @changeMsg="changeMsg"/>
  </div>
</template>
 
<script>
import HelloWorld from '@/components/HelloWorld.vue'
 
export default {
  name: 'Home',
  components: {
    HelloWorld
  },
  methods:{
    changeMsg(text,num){
      console.log(text,num);
      this.msg=this.msg+1
    }
  },
  data(){
    return{
      msg:1
    }
  }
}
</script>
 
 
//子元件,通過this.$emit觸發父元件方法,更改父元件資料,同時可以進行資料傳值
<template>
  <div>
    <h1>我是子元件<button @click="changeFatherData">點我更改父元件資料</button></h1>
    <h1>父元件資料:{{msg}}</h1>
    
  </div>
</template>
 
<script>
export default {
  name: 'HelloWorld',
  props: {
    msg: Number,
  },
  data(){
    return{
      text:"我是子元件資料,我要傳送給父元件",
      num:12
    }
  },
  methods:{
    changeFatherData(){
      this.$emit('changeMsg',this.text,this.num)
    }
  },
}
</script>
 
<style scoped>
 
</style>
登入後複製

三、子元件通過this.$parent直接觸發父元件(程式碼簡潔,推薦使用)

子元件直接觸發父元件事件,無需進行方法的傳遞、接收,以及事件的定義。

//父元件,宣告需要的方法
<template>
  <div>
    <h1>我是父元件</h1>
    <HelloWorld :msg="msg"/>
  </div>
</template>
 
<script>
import HelloWorld from '@/components/HelloWorld.vue'
 
export default {
  name: 'Home',
  components: {
    HelloWorld
  },
  methods:{
    changeMsg(text,num){
      console.log(text,num);
      this.msg=this.msg+1
    }
  },
  data(){
    return{
      msg:1
    }
  }
}
</script>
 
 
//子元件,this.$parent直接觸發父元件方法
<template>
  <div>
    <h1>我是子元件<button @click="changeFatherData">點我更改父元件資料</button></h1>
    <h1>父元件資料:{{msg}}</h1>
    
  </div>
</template>
 
<script>
export default {
  name: 'HelloWorld',
  props: {
    msg: Number,
  },
  data(){
    return{
      text:"我是子元件資料,我要傳送給父元件",
      num:12
    }
  },
  methods:{
    changeFatherData(){
      this.$parent.changeMsg(this.text,this.num)
    }
  },
}
</script>
 
<style scoped>
 
</style>
登入後複製

推薦學習:《》

以上就是vue怎麼修改父元件值的詳細內容,更多請關注TW511.COM其它相關文章!