动态修改浏览器地址栏,并保持页面不刷新

需求:浏览器地址栏跟随输入框的变化而变化。

需求背景:客户A需要将地址和查询条件一起分享给客户B。如下图

第一种方式:vue技术栈的话,使用路由的小技巧

router.push方法中只push一个query既可以实现,但是会更新表单组件,不会更新父组件

可以在各组件的生命周期函数中观察更新效果。

去实现:

// 表单数据
data(){
    return {
        formData:{
            name:'',
            sex:''
        }
    }
}

//methods -- 路由这里我使用的vue3.0,大家要切换成vue2
handleSearch(){
    router.push({
        query:this.formData
    })
}

第二种实现方式:history.pushState()

在 HTML 文档中,history.pushState() 方法向当前浏览器会话的历史堆栈中添加一个状态(state)。

HTML5中history提供的pushStatereplaceState这两个API。它们提供了操作浏览器历史栈的方法。

pushState能够在不加载页面的情况下改变浏览器的URL。这个方法接受三个参数:

history.pushState(state, title[, url])

1、state 暂时可以忽略

2、title暂时可以忽略

3、url关键参数,将新的url替换旧的即可,注意:新网址必须与当前网址相同 origin

4、这种方式点击查询事件,修改url时,不会更新表单组件

去实现:

    // 点击搜索事件,demo是在 vue3中的实现,大家按照思路去实现
    const handleSearch = () => {
        let str =  router.currentRoute.value.path //获取当前路由 如'/seturl'
        //将表单键值对 序列化后拼接至字符串
        for(let key in formData){
            str += `?${key}=${obj.sear_data[key]}&`
        }
        // 会话的历史实现 - 不会刷新当前组件
        str = str.substr(0,str.length-1)
        history.pushState({}, "", `#${str}`);
    }

效果如下:页面没有刷新,输入框内容还在。

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
让我们来看一下如何使用JavaScript(JS)来修改URL而不刷新页面。在网页开发中,使用JS可以实现很多功能,其中包括动态修改URL。 首先,我们需要了解一下window对象中的history对象。这个对象包含了有关浏览器历史记录的信息,并提供了一些方法来操作历史记录。我们主要使用其中的pushState()方法来修改URL。 pushState()方法接受三个参数,分别是状态对象(state object)、标题(title)和URL。状态对象可以包含任何你想要的数据,而标题在大多数浏览器中是不可见的。而重点是第三个参数URL,它允许我们修改浏览器地址栏中的URL,而不刷新页面。 以下是一个示例代码: ``` // 获取要修改的URL片段 var newURL = "http://example.com/new/url"; // 修改URL window.history.pushState(null, null, newURL); ``` 在这个例子中,我们将URL修改为"http://example.com/new/url"。 需要注意的是,修改URL并不会刷新页面,因此在修改URL之后,页面的内容仍然保持不变。这意味着我们可以使用JS来创建单页应用程序(Single Page Application,SPA),在不刷新页面的情况下更改URL以获取不同的数据。 然而,需要注意的是,虽然URL被修改了,但浏览器并不会立即去请求新的页面。如果需要加载新的内容,我们需要使用其他JS技术(如AJAX)来请求服务器获取数据,并使用返回的数据来更新页面的内容。 总而言之,通过使用JS中的pushState()方法,我们可以在不刷新页面的情况下修改URL,从而实现动态的URL变化。这在构建单页应用程序等情况下非常有用。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

锋小张

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值