2016-03-10 18 views
40

Làm cách nào để tìm nạp tham số truy vấn trong vue.js?Tham số truy vấn Vue.js

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 điều này?

+1

có thể trùng lặp của [Làm thế nào tôi có thể nhận được các giá trị chuỗi truy vấn trong JavaScript?] (Http: //stackoverflow.com/questions/901115/how-can-i-get-query-string-values-in-javascript) –

+0

Tại sao điều này lại bị bỏ phiếu? Tôi cần nó cho Vue.js. Nếu có một số thư viện vue hoặc một cái gì đó được xây dựng trong nó sẽ được ưa thích hơn js liệu. – Rob

+0

Có thể có gì đó trong Vue Router thực hiện điều đó, nếu bạn đang sử dụng nó. –

Trả lời

52

Theo tài liệu của route object, bạn có quyền truy cập vào đối tượng $route từ các thành phần của mình, để hiển thị 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' 
+1

Yup! Nếu anh ta không sử dụng 'vue-router' thì điều nà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 chuẩn. – Jeff

+0

Tôi chỉ giả định rằng vì cùng một người dùng đã đăng ngay trước câu hỏi về bộ định tuyến vue, tôi sẽ tạo thẻ vue-router nếu tôi có danh tiếng để làm điều đó –

+1

điểm tốt! Tôi đã đi trước và tạo thẻ 'vue-router' và thêm nó. – Jeff

11

Câu trả lời chi tiết hơn để giúp người mới sử dụng VueJ.

<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) 
    }, 
}); 
+1

Hãy giải thích nó –

+0

Đầu tiên xác định đối tượng bộ định tuyến của bạn, chọn chế độ bạn có vẻ phù hợp.Bạn có thể khai báo các tuyến đường của bạn bên trong danh sách tuyến đường. Tiếp theo, bạn sẽ muốn ứng dụng chính của mình biết router tồn tại, vì vậy hãy khai báo nó bên trong khai báo ứng dụng chính. Cuối cùng, ví dụ $ route giữ tất cả thông tin về tuyến đường hiện tại. Mã của tôi sẽ kiểm soát nhật ký chỉ thông số được truyền trong url. (* Gắn kết tương tự như document.ready, .ie được gọi ngay khi ứng dụng sẵn sàng) – Sabyasachi

+1

Đối với những người mới không biết nhiều hơn: VueRouter không có trong lõi VueJS, vì vậy bạn có thể muốn đưa riêng VueRouter: '< script src = "https://unpkg.com/vue-router"> ' – rustyx

1

Without vue-tuyến đường, chia 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 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(){ 
    }, 
+1

Tại sao bạn sẽ tự tách 'location.href' khi có' location.search' sẵn có? https://developer.mozilla.org/en-US/docs/Web/API/HTMLHyperlinkElementUtils/search ví dụ: 'var querypairs = window.location.search.substr (1) .split ('&');' Chia tách các cặp tên-giá trị truy vấn bằng' = 'sẽ không luôn hoạt động khi bạn có thể chuyển các tham số truy vấn được đặt tên mà không có giá trị. '? par1 = 15 & par2' Mã của bạn bây giờ sẽ tăng ngoại lệ trên mệnh đề par2 khi tách bằng '=' sẽ dẫn đến tmp chỉ với 1 phần tử. – Arthur

+0

Xin lỗi sẽ không ném ngoại lệ nhưng bạn cũng không bắt được par2. 'undefined' thành' getVars ['par2'] '. – Arthur

+0

phương thức GET là một chuỗi (cặp tên/giá trị), trong URL – erajuan

Các vấn đề liên quan