vue3里定义了ref接受接口数据,但是route接受ref数据时跳转path参数时报错

vue3里定义了ref接受接口数据,但是route接受ref数据时跳转path参数时报错

在这里插入图片描述
代码如下:

<script setup>
import { getDetail } from '@/apis/detail'
import { onMounted, ref } from 'vue'
import { useRoute } from 'vue-router'

const route = useRoute()
//数据
const goods = ref([])
const getGoods = async () =>{
    const res = await getDetail(route.params.id)
    console.log(res);
    goods.value = res.data.result 
}
onMounted(()=>{
    getGoods()
})
</script>

 <el-breadcrumb-item 
 :to="{ path: `/category/${goods.categories[1].id}` }"
 >{{goods.categories[1].name}}
</el-breadcrumb-item>
<el-breadcrumb-item 
:to="{ path: `/category/sub/${goods.categories[0].id}` }"
>{{goods.categories[0].name}}
</el-breadcrumb-item>

  错误原因:goods一开始{}  {}.categories -> undefined  -> undefined[1]
        1. 可选链的语法?. 
       2. v-if手动控制渲染时机 保证只有数据存在才渲染

解决方案1. 可选链的语法?.

 <el-breadcrumb-item :to="{ path: `/category/${goods.categories?.[1].id}` }">{{goods.categories?.[1].name}}
          </el-breadcrumb-item>
          <el-breadcrumb-item :to="{ path: `/category/sub/${goods.categories?.[0].id}` }">{{goods.categories?.[0].name}}
          </el-breadcrumb-item>

解决方法2.v-if
使用v-if前提,v-if放最外面的标签里这样,看起来加载进度舒服

<div v-if="goods.details">
<div>
	<el-breadcrumb-item 
	:to="{ path: `/category/${goods.categories[1].id}` }"
	>{{goods.categories[1].name}}
     </el-breadcrumb-item>
      <el-breadcrumb-item 
      :to="{ path: `/category/sub/${goods.categories[0].id}` }"
      >{{goods.categories[0].name}}
       </el-breadcrumb-item>
</div>
</div>

 
Vue 3 + Ant Design Vue + TypeScript项目中,如果需要在跳转到详情页之前调用接口获取数据,可以按照以下步骤进行操作: 1. 首先,在Vue组件中使用`axios`或其他HTTP请求库进行接口调用,并获取数据。 ```typescript import { defineComponent, ref, onMounted } from 'vue'; import axios from 'axios'; export default defineComponent({ setup() { const data = ref(null); onMounted(async () => { try { const response = await axios.get('/api/detail'); data.value = response.data; } catch (error) { console.error(error); } }); return { data, }; }, }); ``` 2. 在获取数据后,可以将数据传递给详情页组件。 ```html <router-link :to="`/detail/${data.id}`">跳转到详情页</router-link> ``` 3. 创建详情页组件,并在其中接收参数并展示数据。 ```typescript import { defineComponent, ref, onMounted } from 'vue'; import { useRoute } from 'vue-router'; import axios from 'axios'; export default defineComponent({ setup() { const route = useRoute(); const id = ref(''); const data = ref(null); onMounted(async () => { try { const response = await axios.get(`/api/detail/${id.value}`); data.value = response.data; } catch (error) { console.error(error); } }); return { id, data, }; }, }); ``` 4. 在路由配置中定义详情页的路由规则。 ```typescript const router = createRouter({ history: createWebHistory(), routes: [ // 定义路由规则 { path: '/detail/:id', component: DetailPage }, ], }); ``` 这样就可以在Vue 3 + Ant Design Vue + TypeScript项目中,调用接口获取数据跳转到详情页,并将数据传递给详情页组件进行展示。请根据实际情况进行适配和调整。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值