Vue, is there a way to pass data between routes without URL params?

别说谁变了你拦得住时间么 提交于 2020-06-24 08:18:55

问题


I am looking how to pass data secretly between two separate components (not parent and child) without using URL params in my Vue2 app. This doesn't mean I am passing secrets but rather I just dont want the user to see it (only for UI considerations).

I know Vue has Props but they are meant for passing data between parent and child component. In my case, my URL will change but I don't want to pass data via visible params.

Someone claimed to use props without URL params here but I haven't been able to reproduce a working solution (getting undefined each time).

I also checked out these options but they are all using either URL or query params which as we know are visible.

An ugly solution would be to write the data to local storage and then read it there but this creates a lot of overhead and complexity (like what if I only want this data to be read once, etc).

Is there a more elegant solution to this problem?

Thanks!


回答1:


  1. make props: true for the destination route -- in the index.js file of router

    {
      path: '/home',
      name: 'home',
      component: taskChooser,
      props: true,
      }
  1. define prop in the component e.g props: ['myprop'], - note the quotes

  2. copy the variable you want to pass from the source route into the same name as your prop - in this case myprop

myprop = theVariableThatYouWantToPass

this.$router.replace({name:'home', params:{myprop}});

Make sure that the name of prop and variable are same - the prop is in quotes.

It's working for me.




回答2:


Thanks @Mayank for pointing me in the correct direction.

Here is the correct syntax that worked for me.

  1. Notice the props in In router index

    {
      path: '/componentPath',
      name: 'componentName',
      props: {
         header: true,
         content: true
      },
    }
    
  2. In the component you are redirecting to, define the props as following:

    props: {
      myProperty: {
        type: <DATATYPE>
      },
    }
    
  3. Perform redirect as following:

    this.$router.push({
      name: 'componentName',
      params: {
        myProperty: <VARIABLE>
      }
    })
    
  4. Access props with the this. convention from created or in later lifecycle event.

In this case, the variable name and property name do not have to be the same as it is a simple map. That naming convention would be a curious design choice anyway.



来源:https://stackoverflow.com/questions/50998305/vue-is-there-a-way-to-pass-data-between-routes-without-url-params

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!