Chuyển hướng Vue.js sang trang khác


133

Tôi muốn thực hiện chuyển hướng Vue.jstương tự như javascript vanilla

window.location.href = 'some_url'

Làm cách nào tôi có thể đạt được điều này trong Vue.js?


Bạn có nghĩa là chuyển hướng đến một tuyến đường được xác định trong bộ định tuyến vue '/ my / vuerouter / url'? Hay bạn chuyển hướng trình duyệt đến some-url.com ?
hitautodesturation

Câu trả lời:


187

Nếu bạn đang sử dụng vue-router, bạn nên sử dụng router.go(path)để điều hướng đến bất kỳ tuyến đường cụ thể nào. Các bộ định tuyến có thể được truy cập từ trong một thành phần bằng cách sử dụng this.$router.

Mặt khác, window.location.href = 'some url';hoạt động tốt cho các ứng dụng không một trang.

EDIT : router.go()đã thay đổi trong VueJS 2.0. Bạn có thể sử dụng router.push({ name: "yourroutename"})hoặc chỉ router.push("yourroutename")bây giờ để chuyển hướng.

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


2
Trong trường hợp của tôi, việc sử dụng là để chuyển đến một trang không đơn khác
Jimmy Obonyo Abor 27/2/2016

8
Tôi đã nhận được: Uncaught ReferenceError: router is not definedlỗi, Làm thế nào để tiêm bộ định tuyến trong thành phần?
Saurabh

@felipekm gì? Đó không phải là điều tương tự sao?
Barry D.

3
router.push ("yourroutename") KHÔNG giống với router.push ({name: "yourroutename"). Đầu tiên xác định tuyến đường trực tiếp. Cái thứ hai lấy tuyến đường với tên được chỉ định.
Pinki

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

84

Theo các tài liệu, router.push có vẻ như là phương pháp ưa thích:

Để điều hướng đến một URL khác, hãy sử dụng bộ định tuyến. Phương pháp này đẩy một mục mới vào ngăn xếp lịch sử, vì vậy khi người dùng nhấp vào nút quay lại của trình duyệt, họ sẽ được đưa đến URL trước đó.

nguồn: https://router.vuejs.org/en/essentials/navlation.html

FYI: Webpack & thiết lập thành phần, ứng dụng một trang (nơi bạn nhập bộ định tuyến qua Main.js), tôi đã phải gọi các chức năng của bộ định tuyến bằng cách nói:

this.$router

Ví dụ: nếu bạn muốn chuyển hướng đến một tuyến đường gọi là "Nhà" sau khi một điều kiện được đáp ứng:

this.$router.push('Home') 

1
Câu hỏi này không liên quan gì đến việc biên dịch (webpack).
Jimmy Obonyo Abor

12
Cảm ơn về downvote, mặc dù hầu hết mọi người sẽ phát triển với vue cli, webpack, bộ định tuyến và store / vuex và có thể sẽ gặp phải vấn đề không thể gọi bộ định tuyến.
Dave Sottimano

1
@JimmyObonyoAbor hiyo bình luận na downvote utasema unamlipa haha
Cholowao

@Cholowao he he he, sawa tushasikia! tôi đã có một phản ứng kazi, ping tôi nếu bạn có kỹ năng ...
Jimmy Obonyo Abor

1
@JimmyObonyoAbor
Cholowao

41

chỉ dùng:

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

Không sử dụng bộ định tuyến vue, nếu không, bạn sẽ được chuyển hướng đến " http://yoursite.com/#!/http://siwei.me "

môi trường của tôi: nút 6.2.1, vue 1.0.21, Ubuntu.


1
Tôi không thấy bất kỳ lý do, tại sao điều này nên được trích dẫn đôi ..?
Moritz

1
Trên thực tế, Standardjs nói "Sử dụng dấu ngoặc đơn cho các chuỗi ngoại trừ để tránh thoát."
Moritz

điều này đã được một thời gian trước đây nhưng tôi thực sự đã giải quyết điều này bằng cách sử dụng dấu ngoặc đơn, nhưng tôi đoán dấu ngoặc kép cũng sẽ hoạt động và có thể hữu ích trong các liên kết phức tạp.
Jimmy Obonyo Abor

kiểm tra phiên bản vue đầu tiên. trong phiên bản đầu, có lẽ vue không quan tâm đến quy ước mã. Tuy nhiên, trong môi trường của tôi, quy ước mã sẽ gây ra lỗi biên dịch (từ es6 được biên dịch sang vanilla js). Nếu bạn chưa sử dụng mô-đun nút 'ES6', có thể nó sẽ ổn.
Siwei Shen

Điều gì nếu bạn muốn mở nó trên một tab mới?
Fthi.a.Abadi

29

Khi bên trong thẻ script thành phần, bạn có thể sử dụng bộ định tuyến và làm một cái gì đó như thế này

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

Cảm ơn người đàn ông, đơn giản và thẳng về phía trước.
Giải pháp Spirit



6

nếu bạn muốn định tuyến đến một trang khác this.$router.push({path: '/pagename'})

nếu bạn muốn định tuyến với params this.$router.push({path: '/pagename', param: {param1: 'value1', param2: value2})


5
window.location = url;

'url' là url web bạn muốn chuyển hướng.


3

Bạn cũng có thể sử dụng liên kết v trực tiếp vào mẫu như ...

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

những :là viết tắt của v-bind.


Bạn cũng có thể sử dụng Cú pháp ES6: href = " `/path-to-route/${IdVariable}`" Hoặc tuyến đường được đặt tên như được giới thiệu ở đây ( router.vuejs.org/guide/essentials/named-routes.html ): :href="{ name: 'NamedRouteDeclaredAtRouter' , params: { id: idValue } }"
mEnE

1

Nếu ai muốn chuyển hướng vĩnh viễn từ trang này /asang trang khác/b


Chúng ta có thể sử dụng redirect:tùy chọn được thêm vào trong router.js. Ví dụ: nếu chúng tôi muốn chuyển hướng người dùng luôn đến một trang riêng khi anh ta nhập url gốc hoặc url cơ sở /:

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

Vì vậy, điều tôi đang tìm kiếm chỉ là nơi đặt window.location.hrefvà kết luận mà tôi đã đưa ra là cách tốt nhất và nhanh nhất để chuyển hướng là trong các tuyến đường (theo cách đó, chúng tôi không chờ đợi bất cứ điều gì tải trước khi chúng tôi chuyển hướng).

Như thế này:

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

Có lẽ nó sẽ giúp được ai đó ..


0

Để phù hợp với yêu cầu ban đầu của bạn:

window.location.href = 'some_url'

Bạn có thể làm một cái gì đó như thế này:

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

Lưu ý rằng điều này không tận dụng lợi thế của việc sử dụng bộ định tuyến của Vue, nhưng nếu bạn muốn "thực hiện chuyển hướng trong Vue.js tương tự như javascript vanilla", điều này sẽ hoạt động.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.