Включення тегу посилання маршрутизатора в кнопку у vuejs


82

Чи можу я обернути або вкласти router-linkтег у buttonтег?

Коли я натискаю кнопку, я хочу, щоб вона спрямовувала мене на потрібну сторінку.


Для відповідей в 2019 році і єт Router 3.1.0+, перейдіть для уточнених ВАРІАНТІВ ВІДПОВІДІ stackoverflow.com/a/58495529/90674
sshow

Відповіді:


139

Ви можете використовувати tagprop .

<router-link to="/foo" tag="button">foo</router-link>

6
Що робити, якщо ця кнопка приймає деякі реквізити? Як їх видати?
andcl

1
@andcl У мене було те саме запитання, я розмістив відповідь нижче, яку мені повідомила команда Vue-Router на GitHub тут: github.com/vuejs/vue-router/issues/3003
Джефф Хікін

1
я намагався висловити свою позицію майже через рік після того, як вже зробив! akkk ще раз спасибі
Акін Хван

64

Хоча відповіді тут добрі, жодне, здається, не є найпростішим рішенням. Після деяких швидких досліджень, здається, що найпростіший спосіб зробити кнопку за допомогою vue-router - це router.pushдзвінок. Це можна використовувати в шаблоні .vue таким чином:

<button @click="$router.push('about')">Click to Navigate</button>

Супер простий і чистий. Сподіваюсь, комусь ще це стане в нагоді!

Джерело: https://router.vuejs.org/guide/essentials/navigation.html


4
Так дякую! Це було найпростіше і працювало чудово. І я міг стилізувати свою кнопку, як я вибрав. Якщо вам потрібно використовувати параметри, ви також можете зробити щось подібне: <button @click = "$ router.push ({name: 'about', params: {id: $ route.params.id},})"> Клацніть для навігації </button>
Джо Хто,

44

Відповідь @choasia правильна.

Як варіант, ви можете обернути buttonтег у router-linkтег приблизно так:

<router-link :to="{name: 'myRoute'}">
  <button id="myButton" class="foo bar">Go!</button>
</router-link>

Це не так чисто, тому що ваша кнопка буде всередині елемента посилання ( <a>). Однак перевага полягає в тому, що ви маєте повний контроль над кнопкою, що може знадобитися, якщо ви працюєте з інтерфейсним фреймворком, таким як Bootstrap.

Чесно кажучи, я ніколи не використовував цю техніку на кнопках. Але я робив це на divs досить часто ...


1
Крім того, можна вказати tag = "span" всередині <router-link>, щоб він не застосовував <a> стилі, що дає ще кращий контроль за зовнішнім виглядом: <router-link to = "/ foo" tag = "span"> <Button> Текст кнопки </Button> </router-link>
вір, США,

Але слова на кнопці (наприклад, "Іди!" У вашому прикладі) матимуть блакитне підкреслення, що не красиво ...
Подорож Ву

Навіть з такими фреймворками, як Bootstrap, це навряд чи коли-небудь потрібно, тому що ви можете включити стандартні атрибути, як клас, прямо в тег посилання маршрутизатора, і вони будуть застосовані до візуалізованого елемента, навіть кнопки, коли ви використовуєте tag = "button" : <router-link tag = "button" class = "btn btn-primary" to = "..."> </router-link>
Ciabaros


9

Зараз днів (VueJS> = 2.x) ви б зробили:

<router-link tag="button" class="myClass" id="button" :to="place.to.go">Go!</router-link>

8

Починаючи з Vue-Router 3.1.0, ідеальним способом є використання слотів api.
Документація тут

Відповідь @ choasia не дозволяє передавати реквізит компоненту
@ Відповідь Badacadabra викликає проблеми з кнопками бібліотеки (наприклад, поля кнопок)

Ось як це рішення буде працювати з API слотів

<router-link
  to="/about"
  v-slot="{href, route, navigate}"
  >
    <button :href="href" @click="navigate" class='whatever-you-want'>
      {{ route.name }}
    </button>
</router-link>

1
Якщо ви не використовуєте версію> = 3.1.0, елемент у слоті буде ігноруватися мовчки без помилок. Посилання на документи: router.vuejs.org/api/#v-slot-api-3-1-0
sshow

я не можу завантажити 3.1.0, там сказано, що остання версія - 3.0.0 rc
The Fool

Це не Vue 3.1.0, це vue-router 3.1.0.
Ануга

Спасибі @Anuga, виправлено 👍 І спасибі @ sshow, документація зараз пов’язана
Джефф Хікін

3

Методи маршрутизації з використанням методу, а також маршрутизація 1. Посилання маршрутизатора

<router-link to="/login">Login </router-link>

  1. При натисканні на кнопку цього типу викликайте інший маршрут.
<template>
    <input type="submit" value="Login" @click="onLogIn" class="btn float-right btn-primary">
    </template>
<script>
export default {
    name:'auth',
    data() {
        return {}
    },
    methods: {
        onLogIn() {
            this.$router.replace('/dashboard');
        }
    }
}


0
    // literal string path
router.push('home')

// object
router.push({ path: 'home' })

// named route
router.push({ name: 'user', params: { userId: '123' } })

// with query, resulting in /register?plan=private
router.push({ path: 'register', query: { plan: 'private' } })

-1

Приклад використання bootstrap-vue та створення посилання з ідентифікатором всередині рядка таблиці:

<b-table :fields="fields" :items="items">
    <template v-slot:cell(action)="data">
        <router-link :to="`/rounds/${data.item.id}`" v-slot="{ href, route, navigate}">
            <b-button :href="href" @click="navigate" color="primary" style="text">{{ data.item.id }}</b-button>
        </router-link>
    </template>
</b-table>

Де fieldsі items- назви стовпців та вміст таблиці відповідно.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.