Jak mogę pobrać parametry zapytania w Vue.js?
Np http://somesite.com?test=yay
.
Nie możesz znaleźć sposobu na pobranie lub czy muszę do tego użyć czystego JS lub biblioteki?
Jak mogę pobrać parametry zapytania w Vue.js?
Np http://somesite.com?test=yay
.
Nie możesz znaleźć sposobu na pobranie lub czy muszę do tego użyć czystego JS lub biblioteki?
Odpowiedzi:
Zgodnie z dokumentacją obiektu trasy masz dostęp do $route
obiektu ze swoich komponentów, które ujawniają to, czego potrzebujesz. W tym przypadku
//from your component
console.log(this.$route.query.test) // outputs 'yay'
vue-router
to rzeczywiście byłby duplikatem, ponieważ będzie musiał użyć standardowych metod JS.
vue-router
tag i dodałem go.
return next({ name: 'login', query:{param1: "foo" }, });
nie działa. wewnątrz komponentu logowania prop param1
jest niezdefiniowany.
Bez vue-route podziel adres 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(){
},
Inne rozwiązanie 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
skoro jest location.search
łatwo dostępny? developer.mozilla.org/en-US/docs/Web/API/… np. var querypairs = window.location.search.substr(1).split('&');
Dzielenie par nazwa-wartość zapytania przez „=” nie zawsze będzie działać, ponieważ można przekazać parametry nazwanego zapytania również bez wartości; np. ?par1=15&par2
Twój kod zgłosi teraz wyjątek na par2, ponieważ dzielenie przez „=” spowoduje, że tmp będzie zawierał tylko 1 element.
undefined
do getVars['par2']
.
Bardziej szczegółowa odpowiedź, aby pomóc początkującym w VueJS:
I sam kod:
<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, ... })
nie jest poprawną składnią.
Innym sposobem (zakładając, że używasz vue-router
) jest odwzorowanie parametru zapytania na rekwizyt w routerze. Następnie możesz traktować go jak każdy inny rekwizyt w kodzie komponentu. Na przykład dodaj tę trasę;
{
path: '/mypage',
name: 'mypage',
component: MyPage,
props: (route) => ({ foo: route.query.foo })
}
Następnie w swoim komponencie możesz dodać rekwizyt jak zwykle;
props: {
foo: {
type: String,
default: null
}
},
Wtedy będzie dostępny jako this.foo
i możesz zrobić z nim wszystko, co chcesz (np. Ustawić obserwatora itp.)
Według tej daty poprawnym sposobem według dynamicznych dokumentów routingu jest:
this.$route.params.yourProperty
zamiast
this.$route.query.yourProperty
query
aby uzyskać zapytania z adresu URL. Z dokumentacji: Oprócz $ route.params obiekt $ route udostępnia także inne przydatne informacje, takie jak $ route.query (jeśli zapytanie zawiera adres URL)
Możesz użyć vue-routera. Mam przykład poniżej:
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()
}
})
Uwaga: W beforeRouteEnter
funkcji nie możemy uzyskać dostępu do właściwości komponentu, takich jak this.propertyName
:. Dlatego przekazałem funkcję vm
do. next
Jest to zalecany sposób dostępu do instancji vue. Właściwie vm
to oznacza instancję vue
Możesz uzyskać korzystając z tej funkcji.
console.log(this.$route.query.test)
Jeśli twój serwer używa php, możesz to zrobić:
const from = '<?php echo $_GET["from"];?>';
Po prostu działa.