Come posso recuperare i parametri della query in Vue.js?
Es http://somesite.com?test=yay
.
Non riesci a trovare un modo per recuperare o devo usare JS puro o qualche libreria per questo?
Come posso recuperare i parametri della query in Vue.js?
Es http://somesite.com?test=yay
.
Non riesci a trovare un modo per recuperare o devo usare JS puro o qualche libreria per questo?
Risposte:
Secondo i documenti dell'oggetto route , hai accesso a un $route
oggetto dai tuoi componenti, che espongono ciò di cui hai bisogno. In questo caso
//from your component
console.log(this.$route.query.test) // outputs 'yay'
vue-router
sarebbe davvero un duplicato, poiché dovrà utilizzare i metodi JS standard.
vue-router
tag e l'ho aggiunto.
return next({ name: 'login', query:{param1: "foo" }, });
non funziona. all'interno del componente login l'elica param1
non è definita.
Senza vue-route, dividi l'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(){
},
Un'altra soluzione 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(){
},
location.href
dividerti quando è location.search
prontamente disponibile? developer.mozilla.org/en-US/docs/Web/API/… es. var querypairs = window.location.search.substr(1).split('&');
Anche la suddivisione delle coppie nome-valore della query per '=' non funzionerà sempre poiché è possibile passare parametri di query denominati anche senza valore; es. ?par1=15&par2
Il tuo codice ora genererebbe un'eccezione su par2 poiché la divisione per '=' si tradurrà in tmp con solo 1 elemento.
undefined
a getVars['par2']
.
Risposta più dettagliata per aiutare i neofiti di VueJS:
E il codice stesso:
<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)
},
});
<script src="https://unpkg.com/vue-router"></script>
new Vue({ router, ... })
non è una sintassi valida.
Un altro modo (supponendo che tu stia utilizzando vue-router
) è mappare il parametro della query su un oggetto nel tuo router. Quindi puoi trattarlo come qualsiasi altro oggetto nel tuo codice componente. Ad esempio, aggiungi questo percorso;
{
path: '/mypage',
name: 'mypage',
component: MyPage,
props: (route) => ({ foo: route.query.foo })
}
Quindi nel tuo componente puoi aggiungere l'elica normalmente;
props: {
foo: {
type: String,
default: null
}
},
Quindi sarà disponibile come this.foo
e puoi fare tutto quello che vuoi (come impostare un osservatore, ecc.)
A partire da questa data, il modo corretto secondo i documenti di routing dinamico è:
this.$route.params.yourProperty
invece di
this.$route.query.yourProperty
query
per ottenere le query dall'URL. Dai documenti: oltre a $ route.params, l'oggetto $ route espone anche altre informazioni utili come $ route.query (se c'è una query nell'URL)
Puoi usare vue-router. Ho un esempio qui sotto:
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()
}
})
Nota: in beforeRouteEnter
funzione non possiamo accedere alle proprietà del componente come:. this.propertyName
Ecco perché ho passato la funzione vm
to. next
È il modo consigliato per accedere all'istanza di Vue. In vm
realtà, sta per istanza di Vue
È possibile ottenere utilizzando questa funzione.
console.log(this.$route.query.test)
Se il tuo server utilizza php, puoi farlo:
const from = '<?php echo $_GET["from"];?>';
Funziona e basta.