Vue.js 如何通过共享url来共享vue组件状态?
我的设置Vue.js 如何通过共享url来共享vue组件状态?,vue.js,vue-component,vue-router,Vue.js,Vue Component,Vue Router,我的设置 我有一个显示数据表的组件 数据可以通过在字段中输入内容进行过滤,字段中的值存储在组件道具中 我还准备了vue路由器,用于在该组件和其他组件之间进行路由 我的愿望 我想通过为某个团队成员提供url,与他/她共享筛选表的状态 当url被访问时,道具从url中获得分配的值,瞧,我得到了相同的列表 并非每次都需要这些参数。因此,如果我只按其中一个字段进行筛选,我只需要将该参数传入url 我的问题 我该怎么做 我没有看到哪些陷阱 到目前为止我尝试了什么… …正在玩这个。$router
这个。$router.push()
函数,通过watch()
改变道具;但我无法想象如何一方面避免重新加载页面,另一方面如何不调整服务器配置(因为我希望路由也能在没有任何参数的情况下工作)
我也不知道如何在路由器配置中定义动态URL。。。如果每次都要传递一组不同的参数,有没有一种方法,或者为每个可能的配置创建别名?而不是像
/path/:parameter\u 1/:parameter\u 2
那样注册路由,您应该实际注册/path
,然后使用this.$router.push('/path?parameter\u 1=xxx¶meter\u 2=yyy'))
这是从我的代码中摘录的-当页面/排序/rowsPerPage发生更改时,数据表
组件将发出分页
事件,在初始呈现时也是如此。由于我们只更改URL查询值(URL中?
之后的文本),Vue将重用该组件,因此我们在路由更新之前收听,
以对URL中的新参数作出反应,并获取适当的数据:
数据()
{
返回{
过滤器:
{
参数_1:this.$route.query.parameter_1 | |“”,
参数_2:this.$route.query.parameter_2 | |“”,
}
}
},
观察:
{
过滤器:
{
深:是的,
处理程序:“FilterationHasChanged”
}
},
路由更新前(到、从、下一个)
{
这个。获取数据(到);
next();
},
方法:
{
buildQuery(路由)
{
const query=route?route.query:this.$route.query;
设params='?';
if(query.parameter_1)params+='¶meter_1='+query.parameter_1;
if(query.parameter_2)params+='¶meter_2='+query.parameter_2;
返回参数;
},
获取数据(路由)
{
this.$ajax.get('/api_endpoint'+this.buildQuery(route))。然后(response=>
{
//使用API响应
});
},
过滤已更改(过滤器)
{
const obj=Object.assign({},this.$route.query);
if(过滤器参数_1)
{
obj.parameter_1=filters.parameter_1;
}
其他的
{
删除对象参数_1;
}
if(过滤器参数_2)
{
obj.parameter_2=filters.parameter_2;
}
其他的
{
删除obj.parameter_2;
}
//检查新旧查询是否相同-如果相同,VueRouter将不会更改路由,因此这可能是第一次加载页面
if(this.isSameObject(查询,obj))
{
this.fetchData();//页面已在浏览器中手动重新加载
}
其他的
{
这是$router.replace({
…此.$router.currentRoute,
查询:obj
});
}
},
isSameObject(a,b)
{
让同样的假设成立;
用于(a中的常量键)
{
如果(a[键]!=b[键])
{
相同=错误;
打破
}
}
//处理密钥存在于B中但不存在于a中的情况
用于(b中的常量键)
{
如果(a[键]!=b[键])
{
相同=错误;
打破
}
}
返回相同的值;
}
}
页面不会重新加载-Vue将重用组件实例并对其进行修补。您会注意到,通过beforeRouteUpdate
hook触发而不是beforeRouteEnter
hook触发的事实。对于您的用例,使用URL查询值而不是路由路径参数更合适。我最近需要一个可选的路由参数,并发现:)谢谢您的评论@ivo你能提供更多关于“URL查询值”的信息吗?谢谢。如果你想改进你的答案,可以摘录那些真正重要的部分,并注释掉你的具体部分,这样我们就可以为so社区创造一般知识了吗?@helle,当然可以。谢谢。什么是FilterationHasChanged
,它在哪里被调用?@helle它是一个简单的观察者,导航到新路线,然后用户更新过滤器。这对浏览器上的后退和前进按钮不起作用,因为url只会在顶部更改,但数据不会更改