【发布时间】:2021-08-15 22:53:27
【问题描述】:
我有两个组件,一个是管理数据,一个是vue模板。我在这里简化了它们。问题是当位置通过 fetch 进入时,vue 模板中的locations 保持为空。我检查了isRef() 并返回true,但它只是一个空数组。查看 Vue 开发工具面板,locations 确实在数组中有元素。
Locations.js
import {
ref,
isRef,
onMounted,
} from 'vue';
export default function useLocations () {
const locations = ref([]);
const loadImageData = (locId) => {
isRef(locations); // === true
// @FIXME locations.value is always empty here.
locations.value.forEach( (loc,key) => {
console.debug( loc.id, locId )
})
};
const getLocations = async () => {
const locs = await apiFetch({ path: '/wp/v2/tour-location'});
locations.value = locs;
};
onMounted( getLocations );
return {
locations,
getLocations,
loadImageData,
};
}
App.vue
<template>
<div class="location">
<h1>{{ location.name }}</h1>
<img :src="location.main_image" />
</div>
</template>
<script>
import useLocations from '@/composables/Locations';
export default {
name: 'Location',
props: [,'location'],
data () {return {}},
watch: {
location: {
// deep: true,
immediate: true,
handler: function(){
const { loadImageData } = useLocations();
loadImageData( location.id );
}
}
},
}
</script>
当从Location.vue 组件调用loadImageData() 时,locations 始终是一个空数组。为什么它在 that 功能中没有像在应用程序的其他地方那样更新?
【问题讨论】:
标签: vuejs3 vue-composition-api