我有一个PhoneCard.vue组件,我试图将道具传递给。
<template>
<div class='phone-number-card'>
<div class='number-card-header'>
<h4 class="number-card-header-text">{{ cardData.phone_number }}</h4>
<span class="number-card-subheader">
{{ cardData.username }}
</span>
</div>
</div>
</template>
<script>
export default {
props: ['userData'],
components: {
},
data() {
return {
cardData: {}
}
},
methods: {
setCardData() {
this.cardData = this.userData;
console.log(this.cardData);
}
},
watch: {
userData() {
this.setCardData();
}
}
}
组件接收userData的属性,然后将其设置为组件的cardData属性。
我有另一个Vue.js组件,我将其用作页面。在这个页面上,我正在向api发出AJAX调用,以获取数字和用户列表。
import PhoneCard from './../../global/PhoneCard.vue';
export default {
components: {
'phone-card': PhoneCard
},
data() {
return {
phoneNumbers: [],
}
},
methods: {
fetchActiveNumbers() {
console.log('fetch active num');
axios.get('/api').then(res => {
this.phoneNumbers = res.data;
}).catch(err => {
console.log(err.response.data);
})
}
},
mounted() {
this.fetchActiveNumbers();
}
}
然后,我将ajax调用的响应数据设置为等于phoneNumbers属性。
在此问题出现之后,我尝试遍历phoneNumber数组中的每个数字,并将正在迭代的当前数字的值绑定到Card的组件,如下所示:
<phone-card v-for="number in phoneNumbers" :user-data="number"></phone-card>
然而这导致dev工具中的错误,例如属性username未定义,错误呈现组件,无法读取未定义的属性拆分。
我已经尝试过其他方法来做到这一点,但它们似乎都会导致同样的错误。关于如何将组件的道具正确绑定到vue-for循环的当前迭代对象的任何想法?
答案 0 :(得分:5)
尝试
export default {
props: ['userData'],
data() {
return {
cardData: this.userData
}
}
}
答案 1 :(得分:3)
经过一些修补后回答了我自己的问题。
而不是调用函数来设置watch函数中的数据,我所要做的就是让它工作。
mounted() {
this.cardData = this.userData;
}
很奇怪,我之前使用了watch方法来监听组件道具的变化,它的工作完美无缺,但我想这里有不同的东西。任何有关不同之处或为何如此工作的见解都会很酷!