• vue 之this.$router.replace和this.$router.push的区别


    this.$router.push
    1.跳转到指定URL,向history栈添加一个新的记录,点击后退会返回至上一个页面
    2.声明式
      <router-link :to="....">
      编程式
      router.push(...)//该方法的参数可以是一个字符串路径,或者一个描述地址的对象。
      
      this.$router.push('/index')
      this.$router.push({path:'/index'})
      this.$router.push({path:'/index',query:{name: '123'}})
      this.$router.push({name:'index',params:{name:'123'}})

     // 字符串

      router.push('home')
      // 对象
      this.$router.push({path: '/login?url=' + this.$route.path});
      // 带查询参数,变成/backend/order?selected=2
      this.$router.push({path: '/backend/order', query: {selected: "2"}});
      // 命名的路由
      router.push({ name: 'user', params: { userId: 123 }})

     this.$router.replace

    1.跳转到指定URL,替换history栈中最后一个记录,点击后退会返回至上上一个页面
    (A----->B----->C   结果B被C替换    A----->C)
    2.设置 replace 属性(默认值: false)的话,当点击时,会调用 router.replace() 而不是 router.push(),于是导航后不会留下 history 记录。即使点击返回按钮也不会回到这个页面
    加上replace: true后,它不会向 history 添加新记录,而是跟它的方法名一样 —— 替换掉当前的 history 记录。
      //声明式:
      <router-link :to="..." replace></router-link>
      // 编程式:
      router.replace(...)
      //push方法也可以传replace
      this.$router.push({path: '/home', replace: true})

    两种传参方式

    query: 
        this.$router.push({
          path: '/home',
          query: {
            site: [],
            bu: []
          }
        })
    params:
      this.$router.push({
        name: 'Home',  // 路由的名称
        params: {
          site: [],
          bu: []
        }
      })
    params:/router1/:id ,/router1/123,/router1/789 ,这里的id叫做params
    query:/router1?id=123 ,/router1?id=456 ,这里的id叫做query。
    两者都可以传递参数,区别是什么?
    query 传参配置的是path,而params传参配置的是name,在params中配置path无效
    query在路由配置不需要设置参数,而params必须设置
    query传递的参数会显示在地址栏中
    params传参刷新会无效,但是query会保存传递过来的值,刷新不变 ;
    路由的配置
    query:
      {
      path: '/home',
      name: Home,
      component: Home
      }
      params:
      {
      path: '/home/:site/:bu',
      name: Home,
      component: Home
      }
    如果路由上面不写参数,也是可以传过去的,但不会在url上面显示出你的参数,并且当你跳到别的页面或者刷新页面的时候参数会丢失,那依赖这个参数的http请求或者其他操作就会失败
    在接收跳转的页面获取路由参数:
    created () {
    let self = this
    self.getParams()
    },
    watch () {
    '$route': 'getParams'
    },
    methods: {
      getParams () {
      let site = this.$route.query.site
      let bu = this.$route.query.bu
      // 如果是params 传参,那就是this.$route.params.site
      上面就可以获取到传递的参数了
     }
     注意:获取路由上面的参数,用的是$route,后面没有r

    params是路由的一部分,必须要有。query是拼接在url后面的参数,没有也没关系。

    params一旦设置在路由,params就是路由的一部分,如果这个路由有params传参,但是在跳转的时候没有传这个参数,会导致跳转失败或者页面会没有内容。

    params、query不设置也可以传参,但是params不设置的时候,刷新页面或者返回参数会丢失,query并不会出现这种情况,这一点的在上面说过.

    this.$router.go(n)

    1.类似window.history.go(n),向前或向后跳转n个页面,n可正(先后跳转)可负(向前跳转)
    2.this.$router.go(1)    //类似history.forward()
      this.$router.go(-1)   //类似history.back()
      最后总结:
    路由传递参数和传统传递参数是一样的,命名路由类似表单提交而查询就是url传递:
    1.命名路由搭配params,刷新页面参数会丢失
    2.查询参数搭配query,刷新页面数据不会丢失
    3.接收参数使用this.$router后面就是搭配路由的名称就能获取到参数的值
  • 相关阅读:
    JS 获取网页内容高度 和 网页可视高度 支持IE6789 Firefox Chrome
    JS 回车快捷键登陆页面 兼容火狐和IE
    如何设置span宽度
    实现三行布局页面自适应不同分辨率下的屏幕高度
    电脑个别网站打不开 POSTMAN可以请求通
    克隆DataTable
    Microsoft Visual SourceSafe 6.0 关联VS
    asp.net 网站设置访问超时时长
    sql server management studio(ssms)连接多个数据库注意事项
    ASP.NET Core 开发中间件(StaticFiles)使用
  • 原文地址:https://www.cnblogs.com/linm/p/13600672.html
Copyright © 2020-2023  润新知