Answers:
根据route object的文档,您可以$route
从组件中访问一个对象,该对象暴露了您的需求。在这种情况下
//from your component
console.log(this.$route.query.test) // outputs 'yay'
vue-router
,那确实是重复的,因为他将需要使用标准的JS方法。
vue-router
标签并添加了标签。
return next({ name: 'login', query:{param1: "foo" }, });
行不通的。在登录组件内部,道具param1
未定义。
如果没有vue-route,请分割网址
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(){
},
另一个解决方案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
当有location.search
现成的东西时,您为什么要分裂自己?developer.mozilla.org/zh-CN/docs/Web/API/…例如,var querypairs = window.location.search.substr(1).split('&');
用“ =”分隔查询名称/值对也不总是可行,因为您也可以传递没有值的命名查询参数。例如,?par1=15&par2
您的代码现在将在par2上引发异常,因为用'='分割将导致tmp仅包含1个元素。
undefined
给getVars['par2']
。
帮助VueJS的新手的更详细的答案:
和代码本身:
<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, ... })
是无效的语法。
另一种方式(假设您正在使用vue-router
)是将查询参数映射到路由器中的prop。然后,您可以像对待组件代码中的其他任何道具一样对待它。例如,添加此路线;
{
path: '/mypage',
name: 'mypage',
component: MyPage,
props: (route) => ({ foo: route.query.foo })
}
然后,可以在组件中正常添加道具。
props: {
foo: {
type: String,
default: null
}
},
然后它将可用this.foo
,您可以用它做任何您想做的事情(例如设置观察者等)。
你可以使用vue-router,下面是一个例子:
网址: 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()
}
})
注意:在beforeRouteEnter
函数中我们无法访问组件的属性,例如:this.propertyName
。这就是为什么我传递了vm
to next
函数。这是访问vue实例的推荐方式。vm
实际上,它代表vue实例
如果您的服务器使用php,则可以执行以下操作:
const from = '<?php echo $_GET["from"];?>';
正常工作。