Vue.js查询参数

时间:2016-03-10 10:38:33

标签: javascript vue.js vue-router url-parameters

如何在vue.js中获取查询参数?

http:://somesite.com?test=yay

无法找到获取方法或者我是否需要使用纯JS或某些库?

11 个答案:

答案 0 :(得分:185)

根据route object的文档,您可以从组件中访问$route对象,从而显示您需要的内容。在这种情况下

//from your component
console.log(this.$route.query.test) // outputs 'yay'

答案 1 :(得分:27)

更详细的答案,以帮助VueJs的新手。

<script src="https://unpkg.com/vue-router"></script>
var router = new VueRouter({
    mode: 'history',
    routes: []
});
var vm =  new Vue({
    router,
    el: '#app',
    mounted: function() {
        q = this.$route.query.q
        console.log(q)
    },
});

答案 2 :(得分:25)

如果没有vue-route,请拆分网址

var vm = new Vue({
  ....
  created()
  {
    let uri = window.location.href.split('?');
    if (uri.length == 2)
    {
      let vars = uri[1].split('&');
      let getVars = {};
      let tmp = '';
      vars.forEach(function(v){
        tmp = v.split('=');
        if(tmp.length == 2)
        getVars[tmp[0]] = tmp[1];
      });
      console.log(getVars);
      // do 
    }
  },
  updated(){
  },

另一种解决方案https://developer.mozilla.org/en-US/docs/Web/API/HTMLHyperlinkElementUtils/search

var vm = new Vue({
  ....
  created()
  {
    let uri = window.location.search.substring(1); 
    let params = new URLSearchParams(uri);
    console.log(params.get("var_name"));
  },
  updated(){
  },

答案 3 :(得分:7)

另一种方法(假设您正在使用vue-router)是将查询参数映射到路由器中的prop。然后,您可以像对待组件代码中的其他任何道具一样对待它。例如,添加此路线;

{ 
    path: '/mypage', 
    name: 'mypage', 
    component: MyPage, 
    props: (route) => ({ foo: route.query.foo })  
}

然后可以在组件中正常添加道具;

props: {
    foo: {
        type: String,
        default: null
    }
},

然后它将以this.foo的形式提供,您可以使用它进行任何操作(例如设置观察者等)

答案 4 :(得分:3)

如果您的网址看起来像这样:

somesite.com/something/123

如果“ 123”是名为“ id”的参数(网址类似于/ something /:id),请尝试:

this.$route.params.id

答案 5 :(得分:3)

Vue 3 组合 API

(截至 2021 年,vue-router 4)

import {useRouter} from "vue-router";

//can use only in setup()
useRoute().query.test

//somewhere in your src files
import router from "~/router";

//can use everywhere 
router.currentRoute.value.query.test  

import {useRouter} from "vue-router";

//can use only in setup()
useRouter().currentRoute.value.query.test

答案 6 :(得分:2)

  

你可以使用vue-router。我有一个例子如下:

网址: www.example.com?name=john&lastName=doe

new Vue({
  el: "#app",
  data: {
    name: '',
    lastName: ''
  },
  beforeRouteEnter(to, from, next) {
      if(Object.keys(to.query).length !== 0) { //if the url has query (?query)
        next(vm => {
         vm.name = to.query.name
         vm.lastName = to.query.lastName
       })
    }
    next()
  }
})

注意:beforeRouteEnter函数中,我们无法访问组件的属性,例如:this.propertyName。这就是我将vm传递给next的原因function.It是访问vue实例的推荐方法。实际上vm代表vue实例

答案 7 :(得分:2)

截至该日期,正确的方法是(我不知道为什么更改了它们):

this.$route.params.yourProperty instead of this.$route.query.yourProperty

Docs

答案 8 :(得分:2)

尝试此代码

 var vm = new Vue({
     created()
     {
       let urlParams = new URLSearchParams(window.location.search);
           console.log(urlParams.has('yourParam')); // true
           console.log(urlParams.get('yourParam')); // "MyParam"
     },

答案 9 :(得分:1)

您可以通过使用此功能来获得。

console.log(this.$route.query.test)

答案 10 :(得分:0)

如果您将 vue-router 与 vue3 组合 api 一起使用,请执行以下操作

import { useRoute } from 'vue-router'

export default {
  setup() {
    const route = useRoute()
    console.log(route.query)
  }
}