web-dev-qa-db-ja.com

Vue.jsクエリパラメータ

Vue.jsでクエリパラメータを取得する方法を教えてください。

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

フェッチする方法が見つからないのですか、それとも純粋なJSまたは他のライブラリを使用する必要がありますか?

132
Rob

ルートオブジェクト のドキュメントによれば、あなたはあなたのコンポーネントから$routeオブジェクトにアクセスすることができます。この場合

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

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

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)
    },
});
28
Sabyasachi

もう1つの方法は(vue-routerを使用していると仮定して)、クエリパラメータをルーターのプロップにマッピングすることです。それからあなたはそれをあなたのコンポーネントコードの他の小道具のように扱うことができます。たとえば、この経路を追加します。

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

それからあなたのコンポーネントの中に、通常通りに小道具を追加することができます。

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

それがthis.fooとして利用可能になるでしょう、そしてあなたはそれを使ってあなたが望む何でもすることができます(ウォッチャーを設定するなどのように)

9
Mike P

あなたはvue-routerを使用することができます。私は以下の例があります:

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のようにコンポーネントのプロパティにアクセスすることはできません。vmnext関数に渡したのはそのためです。 vueインスタンスにアクセスします。実際はvueインスタンスを表すvm

2
roli roli

この日付の時点で、正しい方法は次のとおりです(変更された理由がわかりません)。

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

ドキュメント

0
Marco