Comment puis-je récupérer les paramètres de requête dans Vue.js?
Par exemple http://somesite.com?test=yay
.
Vous ne trouvez pas un moyen de récupérer ou dois-je utiliser du JS pur ou une bibliothèque pour cela?
Comment puis-je récupérer les paramètres de requête dans Vue.js?
Par exemple http://somesite.com?test=yay
.
Vous ne trouvez pas un moyen de récupérer ou dois-je utiliser du JS pur ou une bibliothèque pour cela?
Réponses:
Selon les documents de l' objet route , vous avez accès à un $route
objet à partir de vos composants, qui expose ce dont vous avez besoin. Dans ce cas
//from your component
console.log(this.$route.query.test) // outputs 'yay'
vue-router
pas, ce serait en effet un doublon, car il devra utiliser des méthodes JS standard.
vue-router
tag et l' ai ajouté.
return next({ name: 'login', query:{param1: "foo" }, });
ça ne fonctionne pas. à l'intérieur du composant de connexion, l'hélice param1
n'est pas définie.
Sans vue-route, divisez 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(){
},
Une autre solution 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
quand il est location.search
facilement disponible? developer.mozilla.org/en-US/docs/Web/API/… eg var querypairs = window.location.search.substr(1).split('&');
Par exemple, le fractionnement des paires nom-valeur de la requête par '=' ne fonctionnera pas toujours car vous pouvez également transmettre des paramètres de requête nommés sans valeur; Par exemple, ?par1=15&par2
votre code lèverait maintenant une exception sur le par2 car la division par '=' entraînera tmp avec seulement 1 élément.
undefined
à getVars['par2']
.
Réponse plus détaillée pour aider les débutants de VueJS:
Et le code lui-même:
<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, ... })
n'est pas une syntaxe valide.
Une autre façon (en supposant que vous utilisez vue-router
) est de mapper le paramètre de requête à un accessoire de votre routeur. Ensuite, vous pouvez le traiter comme n'importe quel autre accessoire dans votre code de composant. Par exemple, ajoutez cette route;
{
path: '/mypage',
name: 'mypage',
component: MyPage,
props: (route) => ({ foo: route.query.foo })
}
Ensuite, dans votre composant, vous pouvez ajouter l'accessoire normalement;
props: {
foo: {
type: String,
default: null
}
},
Ensuite, il sera disponible en tant que this.foo
et vous pouvez faire tout ce que vous voulez avec lui (comme définir un observateur, etc.)
À partir de cette date, la manière correcte selon les documents de routage dynamique est:
this.$route.params.yourProperty
au lieu de
this.$route.query.yourProperty
query
pour obtenir les requêtes à partir de l'URL. De la documentation: En plus de $ route.params, l'objet $ route expose également d'autres informations utiles telles que $ route.query (s'il y a une requête dans l'URL)
Vous pouvez utiliser vue-router. J'ai un exemple ci-dessous:
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()
}
})
Remarque: En beforeRouteEnter
fonction , nous ne pouvons pas accéder aux propriétés du composant comme: this.propertyName
.que est pourquoi j'ai passer le vm
à next
function.It est le moyen recommented pour accéder à la vue instance.Actually l' vm
on signifie par exemple vue
Vous pouvez obtenir en utilisant cette fonction.
console.log(this.$route.query.test)
Si votre serveur utilise php, vous pouvez le faire:
const from = '<?php echo $_GET["from"];?>';
Fonctionne juste.