javascript - Hvordan kan jeg hente spørringsparametere fra en URL i Vue.js?
Hvordan kan jeg hente spørringsparametere i Vue.js?
F.eks.
http://somesite.com?test=yay
Finner ikke en måte å hente på, eller må jeg bruke ren JS eller et bibliotek for dette?
Svar #1
I følge dokumentasjonen for ruteobjektet, har du tilgang til et $route-objekt fra komponentene dine, som viser det du trenger. I dette tilfellet
// from your component
console.log(this.$route.query.test) // outputs 'yay'
Svar #2
Prøv denne koden
var vm = new Vue({
created() {
let urlParams = new URLSearchParams(window.location.search);
console.log(urlParams.has('yourParam')); // true
console.log(urlParams.get('yourParam')); // "MyParam"
},
});
Svar #3
Uten vue-router, del URL-en
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() {
},
....
En annen løsning 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() {
},
....
Svar #4
Mer detaljert svar for å hjelpe nybegynnere i VueJS:
- Definer først router-objektet ditt, velg modusen du synes passer. Du kan deklarere rutene dine inne i rutelisten.
- Neste vil du at hovedappen din skal vite at ruteren eksisterer, så erklær den inne i hovedapp-deklarasjonen.
- Til slutt holder
$route-instansen all informasjon om den nåværende ruten. Koden vil logge til konsollen bare parameteren som ble sendt i URL-en. (*Mounted er likdocument.ready, dvs. det kalles så snart appen er klar)
Og selve koden:
<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)
},
});
Svar #5
En annen måte (forutsatt at du bruker vue-router), er å kartlegge spørringsparameteren til en prop i ruteren din. Deretter kan du behandle den som enhver annen prop i komponentkoden din. For eksempel, legg til denne ruten;
{
path: '/mypage',
name: 'mypage',
component: MyPage,
props: (route) => ({ foo: route.query.foo }),
}
Deretter kan du i komponenten din legge til prop-en som vanlig;
props: {
foo: {
type: String,
default: null,
}
},
Da vil det være tilgjengelig som this.foo, og du kan gjøre hva du vil med det (som å sette en watcher osv.)
Svar #6
Vue 3 Komposisjons-API
(så langt nå 2021, vue-router 4)
import {useRoute} from "vue-router";
//can use only in setup()
useRoute().query.test
eller
//somewhere in your src files
import router from "~/router";
//can use everywhere
router.currentRoute.value.query.test
eller
import {useRouter} from "vue-router";
//can use only in setup()
useRouter().currentRoute.value.query.test
Svar #7
Per dags dato er den riktige måten ifølge dokumentasjonen for dynamisk ruting:
this.$route.params.yourProperty
i stedet for
this.$route.query.yourProperty
