3 回答
TA贡献1946条经验 获得超4个赞
更好、更干净的方法:
<router-link v-if="type === 'internal' :to="link">
<slot />
</router-link>
<a v-else :ref="link"> <slot /> </a>
您可以v-if在根元素中使用,这样它就可以解决您的问题
或者您可能只是错过了路径部分?
<component
:is="type === 'internal' ? 'router-link' : 'a'"
:to="type === 'internal' ? { path: link } : null"
:href="type !== 'internal' ? link : null"
>
<slot />
</component>
TA贡献1757条经验 获得超8个赞
...不同之处在于
<router-link>
版本将为链接提供 SPA 功能(即不加载新页面,它动态呈现组件)。
通过不加载新页面,我想您的意思是它不会重新加载页面。是的,事实并非如此,因为onclick
处理程序实际上被分配给一个函数,该函数在将新条目推入历史堆栈时执行preventDefault
(防止页面重定向)。
如果您查看API 参考<router-link>
,您会发现最引人注目的事情是它active-class
根据活动/当前路线在 es 之间切换。
因此,话虽这么说,您可以通过 ; 在默认插槽内进行动态nchor<a>
渲染。因为此时,slot 属性将是一个已解析的 URL,然后您可以将其安全地绑定到 DOM属性。v-slot
href
href
编辑
添加了一个示例(未经测试)。
<router-link
:to="link"
v-slot="{ href, route, navigate, isActive, isExactActive }">
<a
:class="isActive ? 'your-custom-class' : 'anything'"
:href="type !== 'internal' ? href : 'javascript:void(0);'"
@click="customNavigate(navigate.bind($event))">
<slot></slot>
</a>
</router-link>
处理程序customNavigate可能类似于:
{
methods: {
customNavigate(navigate) {
if (this.type === 'internal') {
navigate();
return false;
}
}
}
}
您基本上可以根据插槽属性在组件内锚标记上添加任何属性,例如以某些方式导航,添加特殊类,具体取决于您的用例。
- 3 回答
- 0 关注
- 119 浏览
添加回答
举报