vue.js - vue router-link 上的 href 链接
问题描述
我在组件上有一些动态呈现的文本router-link
。代码是这样的:
<router-link :to="object.link" tag="div">
<span v-html="object.text"/>
</router-link>
object: {
link: "home",
text: "Click here to go to my homepage. Don't want that? Go to <a href="google.com">Google</a> instead."
}
如预期的那样,单击div
/router-link
将导航到对象的链接。但是,单击锚字“Google”也会导航到对象的链接,而不是预期的href
.
我希望行为是:
- 单击
div
或文本 -> 导航到对象链接 - 单击
a
标签->导航到a
参考
我可以通过停止点击传播来实现第二个span
,但是点击非a
标签文本不会激活router-link
. 我怎样才能实现这两种行为?
解决方案
在调用事件目标的包装器上应用click
-handler :span
Event.stopPropagation
a
<template>
<router-link :to="object.link" tag="div">
<span @click="onWrapperClick" v-html="object.text" />
</router-link>
</template>
<script>
export default {
//...
methods: {
onWrapperClick(e) {
if (e.target.tagName === 'A') {
e.stopPropagation()
}
}
}
}
</script>
const Home = {
template: '#home'
}
const LinkDemo = {
template: '#linkDemo',
data() {
return {
object: {
link: '/',
text: `Click here to go to my homepage. Don't want that? Go to <a href="https://stackoverflow.com">StackOverflow</a> instead.`
}
}
},
methods: {
onWrapperClick(e) {
if (e.target.tagName === 'A') {
e.stopPropagation()
}
}
}
};
const routes = [
{ path: '', component: Home },
{ path: '/demo', component: LinkDemo }
]
const router = new VueRouter({
routes
});
new Vue({
router
}).$mount('#app');
<script src="https://unpkg.com/vue@2.6.10"></script>
<script src="https://unpkg.com/vue-router@3.1.3"></script>
<script type="text/x-template" id="home">
<div>
<h2>Home</h2>
<ul>
<li>
<router-link to="/demo">External Link Demo</router-link>
</li>
</ul>
</div>
</script>
<script type="text/x-template" id="linkDemo">
<div>
<h2>External Link Demo</h2>
<ul>
<li>
<router-link :to="object.link" tag="div">
<span @click="onWrapperClick" v-html="object.text" />
</router-link>
</li>
</ul>
</div>
</script>
<div id="app">
<router-view></router-view>
</div>
推荐阅读
- php - AwsS3Adapter 异常出现在本地但不在开发服务器中
- firebase - 如何打印有意义的 firebase-dart 异常
- python - 在 MultinomialNB 中选择重要特征时出错
- sql - 如何重复字符串中的字符
- javascript - 在 React 中设置选定值的选项标签
- sql-server - 如何在登录 SQL 触发器中获取数据库名称
- mysql - 需要获取日期,并获取从 mysql 预订了多少小时的日期
- r - 如何计算与给定数据表匹配的序列分数与开始和结束坐标?
- c# - 继承的类对象不显示基类方法
- swift - 使用 <-map["xx"] 时如何将 json 对象映射到字符串