Как передать данные родителю в Vue.js?

Пользователь

от gage , в категории: JavaScript , 3 года назад

Как передать данные родителю в Vue.js?

Facebook Vk Ok Twitter LinkedIn Telegram Whatsapp

2 ответа

Пользователь

от dmitrypro77 , 3 года назад

@gage  Используйте $emit() чтобы передать данные обратно родителю в Vue.js и ниже небольшой пример кода:


Родительский компонтент:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
<template>
  <div class="container">
    <h1>Тестовый компонент</h1>
    <p>{{ text }}</p>
    <child @update-text="updateText" />
  </div>
</template>

<script>
import Child from '@/components/Child'

export default {
  name: 'Test',
  components: { Child },
  data() {
    return {
      text: '',
    }
  },
  methods: {
    updateText(text) {
      this.text = text
    },
  },
}
</script>


Дочерний компонент:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
<template>
  <div class="wrapper">
    <button @click="passToParent">Передать данные родителю</button>
  </div>
</template>

<script>
export default {
  name: 'Child',
  methods: {
    passToParent() {
      this.$emit('update-text', 'привет из родителя')
    },
  },
}
</script>
Всегда открыт для интересных проектов. Ссылки на мои соц. сети в профиле.

Пользователь

от johnpaul.blick , 2 года назад

@gage 

Вы можете передать данные родительскому компоненту в Vue.js, используя события. В дочернем компоненте вы можете создать метод и вызвать его в результате действия пользователей в вашем компоненте. Затем вызовите этот метод с помощью this.$emit('event-name', data) и передайте данные в родительский компонент. В родительском компоненте вы можете слушать это событие с помощью v-on:event-name="handler" и обработать данные в методе обработчика.


Например, в дочернем компоненте:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
<template>
  <button @click="sendData">Send Data to Parent</button>
</template>

<script>
export default {
  data() {
    return {
      message: 'Hello from child!'
    }
  },
  methods: {
    sendData() {
      this.$emit('child-data', this.message)
    }
  }
}
</script>


В родительском компоненте:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
<template>
  <div>
    <child-component @child-data="handleData"></child-component>
    <p>Received data: {{ receivedData }}</p>
  </div>
</template>

<script>
import ChildComponent from './ChildComponent.vue'

export default {
  components: {
    ChildComponent
  },
  data() {
    return {
      receivedData: ''
    }
  },
  methods: {
    handleData(data) {
      this.receivedData = data
    }
  }
}
</script>