视频提取之人声分离后,人声与伴奏音量差太多?分离后电平再平衡的三个参照
2026/10/14 3:20:17
replace方法// 在组件中exportdefault{methods:{updateQueryParams(){// 创建新的查询参数对象constnewQuery={...this.$route.query,// 保留现有参数param1:'newValue1',// 修改或添加参数param2:'newValue2'};// 替换当前路由(不添加历史记录)this.$router.replace({query:newQuery}).then(()=>{// 可选:手动触发重新加载this.reloadComponent();});},reloadComponent(){// 方法1:强制重新渲染组件this.$forceUpdate();// 方法2:通过 key 的变化强制重新创建组件// 在模板中: <router-view :key="$route.fullPath">// 方法3:重新获取数据this.fetchData();}}}push方法(添加历史记录)// 修改参数并添加历史记录this.$router.push({path:this.$route.path,query:{...this.$route.query,param1:'newValue',param2:null// 移除某个参数}});import{useRoute,useRouter}from'vue-router';exportdefault{setup(){constroute=useRoute();constrouter=useRouter();constupdateParams=()=>{router.replace({query:{...route.query,page:2,sort:'desc'}});};return{updateParams};}}<template> <div> <!-- 内容 --> </div> </template> <script> export default { watch: { '$route.query': { handler(newQuery) { // 当查询参数变化时重新加载数据 this.loadData(newQuery); }, immediate: true // 立即执行一次 } }, methods: { loadData(query) { // 根据新参数重新加载数据 console.log('加载数据,参数:', query); }, // 更新特定参数 updateParam(key, value) { const query = { ...this.$route.query }; if (value === null || value === undefined) { delete query[key]; // 移除参数 } else { query[key] = value; // 更新参数 } this.$router.replace({ query }); } } } </script>updateURLParams(){consturl=newURL(window.location);constparams=newURLSearchParams(url.search);// 修改特定参数params.set('param1','newValue');params.delete('param2');// 删除参数// 构建新URLconstnewUrl=`${url.pathname}?${params.toString()}${url.hash}`;// 使用 router 跳转this.$router.replace(newUrl);// 或者直接修改地址栏(会刷新页面)// window.history.replaceState({}, '', newUrl);// location.reload(); // 强制刷新}// utils/urlHelper.jsexportconstupdateQueryParams=(router,updates)=>{constcurrentQuery=router.currentRoute.value?.query||router.currentRoute.query;// 合并更新constnewQuery={...currentQuery,...updates};// 清理 undefined 或 null 的值Object.keys(newQuery).forEach(key=>{if(newQuery[key]===undefined||newQuery[key]===null){deletenewQuery[key];}});returnrouter.replace({query:newQuery});};// 在组件中使用import{updateQueryParams}from'@/utils/urlHelper';// Vue 2updateQueryParams(this.$router,{page:2,sort:'name'});// Vue 3constrouter=useRouter();updateQueryParams(router,{page:2,sort:'name'});<router-link>组件<template> <router-link :to="{ query: { ...$route.query, param1: 'newValue' } }" replace <!-- 使用 replace 而不是 push --> > 修改参数 </router-link> </template>replace而不是push:避免产生过多历史记录$route.query变化:自动响应参数变化// 防抖示例importdebouncefrom'lodash/debounce';exportdefault{methods:{updateParams:debounce(function(params){this.$router.replace({query:{...this.$route.query,...params}});},300)}}选择哪种方法取决于你的具体需求:
watch: '$route.query'key属性或forceUpdatelocation.reload()(但会丢失 Vue 状态)