在 Vue JS 中使用 v-for 为组件设置 props
Setting props for components using v-for in Vue JS
我有一个 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();
}
}
}
组件接收 属性 用户数据,然后将其设置为组件的卡数据 属性。
我有另一个 Vue.js 组件用作页面。在此页面上,我正在 AJAX 调用 api 以获取号码和用户列表。
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>
但是这会导致开发工具出现错误,例如 属性 username is undefined, error rendering component, cannot read 属性 split of undefined.
我已经尝试过其他方法来执行此操作,但它们似乎都会导致相同的错误。关于如何将组件的 props 正确绑定到 vue-for 循环的当前迭代对象有什么想法吗?
尝试
export default {
props: ['userData'],
data() {
return {
cardData: this.userData
}
}
}
经过一番修改,回答了我自己的问题。
无需调用函数来设置监视函数中的数据,我只需要做的就是让它正常工作。
mounted() {
this.cardData = this.userData;
}
很奇怪,我之前使用 watch 方法来监听组件 props 的变化并且它工作完美,但我想这里发生了一些不同的事情。任何关于不同之处或为什么这样工作的见解都会很酷!
我有一个 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();
}
}
}
组件接收 属性 用户数据,然后将其设置为组件的卡数据 属性。
我有另一个 Vue.js 组件用作页面。在此页面上,我正在 AJAX 调用 api 以获取号码和用户列表。
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>
但是这会导致开发工具出现错误,例如 属性 username is undefined, error rendering component, cannot read 属性 split of undefined.
我已经尝试过其他方法来执行此操作,但它们似乎都会导致相同的错误。关于如何将组件的 props 正确绑定到 vue-for 循环的当前迭代对象有什么想法吗?
尝试
export default {
props: ['userData'],
data() {
return {
cardData: this.userData
}
}
}
经过一番修改,回答了我自己的问题。
无需调用函数来设置监视函数中的数据,我只需要做的就是让它正常工作。
mounted() {
this.cardData = this.userData;
}
很奇怪,我之前使用 watch 方法来监听组件 props 的变化并且它工作完美,但我想这里发生了一些不同的事情。任何关于不同之处或为什么这样工作的见解都会很酷!