
1 fengxianqi 2020-10-16 09:33:47 +08:00 如果没有终止条件不就无限引用了?建议可以从设计上调整这种嵌套策略 |
2 faceRollingKB 2020-10-16 09:33:58 +08:00 额,A 、B 都注册到全局可以渲染么?我遇到过更奇葩的问题,同一个组件在 A 里面可以渲染,但在有弹窗的 B 里面无法渲染,去掉弹窗和注册到全局都可以解决 |
3 duanxianze 2020-10-16 09:41:50 +08:00 全局注册 不过出现这种情况说明设计思路有问题 |
4 murongxdb 2020-10-16 09:42:15 +08:00 这不是循环引用了吧,这样的代码是很可怕的,建议不要这样写 |
5 LongMaoz 2020-10-16 09:43:13 +08:00 你用一面镜子对着另一面镜子? |
6 dinggk OP 谢谢各位! 解释一下应用场景: 组件 A 是一个 Grid 列表组件, 组件 B 是一个 表单组件。 列表组件中包含 B 组件用于编辑, 表单组件 B 中又会引用 A 显示一个 Grid 列表。 我觉得这个设计不算很特殊吧? |
7 Ritr 2020-10-16 10:00:02 +08:00 这属于循环引用了,设计上应该规避掉 |
8 otakustay 2020-10-16 10:07:17 +08:00 其实挺常见的不是,比如说: 1. 用户列表可以通过 subrow 展开用户的详细信息( UserList -> UserInfo ) 2. 用户信息里要展示一个关联用户的列表( UserInfo -> UserList ) |
9 SoulDee 2020-10-16 10:08:34 +08:00 你说的依赖只是在页面逻辑上存在列表嵌套表单,表单又嵌套列表。通过插槽来写应该是没有问题的,但是你的设计是直接将嵌套集成到组件当中了。 我说的再清楚点。你的设计是下面这样,也就是实际就用了组件 A 组件 A (包含了组件 B ),组件 B (包含了组件 A ); 应用: <A></A> 插件化,嵌套是在外层使用,而不是集成到组件中 组件 A (仅提供 grid 容器,有 slot 插槽),组件 B (仅提供表单容器和相应表单逻辑,有 slot 插槽) 应用: <A> <B> <A><B></B></A> </B> </A> |
11 yaphets666 2020-10-16 10:23:23 +08:00 循环引用多出现在制作"菜单"组件的时候,注意一定要有出口.也就是终止循环引用的条件. 理论上循环引用是没有问题的.也不是设计错误.反而是一种高阶技巧. |
12 lin07hui 2020-10-16 10:43:16 +08:00 使用 A2 渲染也是不正常,会报 [Vue warn]: Failed to resolve component: B at <A2> at <B> at <A> at <App> ,说明在 A2 时不会去渲染 B 。 我想你要的结果是:A 中有 B,B 中 A2,A2 中不需要 B 。 方法:列表组件不需要引用表单组件,使用 slot 渲染。表单组件引用列表组件。再添加一个可编辑列表组件,这个组件引用列表组件和表单组件 |
13 no1xsyzy 2020-10-16 10:50:42 +08:00 不就是递归吗?有什么可怕的? 强耦合不要分文件(甚至不要分两个组件,直接调用自己就成了) 弱耦合用插槽化把递归提升到父层 |
14 Hilong 2020-10-16 10:59:39 +08:00 via iPhone 注意递归的结束条件就行了,肯定要有个约束的啊 |
15 fool079 2020-10-16 11:29:46 +08:00 这种注册为全局组件就可以了 |
16 HugoV 2020-10-16 11:35:13 +08:00 可以试试异步引入 components: { A: () => import('A.vue') } 这样的写法 |
17 feilaoda 2020-10-16 11:53:05 +08:00 <A><slot></slot></A> <B><slot></slot></B> 不应该这样设计么?管你嵌套不嵌套呢 |
18 ddllzz 2020-10-16 13:03:11 +08:00 #16 是可行的 |
19 aheadin 2020-10-16 13:05:18 +08:00 via iPhone 嵌套组件选择器:>>> 不推荐多用 |