Вю.параметры запроса js


Как я могу получить параметры запроса в vue.js?

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

Не могу найти способ получить или мне нужно использовать pure JS или какую-то библиотеку для этого?

5 70

5 ответов:

Согласно документам объекта маршрута, у вас есть доступ к объекту $route из ваших компонентов, которые предоставляют то, что вам нужно. В этом случае

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

Более подробный ответ, чтобы помочь новичкам 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)
    },
});

Без vue-route разбейте URL

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(){
  },

Вы можете использовать Vue-маршрутизатор.У меня есть пример ниже:

Url: 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

Другой способ (предполагая, что вы используете vue-router) - сопоставить запрос param с prop в вашем маршрутизаторе. Тогда вы можете рассматривать его как любой другой реквизит в вашем компонентном коде. Например, добавьте этот маршрут;

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

Тогда в вашем компоненте вы можете добавить опору как обычно;

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

Тогда он будет доступен как this.foo, и вы можете делать с ним все, что захотите (например, установить наблюдателя и т. д.)