Làm cách nào tôi có thể tìm nạp các tham số truy vấn trong Vue.js?
Ví dụ http://somesite.com?test=yay.
Không thể tìm cách tìm nạp hoặc tôi cần sử dụng JS thuần túy hoặc một số thư viện cho việc này?
Làm cách nào tôi có thể tìm nạp các tham số truy vấn trong Vue.js?
Ví dụ http://somesite.com?test=yay.
Không thể tìm cách tìm nạp hoặc tôi cần sử dụng JS thuần túy hoặc một số thư viện cho việc này?
Câu trả lời:
Theo các tài liệu của đối tượng tuyến đường , bạn có quyền truy cập vào một $routeđối tượng từ các thành phần của mình, điều này phơi bày những gì bạn cần. Trong trường hợp này
//from your component
console.log(this.$route.query.test) // outputs 'yay'
vue-routerhơn thì đây thực sự sẽ là một bản sao, vì anh ta sẽ cần sử dụng các phương thức JS tiêu chuẩn.
vue-routerthẻ và thêm nó.
return next({ name: 'login', query:{param1: "foo" }, });không hoạt động. bên trong thành phần đăng nhập prop param1không xác định.
Nếu không có vue-route, hãy tách 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(){
},
Một giải pháp khác https://developer.mozilla.org/en-US/docs/Web/API/HTMLHyperlinkEuityUtils/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.hreftự chia tay khi có location.searchsẵn? developer.mozilla.org/en-US/docs/Web/API/, vd: var querypairs = window.location.search.substr(1).split('&');Cũng chia tách các cặp tên-giá trị truy vấn bởi '=' sẽ không luôn hoạt động vì bạn cũng có thể chuyển các tham số truy vấn có tên mà không có giá trị; ví dụ: ?par1=15&par2Mã của bạn bây giờ sẽ đưa ra một ngoại lệ trên par2 khi chia tách bởi '=' sẽ dẫn đến tmp chỉ có 1 phần tử.
undefinedcho getVars['par2'].
Câu trả lời chi tiết hơn để giúp những người mới của VueJS:
Và bản thân mã:
<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, ... })không phải là cú pháp hợp lệ.
Một cách khác (giả sử bạn đang sử dụng vue-router), là ánh xạ thông số truy vấn tới chỗ dựa trong bộ định tuyến của bạn. Sau đó, bạn có thể coi nó như bất kỳ chỗ dựa nào khác trong mã thành phần của bạn. Ví dụ: thêm tuyến đường này;
{
path: '/mypage',
name: 'mypage',
component: MyPage,
props: (route) => ({ foo: route.query.foo })
}
Sau đó, trong thành phần của bạn, bạn có thể thêm prop như bình thường;
props: {
foo: {
type: String,
default: null
}
},
Sau đó, nó sẽ có sẵn this.foovà bạn có thể làm bất cứ điều gì bạn muốn với nó (như đặt một người theo dõi, v.v.)
Kể từ ngày này, cách chính xác theo các tài liệu định tuyến động là:
this.$route.params.yourProperty
thay vì
this.$route.query.yourProperty
queryđể lấy các truy vấn từ URL. Từ các tài liệu: Ngoài $ route.params, đối tượng $ route còn hiển thị các thông tin hữu ích khác như $ route.query (nếu có một truy vấn trong URL)
Bạn có thể sử dụng vue-router. Tôi có một ví dụ dưới đây:
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()
}
})
Lưu ý: Trong beforeRouteEnterchức năng, chúng tôi không thể truy cập thuộc tính của thành phần như: this.propertyNameVững lý do tại sao tôi có vượt qua vmđể nextfunction.It là cách recommented để truy cập các vue instance.Actually sự vmnó là viết tắt ví dụ vue
Bạn có thể nhận được bằng cách sử dụng chức năng này.
console.log(this.$route.query.test)
Nếu máy chủ của bạn sử dụng php, bạn có thể làm điều này:
const from = '<?php echo $_GET["from"];?>';
Chỉ cần làm việc.