การเปลี่ยนเส้นทาง Vue.js ไปยังหน้าอื่น


134

ฉันต้องการเปลี่ยนเส้นทางVue.jsให้คล้ายกับจาวาสคริปต์วานิลลา

window.location.href = 'some_url'

ฉันจะบรรลุสิ่งนี้ใน Vue.js ได้อย่างไร


คุณหมายถึงการเปลี่ยนเส้นทางไปยังเส้นทางที่กำหนดใน vue router '/ my / vuerouter / url' หรือไม่? หรือคุณเบราว์เซอร์เปลี่ยนเส้นทางไปที่some-url.com ?
hitautodestruct

คำตอบ:


189

หากคุณกำลังใช้vue-routerคุณควรใช้router.go(path)เพื่อนำทางไปยังเส้นทางใดเส้นทางหนึ่ง this.$routerเราเตอร์สามารถเข้าถึงได้จากภายในโดยใช้องค์ประกอบ

มิฉะนั้นจะwindow.location.href = 'some url';ทำงานได้ดีสำหรับแอปที่ไม่ใช่หน้าเดียว

แก้ไข : router.go()เปลี่ยนแปลงใน VueJS 2.0 คุณสามารถใช้router.push({ name: "yourroutename"})หรือrouter.push("yourroutename")ตอนนี้เพื่อเปลี่ยนเส้นทาง

https://router.vuejs.org/guide/essentials/named-routes.html


2
ในกรณีของฉันการใช้งานคือการนำไปยังหน้าอื่นที่ไม่ใช่หน้าเดียว
Jimmy Obonyo Abor

8
ฉันได้รับ: Uncaught ReferenceError: router is not definedข้อผิดพลาดจะฉีดเราเตอร์ในส่วนประกอบได้อย่างไร
Saurabh

@felipekm อะไรนะ นั่นคือสิ่งเดียวกันไม่ใช่หรือ?
Barry D.

