当前位置: 首页 > 知识库问答 >
问题:

vue3 - router-view标签的奇怪用法?

艾浩广
2024-10-17

有人看得懂这个router-view 写法是什么意思吗?

我在官网并未看到类似的写法

<router-view #="{ Component, route }">
  <component :is="Component" :key="route.path" />
</router-view>

问了一下ai说是插槽结构,没看懂。vue版本是3.3,vue-router是4.0.16

共有3个答案

戚星腾
2024-10-17

image.png

羊舌高爽
2024-10-17
// 这种使用了一些简写规则,下面是这个写法的完整写法
<router-view>
 <template #default="{ Component, route }">
   <component :is="Component" :key="route.path" />
 </template>
</router-view>

#= 没有加名称默认是 #default。在只有一个默认插槽的情况下,插槽允许直接设置在组件上。插槽本质上就一个函数,{ Component, route } 这部分可以理解为函数传入的参数

都博裕
2024-10-17

在 Vue 3 和 Vue Router 4 的上下文中,你看到的 <router-view> 标签的写法确实是一个不常见的用法,并且实际上它并不是 Vue Router 官方 API 的一部分。这种写法试图通过解构插槽的 props 来访问组件和路由信息,但这并不是 <router-view> 组件直接支持的功能。

在 Vue Router 4 中,<router-view> 主要用于渲染匹配的路由组件。然而,Vue 3 引入了 Composition API 和更灵活的插槽系统(包括作用域插槽),这可能导致了一些混淆。

对于你提供的代码片段,它看起来像是尝试以某种方式访问 <router-view> 提供的默认插槽 prop,但实际上这是不正确的。<router-view> 默认不提供名为 Componentroute 的插槽 prop。这些通常是通过 Vue Router 的其他机制(如 beforeRouteEnterbeforeRouteUpdate 守卫)或直接在路由配置中定义的组件内部来访问的。

如果你想要基于路由动态渲染不同的组件,并且希望利用 Vue 3 的 <component> 组件和动态 :is 绑定,你通常不需要在 <router-view> 中这样做。相反,你可以在路由配置中直接指定组件,并在 <router-view> 之外(如果需要的话)使用 <component> 来动态渲染其他组件,但这通常与路由无关。

例如,如果你的意图是根据路由的不同部分动态渲染不同的内容,你应该在路由配置中设置不同的组件,并让 <router-view> 负责渲染这些组件。如果你需要在组件内部基于路由信息做一些事情,可以使用 Vue Router 提供的 useRoute()useRouter() 组合式 API。

如果你的目标是学习如何在 Vue 3 和 Vue Router 4 中使用作用域插槽,你可能需要查看 Vue 的官方文档中关于作用域插槽的部分,但请注意 <router-view> 并不直接支持作用域插槽来传递组件或路由信息。这些信息通常是通过其他方式(如路由守卫、路由元数据或组件内的组合式 API 调用)来访问的。

 类似资料:
  • 问题内容: 我一般对Python和编程都不熟悉,所以如果我遗漏了一些明显的东西,请提前道歉。我正在尝试绘制图形并标记轴,但是每次尝试标记y轴时都会引发异常。我在下面的新脚本中编写了代码,以确保问题不是来自模块中的其他地方。我正在使用Python 3.4。 每次,我在最后一行收到错误“ TypeError:’str’对象不可调用”。如果我将y更改为x,一切都很好。如果将x更改为ay,则会收到相同的错

  • 我有一个相当基本的登录设置(代码如下),其中一些组件需要身份验证。当我导航到http://localhost:8000/时,它会重定向到http://localhost:8000/login,一切正常。如果我随后登录,它将返回到http://localhost:8000/并显示我的主要组件。 但是,当我直接导航到http://localhost:8000/login时,它显示“不能GET/logi

  • 问题内容: 我今天看了一些Java代码,发现了一些奇怪的语法: 我以为无法编译,并想解决我认为是错字的问题,但是后来我想起Java编译器确实接受了它! 有人可以帮我理解它的意思吗?它是功能数组吗? 问题答案: 这是一个返回的方法。 Java语言规范(8.4方法声明) 为了与Java平台的较早版本兼容,允许使用返回数组的方法的声明形式(将部分或全部)空括号对放置在参数列表之后,该空括号对构成数组类型

  • 问题内容: 我有这段代码: 如您所见,我仅在columnRendered为true时才渲染该outputPanel。 好吧,在某些情况下(仅用于测试以批准其应做的事情): 为true,因此应在c:if中输入,并将columnRendered切换为false。但是事实并非如此,因此columnRendered永远是正确的… 你知道为什么吗? 问题答案: JSF和JSTL不会像您期望的那样同步运行。J

  • 本文向大家介绍React-Router的` `标签和` `标签有什么区别?相关面试题,主要包含被问及React-Router的` `标签和` `标签有什么区别?时的应答技巧和注意事项,需要的朋友参考一下 Link 组件最终会渲染为 HTML 标签 ,它的 to、query、hash 属性会被组合在一起并渲染为 href 属性。虽然 Link 被渲染为超链接,但在内部实现上使用脚本拦截了浏览器的默认

  • 这是个模糊的问题。因此,请随时询问任何具体数据。 我们有一个tomcat服务器,运行两个web服务。一个tomcat使用spring构建。90%的任务使用mysql,JSON缓存使用mongo(10%)。另一个web服务是使用grails编写的。这两项服务都是中等大小的代码库(每项约35k行代码) 计算仅在有HTTP请求(无批处理)时发生。每个请求大约有2000个数据库点击率(我知道它非常庞大,我

  • 我有以下代码来解析一个JSON文件: 要处理以下JSON文件: 如果我执行此代码,我将收到以下错误: 所以我开始一步一步地调试应用程序,看看part processing()中的哪个代码部分抛出了这个异常。令人惊讶的是,那里的所有代码都正常执行:没有抛出异常,也没有返回结果I except。 更让我惊讶的是,当我稍微改变第一种方法的代码时,它可以在不产生异常的情况下工作。 我不知道println方

  • 我使用StringTokenizer将字符串分成标记,但是每当出现在中间而没有任何时,就跳过它并取下一个标记 实际产出 想要的Outupt