将路由器链接标记包含在vuejs中的按钮中

Kus*_*wal 52 button vue.js vue-router

我可以在router-link标签中包装或附加button标签吗?

当我按下按钮时,我希望它将我转到所需的页面.

cho*_*sia 96

你可以使用tag道具.

<router-link to="/foo" tag="button">foo</router-link>
Run Code Online (Sandbox Code Playgroud)

  • 如果该按钮接受一些道具怎么办?如何把它们传出去? (5认同)

Bad*_*bra 39

@choasia的回答是正确的.

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

<router-link :to="{name: 'myRoute'}">
  <button id="myButton" class="foo bar">Go!</button>
</router-link>
Run Code Online (Sandbox Code Playgroud)

这不是那么干净,因为你的按钮将在一个link元素(<a>)内.但是,优点是您可以完全控制按钮,如果您使用Bootstrap等前端框架,则可能需要这样做.

说实话,我从未在按钮上使用过这种技术.但我经常在div上做这个...


小智 33

虽然这里的答案都很好,但似乎没有一个是最简单的解决方案.经过一些快速的研究,似乎使按钮使用vue-router的真正最简单的方法就是router.push调用.这可以在.vue模板中使用,如下所示:

<button @click="$router.push('about')">Click to Navigate</button>
Run Code Online (Sandbox Code Playgroud)

超级简单干净.我希望别人觉得这很有用!

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

  • 请注意,此答案不允许使用浏览器支持的功能,例如按 Ctrl+Click 在新选项卡中打开链接或在浏览器窗口左下角预览链接。 (4认同)
  • 是的,谢谢!这是最简单的,并且运行良好。而且我可以按自己的方式设计按钮的样式。如果需要使用参数,还可以执行以下操作:&lt;button @click =“ $ router.push({name:'about',params:{id:$ route.params.id},})”&gt;点击导航&lt;/ button&gt; (2认同)

Joe*_*Who 13

感谢 Wes Winder 的回答,并将其扩展为包含路由参数:

<button @click="$router.push({name: 'about-something', params: { id: 'abc123' },})">Click to Navigate</button>
Run Code Online (Sandbox Code Playgroud)

并重申 Wes 提供的来源:https : //router.vuejs.org/guide/essentials/navigation.html


Jef*_*kin 9

从 Vue-Router 3.1.0 开始,理想的方法是使用 slot api。
文档在这里

@choasia 的答案不允许将道具传递给组件
@Badacadabra 的答案会导致 CSS 问题,尤其是如果按钮来自库(例如:添加边距或定位)

以下是该解决方案如何与插槽 API 配合使用

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


Anu*_*uga 7

现在几天(VueJS> = 2.x)你会做:

<router-link tag="button" class="myClass" id="button" :to="place.to.go">Go!</router-link>
Run Code Online (Sandbox Code Playgroud)