vue-循环引用感想

news/2025/1/8 19:28:40/

vue-循环引用感想

  • 开场-什么是循环引用
  • 探讨-怎么用
  • 后话
    • 如果我们要在主组件中传方法到子组件呢
      • 普通的porps传参
      • 依赖注入

开场-什么是循环引用

刚开始看着这个官方文档上的循环引用十分的不解,意思是什么呢?看着官网的意思,大概举了个文件管理器类似的实现
在这里插入图片描述
我们可以将A组件看成可以展开的,B组件的话通过判断数据下是否还有children,有的话就又是A组件,否则就是B组件了,以此类推。

本来循环引用就是这种的,不过工作中可能自己没写出来过的也。简单概括为:A组件导入了B组件,B组件导入了C组件,C组件又导入了B组件。、C组件互为对方的子组件和父组件,互相依赖,不知道如何不经过其中一个组件而完全解析出另一个组件。

探讨-怎么用

直接调用循环嵌套会有问题的。

<!-- 主组件吧 -->
<template><div class='app-container'><comA></comA></div>
</template><script>
import comA from './comA.vue'
export default {components: {comA},
}</script><!-- A组件 -->
<template><div>111<comB></comB></div>
</template><script>
import comB from './comB.vue';
export default {components: {comB}
</script><!-- B组件 -->
<template><div><comA></comA></div>
</template><script>
import comA from './comA.vue';
export default {components: {comA},
}
</script>

理论上应该也是可以的
在这里插入图片描述
报错了结果,看报错貌似是name的问题,于是把A,B组件都加上了name
在这里插入图片描述
你也可能遇到这种错误,原因待定,哈哈。先把他解决了再说,查查资料,
给每个A,B组件都加上了代码,代码如下:

<!-- A组件 -->beforeCreate: function () {this.$options.components.comB = require('./comB.vue').default}<!--  B组件-->beforeCreate: function () {this.$options.components.comA = require('./comA.vue').default}

在这里插入图片描述
直接报错,连111都没有了。发现这里原来是直接无限循环了导致超出最大调用堆栈大小。

在这里插入图片描述
箭头指的还有很多很多没打开的。所以官网也建议添加个v-if来进行控制
在这里插入图片描述
再改一下A组件的代码

<!--  -->
<template><div>111<comB v-if="flag"></comB></div></template><script>
import comB from './comB.vue';
export default {name: 'comA',data() {return {flag: false};},components: {comB},mounted() {setTimeout(() => {this.flag = true}, 2500)},beforeCreate: function () {this.$options.components.comB = require('./comB.vue').default}
}</script>

在这里插入图片描述
没有报错,完美!

后话

如果我们要在主组件中传方法到子组件呢

普通的porps传参

我们这就传到A组件就行,如果是按照普通的props传参的话

<!-- 主组件 -->
<template><div class='app-container'><comA :funA="funA"></comA></div>
</template><script>
import comA from './comA.vue'
export default {components: {comA},methods: {funA() {console.log(111)}}
}
</script><!--A组件  -->
<template><div>111<comB v-if="flag"></comB></div>
</template><script>
import comB from './comB.vue';
export default {name: 'comA',data() {return {flag: false};},props: {funA:Function},components: {comB},mounted() {setTimeout(() => {this.flag = truethis.funA()}, 2500)},beforeCreate: function () {this.$options.components.comB = require('./comB.vue').default}
}</script>

在这里插入图片描述
这样会报错的

依赖注入

<!-- 主组件-->provide(){return {funA:this.funA}},methods: {funA() {console.log(111)}}
<!-- A组件-->inject: ['funA'],mounted() {setTimeout(() => {this.flag = truethis.funA()}, 2500)},

结果:
在这里插入图片描述


http://www.ppmy.cn/news/13237.html

相关文章

算力服务亟待破局,超聚变向新而行

“超聚变已独立活下来。”超聚变产品线总裁范瑞琦在2023新品发布会上透露。自从一年多前从华为体系独立&#xff0c;超聚变公司的未来就颇受业界关注。一方面&#xff0c;算力产业蒸蒸日上&#xff0c;各方尤为关注超聚变的产业定位以及发展算力产业的着力点&#xff1b;另一方…

【C语言课程设计】通讯录(2.0版本)

前言 在前面的博客中&#xff0c;我们已经了解了通讯录的基本写法。当然那个通讯录是不够完善的。我们本小节对前面的通讯录做一次小升级&#xff0c;添加动态增容模块与利用枚举来优化选择语句 【C语言课程设计】通讯录&#xff08;1.0版本&#xff09;_青色_忘川的博客-CSDN博…

C生万物 | C语言文件操作指南汇总【内附文件外排序源码】

&#x1f451;作者主页&#xff1a;Fire_Cloud_1 &#x1f3e0;学习社区&#xff1a;烈火神盾 &#x1f517;专栏链接&#xff1a;万物之源——C 文章目录一、为什么使用文件&#xff1f;二、什么是文件&#xff1f;1、程序文件2、数据文件3、文件名三、文件的打开和关闭1、文件…

SpringBoot集成Elasticsearch7.4 实战(二)

1、前言本篇文章主要讲的是:在Springboot环境下&#xff0c;利用JAVA环境操作索引,集成SpringBoot等相关知识2. SpringBoot集成开发工具&#xff0c;这里选择的是IDEA 2019.2&#xff0c;构建Maven工程等一堆通用操作&#xff0c;不清楚的自行百度。2.1. POM配置我这边选择 ela…

Lesson 3. 线性回归的手动实现(3.3 线性回归手动实现与模型局限 3.4 机器学习模型结果可信度理论与交叉验证基础)

文章目录一、线性回归手动实现与模型局限1. 线性回归的手动实现2. 线性回归模型局限3. 线性回归的决定系数二、机器学习模型结果可信度理论与交叉验证基础1. 机器学习模型结果可信度理论基础与数据集划分1.1 机器学习模型结果可信度基础理论1.2 数据集切分方法1.3 线性回归手动…

python-文件和异常

1. 从文件中读取数据1.1. 读取整个文件在同目录下创建textA文本文件123 456 789a. open函数&#xff1a;要以任何方式去使用文件&#xff0c;都需要先打开文件&#xff0c;它接受一个参数——要打开文件的名称。 open()返回一个表示文件的对象。b. 关键字with在不再需要访问文件…

基于 CartPole-v0 环境的强化学习算法实现(附完整代码)

1.1 CartPole-v0Cart Pole 在 OpenAI 的 gym 模拟器里面是相对比较简单的一个游戏。游戏里面有一个小车&#xff0c;上有 一根杆子。小车需要左右移动来保持杆子竖直。如果杆子倾斜的角度大于 15&#xff0c;那么游戏结束。小车也不 能移动出一个范围&#xff08;中间到两边各 …

26.Isaac教程--导航算法

导航算法 本节详细介绍导航算法。 ISAAC教程合集地址: https://blog.csdn.net/kunhe0512/category_12163211.html 文章目录导航算法全局路径规划器规划器模型可见性图算法优化器轨迹规划器全局路径规划器 Isaac 框架中的全局规划器问题被分解为三类&#xff1a;规划器模型、…