<template> <component :is="type" v-bind="linkProps(to)"> <slot /> </component> </template> <script> import { isExternal } from '@/utils/validate' export default { props: { to: { type: String, required: true } }, computed: { isExternal() { return isExternal(this.to) }, type() { if (this.isExternal) { return 'a' } return 'router-link' } }, methods: { linkProps(to) { if (this.isExternal) { return { href: to, target: '_blank', rel: 'noopener' } } return { to: to } } } } </script>这段代码为什么会刷新页面
时间: 2023-12-06 13:44:22 浏览: 83
这段代码本身不会刷新页面。但是,如果在使用这个组件的时候传入的 `to` 属性值是一个外部链接地址,而不是 Vue Router 中定义的路由路径,那么点击这个链接时就会直接跳转到该链接地址,而不是通过 Vue Router 进行路由跳转。
这种情况下会导致页面刷新,因为浏览器会重新向服务器发送请求,获取新的页面内容。如果要避免这种情况,可以在链接上添加 `prevent` 修饰符,或者使用 `@click.prevent` 阻止默认行为,以便通过 Vue Router 进行路由跳转。例如:
```html
<template>
<component :is="type" v-bind="linkProps(to)" @click.prevent>
<slot />
</component>
</template>
```
相关问题
<template> <component :is="type" v-bind="linkProps"> <slot /> </component> </template>
这是一个 Vue.js 的单文件组件的模板,其中包含一个动态组件,它根据传入的 `type` 属性来动态渲染不同的子组件。同时,通过 `v-bind` 指令将 `linkProps` 对象中的所有属性绑定到子组件上,使得子组件可以接收到这些属性。最后,`<slot />` 表示一个匿名插槽,用于在父组件中插入子组件的内容。
<component :is="listComponent" v-bind:gridConfig="gridConfig" @formCreateMethod="createDialog" ref="abc" > <template #card="{ row }"> <i v-if="row.CardId != null" class="vxe-icon-check" style="color: var(--el-color-success)" ></i> <i v-else class="vxe-icon-close" style="color: var(--el-color-error)" ></i> </template> </component>组件上定义的插槽如何映射到组件内的vxe-grid上<template> <vxe-grid :ref="gridId" :id="gridId" v-bind="gridOptions" @cell-menu="cellContextMenuEvent" v-on:menu-click="contextMenuClickEvent" v-on:toolbar-button-click="toolbarToolClickEvent" :loading="loading" class="mytable-scrollbar" align="center" > <!-- 这里是插槽位置 --> </vxe-grid> </template>
要将父组件中定义的插槽映射到`<vxe-grid>`组件内部,你可以使用`<slot>`标签来接收插槽内容,并将其放置在`<vxe-grid>`组件的适当位置。
在你的封装组件中,可以将父组件中的`#card`插槽映射到`<vxe-grid>`组件的合适位置。例如,你可以这样修改封装组件的模板:
```html
<template>
<div>
<vxe-grid
:ref="gridId"
:id="gridId"
v-bind="gridOptions"
@cell-menu="cellContextMenuEvent"
v-on:menu-click="contextMenuClickEvent"
v-on:toolbar-button-click="toolbarToolClickEvent"
:loading="loading"
class="mytable-scrollbar"
align="center"
>
<!-- 插槽位置 -->
<template #card="{ row }">
<i
v-if="row.CardId != null"
class="vxe-icon-check"
style="color: var(--el-color-success)"
></i>
<i
v-else
class="vxe-icon-close"
style="color: var(--el-color-error)"
></i>
</template>
</vxe-grid>
</div>
</template>
```
通过以上代码,父组件中定义的`#card`插槽内容会被动态插入到封装组件中的`<vxe-grid>`组件内部。
请注意,这里假设`#card`插槽是在父组件中定义并使用的。你可以根据实际情况修改插槽名称和用法。
阅读全文
相关推荐
![zip](https://img-home.csdnimg.cn/images/20241231045053.png)
![pdf](https://img-home.csdnimg.cn/images/20241231044930.png)
![pdf](https://img-home.csdnimg.cn/images/20241231044930.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![-](https://img-home.csdnimg.cn/images/20241226111658.png)
![-](https://img-home.csdnimg.cn/images/20241226111658.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)