ฉันจะดึงพารามิเตอร์การสืบค้นใน Vue.js ได้อย่างไร
http://somesite.com?test=yay
เช่น
ไม่สามารถหาวิธีดึงข้อมูลหรือฉันจำเป็นต้องใช้ JS บริสุทธิ์หรือห้องสมุดบางอย่างสำหรับเรื่องนี้?
ฉันจะดึงพารามิเตอร์การสืบค้นใน Vue.js ได้อย่างไร
http://somesite.com?test=yay
เช่น
ไม่สามารถหาวิธีดึงข้อมูลหรือฉันจำเป็นต้องใช้ JS บริสุทธิ์หรือห้องสมุดบางอย่างสำหรับเรื่องนี้?
คำตอบ:
ตามเอกสารเส้นทางของวัตถุคุณสามารถเข้าถึง$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 ให้แบ่ง 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(){
},
โซลูชันอื่น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/en-US/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
) คือการแมปแบบสอบถามพารามิเตอร์กับเสาในเราเตอร์ของคุณ จากนั้นคุณสามารถรักษามันเหมือนเสาอื่น ๆ ในรหัสส่วนประกอบของคุณ ตัวอย่างเช่นเพิ่มเส้นทางนี้
{
path: '/mypage',
name: 'mypage',
component: MyPage,
props: (route) => ({ foo: route.query.foo })
}
จากนั้นในองค์ประกอบของคุณคุณสามารถเพิ่มเสาได้ตามปกติ
props: {
foo: {
type: String,
default: null
}
},
จากนั้นจะพร้อมใช้งานthis.foo
และคุณสามารถทำทุกอย่างที่ต้องการได้ (เช่นตั้งตัวเฝ้าดูเป็นต้น)
ณ วันที่นี้วิธีที่ถูกต้องตามเอกสารการกำหนดเส้นทางแบบไดนามิกคือ:
this.$route.params.yourProperty
แทน
this.$route.query.yourProperty
query
เพื่อรับแบบสอบถามจาก URL จากเอกสาร: นอกเหนือไปจาก $ route.params วัตถุ $ route ยังแสดงข้อมูลที่เป็นประโยชน์อื่น ๆ เช่น $ route.query (หากมีข้อความค้นหาใน URL)
คุณสามารถใช้ vue-router ฉันมีตัวอย่างด้านล่าง:
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()
}
})
หมายเหตุ:ในbeforeRouteEnter
ฟังก์ชั่นเราไม่สามารถเข้าถึงคุณสมบัติของส่วนประกอบเช่น: this.propertyName
นั่นคือเหตุผลที่ฉันได้ส่งผ่านvm
ไปยังnext
ฟังก์ชั่นมันเป็นวิธีที่แนะนำในการเข้าถึงอินสแตนซ์ vue จริงๆvm
แล้วมันหมายถึงอินสแตนซ์ vue
หาก URL ของคุณมีลักษณะดังนี้:
somesite.com/something/123
โดยที่ '123' เป็นพารามิเตอร์ชื่อ 'id' (url like / something /: id) ลองด้วย:
this.$route.params.id
คุณสามารถได้โดยใช้ฟังก์ชั่นนี้
console.log(this.$route.query.test)
หากเซิร์ฟเวอร์ของคุณใช้ php คุณสามารถทำได้:
const from = '<?php echo $_GET["from"];?>';
เพิ่งได้ผล