有时会出现vue3项目路由跳转,地址改变了但是页面并没有变但是刷新又好了怎么解决,逻辑:从index.vue详情跳转到info.vue,info里有其他组件引入如表单,echarts,卡片列表
已经做了监听所有路由参数变化和 ,但是页面没有变化时监听的方法没有走,这行没有打印console.log('New:', newVal, 'Old:', oldVal);具体代码如下
index
<el-button size="small" link @click="handleInfo(scope.row, 'basic')">
<template #icon>
<Message />
</template>
详情
</el-button>
// 跳转详情页
function handleInfo(row: any, name: string) {
// 确保所有参数都是字符串类型
const query = {
deviceCode: String(row.deviceCode),
name: String(name),
deviceType: String(row.deviceType),
communicationModeItemName: String(row.communicationModeItemName),
deviceTypeId: String(row.deviceTypeId),
Id: String(row.id),
};
// 使用 replace 而不是 push,避免历史记录堆积
router.replace({
path: "/info",
query
});
}
info
// 监听所有路由参数变化
watch(
() => ({
deviceCode: route.query.deviceCode,
deviceTypeId: route.query.deviceTypeId,
deviceType: route.query.deviceType,
communicationModeItemName: route.query.communicationModeItemName,
name: route.query.name
}),
// () => route.query,
(newVal, oldVal) => {
console.log('New:', newVal, 'Old:', oldVal);
// 更新所有相关状态。重置数据
resetFormAndReload(newVal);
console.log('deviceCode updated:', deviceCode.value); // 检查是否更新
if (newVal !== oldVal) {
// 如果不同,使用$router.go(0)强制页面刷新
// route.go(0);
}
// 重新加载数据
nextTick(() => {
console.log('Starting handleQuery...');
handleQuery();
});
},
// { immediate: true, deep: true }
{ immediate: true } // 无需 deep: true
);
const resetFormAndReload = (query) => {
deviceCode.value = query.deviceCode as string || '';
deviceTypeId.value = query.deviceTypeId as string || '';
deviceType.value = query.deviceType as string || '';
communicationModeItemName.value = query.communicationModeItemName as string || '';
activeName.value = query.name as string || '';
form.value = {} as DeviceForm;
pageData.value = [];
// nextTick(handleQuery);
};
// 返回列表
function goBack() {
deviceCode.value = '';
form.value = {} as DeviceForm;
queryParams.value = {} as subDevicePage;
router.push('/device/device');
}
HTML--------
el-tabs v-if="!isGatewayDevice" v-model="activeName" tab-position="top" style="padding: 10px; min-height: 400px">
<el-tab-pane name="basic">
<template #label>
<span class="custom-tabs-label">
<span>基本信息</span>
</span>
</template>
<Basic :form="form" ref="basicFormRef" :key="$route.fullPath" />
</el-tab-pane>
<el-tab-pane name="runningStatus">
<template #label>
<span class="custom-tabs-label">
<span>运行状态</span>
</span>
</template>
<yun-xing-zhuang-tai :device-info="form.deviceInfo || []" :key="$route.fullPath" />
</el-tab-pane>
<el-tab-pane name="videoLive">
<template #label>
<span class="custom-tabs-label">
<span>设备数据</span>
</span>
</template>
<she-bei-shu-ju :device-info="form.deviceInfo || []" :create-time="form.createTime" :key="$route.fullPath" />
</el-tab-pane>