我有一个父组件,在 data() 中我想从子组件传递一个计算属性。
// ParentComponent.vue
<template>
<div>
<ChildComponent :parent="parent"/>
</div>
</template>
<script>
import ChildComponent from '@/components/ChildComponent';
export default {
name: 'ParentComponent',
components: {
ChildComponent,
},
data() {
return {
parent: {
parentData: '',
}
};
},
</script>
在子组件中,计算属性是字符串的串联,子组件的数据属性的字段。
<template>
<div>
<div class="control">
<input
v-model="salarySumm"
class="input"
type="text"
placeholder="Add the estimated salary (1000 - 2000)"
>
<div class="select">
<select v-model="salaryCode">
<option disabled value>Select currency</option>
<option
v-for="(el, index) in currency"
:key="index"
:value="el.code"
>{{ el.title }}</option>
</select>
</div>
</div>
</template>
<script>
export default {
name: 'ChildComponent',
props: ['parent'],
data() {
return {
salarySumm: '',
salaryCode: '',
}
},
created() {
// Тут я получаю массив объектов в виде
// [{ title: 'string', code: 'string' }]
this.$store.dispatch('getCurrencies')
},
computed: {
currency() {
let list = this.$store.getters.currencies.data
const currencyList = []
if (list !== undefined) {
for (const el of list) {
if (el.code == '(none)' || el.code == null) el.code = ''
if (el.name !== null) {
currencyList.push({ title: `${el.name} | ${el.code}`, code: el.code })
}
}
}
return currencyList
},
salary() {
// Здесь я получаю строку в том виде, в котором хочу передать ее в родительский компонент.
return this.salarySumm + ' ' + this.salaryCode
},
</script>
如何将计算的属性薪水传递给父组件,更具体地说是 parent.parentData?
您将属性传递给子组件,并从子组件到父组件调用
$emit属性更改事件:如果您需要将计算属性传递给
computed父组件,那么您必须使用观察者watch,它被赋予一个处理函数,每当计算(并且不仅)属性发生变化时都会调用该处理函数。下面是一个例子。this.$store.dispatch看起来您正在使用代码vuex。在这种情况下,您可以将所有逻辑传输到存储库。这将使您免于不断检查每个组件中接收到的数据。在这些答案984023、975447中查看更多示例。
稍微处理了这个话题,我想给出我的答案。
第一个选项: 但是这个选项有一个缺点,如果我们不在组件中显示计算属性的结果,那么我们不会“拉”它,它不会被计算。那些。仅当您想在同一方法中使用计算属性时,此方法才有效
Я покажу как можно прокинуть данные в родителя с помощью $emit но без якобы использования события. Все дело в том, что $emit и есть наше собственное событие. Вот полезная статья про Пользовательские события.
В дочернем компоненте, я использую computed потому что он всегда пересчитывает данные которые меняются и сам факт пересчета и есть в неком смысле событие. Computed кроме возврата значения может создает некие побочные эффекты, запись данных куда то в данном случает в событие input (см. computed ниже). Останется только прописать пропс в дочернем компоненте и именем value.
и далее в родителе получить эти данные через v-model
Второй вариант. Я использую внутренние события для того что бы вызвать метод который создать пользовательское событие $emit