在vuejs的按钮中包含一个router-link标签


Answers:



58

尽管这里的答案都不错,但似乎没有一个是最简单的解决方案。经过一些快速研究,似乎使用vue-router制作按钮的最简单方法是router.push调用。可以在.vue模板中使用它,如下所示:

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

超级简单干净。我希望其他人觉得这有用!

资料来源:https : //router.vuejs.org/guide/essentials/navigation.html


3
是的,谢谢!这是最简单的,并且运行良好。而且我可以按自己的方式设计按钮的样式。如果需要使用参数,还可以执行以下操作:<button @click =“ $ router.push({name:'about',params:{id:$ route.params.id},})”>单击导航</ button>
Joe Who

46

@choasia的答案是正确的。

或者,您可以将button标签包装在标签中,router-link如下所示:

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

这不是很干净,因为您的按钮将位于l​​ink元素(<a>)内。但是,这样做的好处是您可以完全控制按钮,如果使用Bootstrap之类的前端框架,则可能需要这样做。

老实说,我从未在按钮上使用过这种技术。但是我经常在div上执行此操作...


1
另外,可以在<router-link>内指定tag =“ span”,因此它不应用<a>样式,从而可以更好地控制外观:<router-link to =“ / foo” tag =“ span”> <Button>按钮文本</ Button> </ router-link>
我们是

但是button中的单词(例如,您的示例中为“ Go!”)将带有蓝色下划线,但这并不美观……
Journey Woo

即使使用Bootstrap这样的框架,也几乎没有必要这样做,因为您可以在router-link标记中包括类之类的标准属性,当您使用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>


7

从Vue-Router 3.1.0开始,理想的方法是使用slot 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,文档现在已链接。
Jeff Hykin

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

我正在使用Vue CLI 2,而这个对我来说很有效!

<router-link to="/about-creator">
<button>About Creator</button>
</router-link>

-1

使用bootstrap-vue并在表行内创建具有id的链接的示例:

<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>

其中fieldsitems分别是列名和表内容。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.