3
router.push ("yourroutename") ไม่เหมือนกับ router.push ({name: "yourroutename") อันดับแรกกำหนดเส้นทางโดยตรง เส้นทางที่สองใช้เส้นทางด้วยชื่อที่ระบุ
pinki

8
this.$router.push('routename)
ka_lin

85

ตามเอกสาร router.push ดูเหมือนจะเป็นวิธีที่ต้องการ:

หากต้องการไปยัง URL อื่นให้ใช้ router.push วิธีนี้จะผลักรายการใหม่ไปยังกองประวัติดังนั้นเมื่อผู้ใช้คลิกปุ่มย้อนกลับของเบราว์เซอร์ระบบจะนำไปที่ URL ก่อนหน้า

แหล่งที่มา: https://router.vuejs.org/en/essentials/navigation.html

FYI: การตั้งค่า Webpack & ส่วนประกอบแอพหน้าเดียว (ที่คุณนำเข้าเราเตอร์ผ่าน Main.js) ฉันต้องเรียกใช้ฟังก์ชันเราเตอร์โดยพูดว่า:

this.$router

ตัวอย่าง: หากคุณต้องการเปลี่ยนเส้นทางไปยังเส้นทางที่เรียกว่า "บ้าน" หลังจากตรงตามเงื่อนไข:

this.$router.push('Home') 

1
คำถามนี้ไม่เกี่ยวข้องกับการรวบรวม (webpack)
Jimmy Obonyo Abor

12
ขอขอบคุณสำหรับการโหวตลดลงแม้ว่าคนส่วนใหญ่จะพัฒนาด้วย vue cli, webpack, router และ store / vuex และอาจประสบปัญหาไม่สามารถเรียกเราเตอร์ได้
Dave Sottimano

1
@JimmyObonyoAbor hiyo comment na downvote utasema unamlipa haha
Cholowao

@ Cholowao เขาเขา Sawa tushasikia! ฉันได้รับการตอบสนอง kazi ping ฉันถ้าคุณมีทักษะ ...
Jimmy Obonyo Abor

1
@JimmyObonyoAbor
Cholowao

43

เพียงใช้:

window.location.href = "http://siwei.me"

อย่าใช้ vue-router มิฉะนั้นคุณจะถูกเปลี่ยนเส้นทางไปที่ " http://yoursite.com/#!/http://siwei.me "

สภาพแวดล้อมของฉัน: โหนด 6.2.1, vue 1.0.21, Ubuntu


1
ฉันไม่เห็นเหตุผลใด ๆ ว่าทำไมจึงควรเป็นเครื่องหมายคำพูดคู่ .. ?
Moritz

1
จริงๆแล้วstandardjsพูดว่า "ใช้เครื่องหมายคำพูดเดี่ยวสำหรับสตริงยกเว้นเพื่อหลีกเลี่ยงการหนี
Moritz

นี่เป็นเวลาที่ผ่านมา แต่จริงๆแล้วฉันแก้ไขปัญหานี้โดยใช้เครื่องหมายคำพูดเดี่ยว แต่ฉันเดาว่าเครื่องหมายคำพูดคู่น่าจะใช้ได้เช่นกันและอาจมีประโยชน์ในลิงก์ที่ซับซ้อน
Jimmy Obonyo Abor

ตรวจสอบเวอร์ชัน vue ก่อน ในเวอร์ชันแรกอาจจะไม่สนใจแบบแผนของโค้ด อย่างไรก็ตามในสภาพแวดล้อมของฉันการประชุมโค้ดจะทำให้เกิดข้อผิดพลาดในการคอมไพล์ (จาก es6 ที่คอมไพล์เป็น vanilla js) หากคุณไม่ได้ใช้โมดูลโหนด 'ES6' อาจจะใช้ได้
Siwei Shen 申思维

แล้วถ้าคุณต้องการเปิดในแท็บใหม่ล่ะ?
Fthi.a.Abadi

29

เมื่ออยู่ในแท็กสคริปต์คอมโพเนนต์คุณสามารถใช้เราเตอร์และทำสิ่งนี้ได้

this.$router.push('/url-path')

ขอบคุณคนง่ายและตรงไปตรงมา
Solution Spirit



7

หากคุณต้องการกำหนดเส้นทางไปยังหน้าอื่น this.$router.push({path: '/pagename'})

หากคุณต้องการกำหนดเส้นทางด้วย params this.$router.push({path: '/pagename', param: {param1: 'value1', param2: value2})



3

คุณยังสามารถใช้ v-bind กับเทมเพลตโดยตรงเช่น ...

<a :href="'/path-to-route/' + IdVariable">

เป็นคำย่อของ:v-bind


นอกจากนี้คุณยังสามารถใช้ ES6 ไวยากรณ์: href =" `/path-to-route/${IdVariable}`" หรือเส้นทางที่มีชื่อเป็นที่นี่เรียกว่า ( router.vuejs.org/guide/essentials/named-routes.html ): :href="{ name: 'NamedRouteDeclaredAtRouter' , params: { id: idValue } }"
เม่น

1

หากใครต้องการเปลี่ยนเส้นทางแบบถาวรจากเพจหนึ่ง/aไปอีกเพจ/b


เราสามารถใช้redirect:ตัวเลือกที่เพิ่มในไฟล์router.js. ตัวอย่างเช่นหากเราต้องการเปลี่ยนเส้นทางผู้ใช้ไปยังเพจอื่นเสมอเมื่อเขาพิมพ์ root หรือ base url /:

const router = new Router({
  mode: "history",
  base: process.env.BASE_URL,
  routes: [
    {
      path: "/",
      redirect: "/someOtherPage",
      name: "home",
      component: Home,
      // () =>
      // import(/* webpackChunkName: "home" */ "./views/pageView/home.vue"),

    },
   ]

0
<div id="app">
   <a :href="path" />Link</a>
</div>

<script>
      new Vue({
        el: '#app',
        data: {
          path: 'https://www.google.com/'
        }
      });
</script> enter code here

0

ดังนั้นสิ่งที่ฉันกำลังมองหามีเพียงที่ที่จะใส่window.location.hrefและข้อสรุปที่ฉันได้มาก็คือวิธีที่ดีที่สุดและเร็วที่สุดในการเปลี่ยนเส้นทางคือในเส้นทาง (ด้วยวิธีนี้เราไม่รอให้สิ่งใดโหลดก่อนที่จะเปลี่ยนเส้นทาง)

แบบนี้:

routes: [
    {
        path: "/",
        name: "ExampleRoot",
        component: exampleComponent,
        meta: {
            title: "_exampleTitle"
        },
        beforeEnter: () => {
            window.location.href = 'https://www.myurl.io';
        }
    }]

บางทีมันอาจจะช่วยใครสักคน ..


0

เพื่อให้สอดคล้องกับคำขอเดิมของคุณ:

window.location.href = 'some_url'

คุณสามารถทำสิ่งนี้:

<div @click="this.window.location='some_url'">
</div>

โปรดทราบว่าสิ่งนี้ไม่ได้ใช้ประโยชน์จากการใช้เราเตอร์ของ Vue แต่ถ้าคุณต้องการ "ทำการเปลี่ยนเส้นทางใน Vue.js คล้ายกับ vanilla javascript" สิ่งนี้จะได้ผล

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.