2016-03-10 8 views
40

Wie kann ich Abfrageparameter in vue.js abrufen?Vue.js Abfrageparameter

Kann ich keinen Weg finden oder muss ich pure JS oder eine Bibliothek dafür verwenden?

+1

Mögliche Duplikat [Wie kann ich Query-String-Werte in JavaScript bekommen?] (Http: //stackoverflow.com/questions/901115/how-can-i-get-query-string-values-in-javascript) –

+0

Warum wird das unten gewählt? Ich brauche es für Vue.js. Wenn es eine Vue-Bibliothek oder etwas eingebautes gibt, wäre es gegenüber der rohen js bevorzugt. – Rob

+0

Es gibt wahrscheinlich etwas in Vue Router, das es tut, wenn Sie das verwenden. –

Antwort

52

Gemäß den Dokumenten von haben Sie Zugriff auf ein $route Objekt von Ihren Komponenten, die offen legen, was Sie benötigen. In diesem Fall

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

Yup! Wenn er nicht 'vue-router' verwendet, wäre das in der Tat ein Duplikat, da er Standard-JS-Methoden verwenden muss. – Jeff

+0

Ich nehme einfach an, dass, weil der gleiche Benutzer gerade vor einer Frage über vue-Router gepostet hat, ich den Vue-Router-Tag erstellen würde, wenn ich den Ruf hatte, das –

+1

guten Punkt zu tun! Ich ging voran und erstellte das 'vue-router' Tag und fügte es hinzu. – Jeff

11

Detailliertere Antwort, um den Neulingen von VueJs zu helfen.

<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) 
    }, 
}); 
+1

Bitte erläutern Sie es –

+0

Definieren Sie zuerst Ihr Router-Objekt, wählen Sie den Modus, der Ihnen passend erscheint. Sie können Ihre Routen in der Routenliste deklarieren. Als nächstes möchten Sie, dass Ihre Haupt-App weiß, dass der Router existiert, also deklarieren Sie ihn in der Haupt-App-Deklaration. Schließlich enthält die $ route-Instanz alle Informationen über die aktuelle Route. Mein Code wird nur den in der URL übergebenen Parameter protokollieren. (* Mounted ist vergleichbar mit document.ready, .ie wird aufgerufen, sobald die App fertig ist) – Sabyasachi

+1

Für noch ahnungslosere Neulinge: VueRouter ist nicht im VueJS-Kern enthalten, daher sollten Sie den VueRouter separat hinzufügen: '< script src = "https://unpkg.com/vue-router"> ' – rustyx

1

Ohne vue-Route, teilen Sie die 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(){ 
    }, 

Eine andere Lösung 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(){ 
    }, 
+1

Warum würden Sie 'location.href' selbst teilen, wenn' location.search' bereitwillig verfügbar ist? https://developer.mozilla.org/en-US/docs/Web/API/HTMLHyperlinkElementUtils/search z.B. 'var querypairs = window.location.search.substr (1) .split ('&');' Auch das Teilen der Query-Name-Wert-Paare mit' = 'funktioniert nicht immer, da auch benannte Query-Parameter ohne Wert übergeben werden können; '? par1 = 15 & par2' Ihr Code würde jetzt eine Ausnahme auf Par2 auslösen, wenn das Teilen durch '=' zu tmp mit nur 1 Element führt. – Arthur

+0

Sorry würde keine Ausnahme werfen, aber Sie würden auch Par2 nicht fangen 'undefined' zu' getVars ['par2'] ''. – Arthur

+0

die GET-Methode ist eine Zeichenfolge (Name/Wert-Paare), in der URL – erajuan