首页 > 其他分享 >vue中$children的理解

vue中$children的理解

时间:2023-01-06 20:45:13浏览次数:63  
标签:info vue childSon 理解 components 组件 children

官网介绍 $children

$children 获取当前实例的直接子组件 。需要注意 $children 并不保证顺序,也不是响应式的。[特别重要]
如果你发现自己正在尝试使用 $children 来进行数据绑定,
考虑使用一个数组配合 v-for 来生成子组件,并且使用 Array 作为真正的来源。

注意1:注意当期实例是指这个文件下的实例。直接子组件是指这个文件下的直接子组件。
      如果子组件中还有子组件则孙子组件不能算直接子组件。

注意2:缺点:需要通过索引才能拿到自己想要的子组件,如果删除了某个子组件,会影响到子组件的结果,所以在实际的开发中比较少用
因此使用这个属性的时候一定要慎之又慎。

$children的简单使用

//childSon 子组件
<template>
  <div class="son-child-div">
    <h1>我是子组件:{{ msg}}</h1>
  </div>
</template>p

<script>
export default {
  data(){
    return {
      msg:'子组件的数据'
    }
  }
}
</script>
//父组件
<template>
  <div>
    <el-button @click="handlerMe">点我</el-button>
    <childSon></childSon>
  </div>
</template>

<script>
import childSon from "@/components/child/childSon.vue"
export default {
  components:{
    childSon
  },
  data() {
    return {
        info:'info'
    }
  },
  
  methods:{
    handlerMe(){
      console.log('==>',this.$children) //输出数组长度是2
    }
  }
};
</script>

为什么输出的数组长度是2?不应该是1嘛?

console.log('==>',this.$children) //输出数组长度是2
之所以是输出的长度是2。是因为children 获取当前实例的直接子组件。
此时可能会有小伙伴说:我不是子引入了一个 childSon 组件吗?是2 ? ???? 你怕不是在骗我不识数哦。
你好好在看看。
你的意思是说:    <el-button @click="handlerMe">点我</el-button> 也算一个组件吗? 是的。也是1个。
此时恍然大悟。 如果你把它改成普通的按钮 button, 不去使用 el-button 组件就是1个了。

$children修改子组件中的数据

//父组件
<template>
  <div>
    <button @click="handlerMe">点我</button>
    <childSon></childSon>
  </div>
</template>

<script>
import childSon from "@/components/child/childSon.vue"
export default {
  components:{
    childSon
  },
  data() {
    return {
      info:'info'
    }
  },
  
  methods:{
    handlerMe(){
      console.log('==>',this.$children) //输出数组长度为1了
      this.$children[0].msg = '我改了数据';
    }
  }
};
</script>

啰嗦一下:$children修改子组件中的数据

$children 修改数据的话,一定要慎之又慎。或者建议不要使用它来修改数据。【反正我不建议】
因为:需要通过索引才能拿到自己想要的子组件。
如果删除了某个子组件,会影响到子组件的结果,这样会导致修改失败。
所以在实际的开发中比较少用。或者不用它
因此使用这个属性的时候一定要慎之又慎。
其实我个人觉得这个属性挺鸡肋的。通信我们可以使用 props, project,...

标签:info,vue,childSon,理解,components,组件,children
From: https://www.cnblogs.com/IwishIcould/p/17031555.html

相关文章

  • Vue:TDesign Starter 自定义指令控制权限
    Vue支持自定义指令,具体API说明可以参考下面两个文档:Vue.directive(id,[definition])Vue自定义指令1.钩子函数Vue.directive提供了几个钩子函数,分别是:bindi......
  • vue的组件封装
    一、为什么要封装组件(组件化开发) 组件化开发(封装组件)的好处好处显而易见,可以增加代码的复用性、灵活性,从而提高开发效率。试想如果一个项目中在很多页面都能用到一个......
  • vue项目服务器部属源码调试解决办法
    一、问题来源   希望在远程发布的测试服务器上直接启用vscode 的调试模试,来解决项目实际部属时的问题。也就是在调试模式下,会有子域名的问题。二、如何在调试模......
  • 如何封装一个vue的插件
    首先在toast文件夹去创建一个index.js文件,在js文件中创建一个对象,将他导出//index.jsconsttoast={}exportdefaulttoast  在main.js中导入这个文件,并且use......
  • 第一节:环境准备、项目结构详解、App.vue/main.js/uni.scss详解、各种引用(组件/js/css
    一. 环境准备1. HbuilderX 下载地址:https://www.dcloud.io/hbuilderx.html 2. 微信开发工具 下载地址:https://developers.weixin.qq.com/miniprogram/dev......
  • Asp.Net Core EndPoint 终结点路由工作原理解读
    一、背景在本打算写一篇关于Identityserver4的文章时候,却发现自己对EndPoint-终结点路由还不是很了解,故暂时先放弃了IdentityServer4的研究和编写;所以才产生了今天这篇......
  • vue导航触发流程
    导航被触发。在失活的组件里调用beforeRouteLeave守卫。调用全局的beforeEach守卫。在重用的组件里调用beforeRouteUpdate守卫(2.2+)。在路由配置里调用befor......
  • vue3+vite配置多页面
    通过配置多页面应用,从而将给子模块依赖分隔开各自加载,可以减少初始资源的请求,加快页面的访问速度。比如我们有很多H5页面,并且相互独立,比如报修,购卡,计价规则等等,那我们如......
  • vite+vue3项目在chrome中debuger源码
    在vue文件的script中打上一个debugger,本以为可以开心的debugger了,结果控制台看到的是这个样子查了一些方案,这样就可以解决了......
  • uni-app HBuilderX 工程转换 vue-cli 工程
    1、使用vue-cli4新建空工程vuecreate-pdcloudio/uni-preset-vuemy-project地址不行就直接下载,使用本地地址2、将HBuilderX工程内的文件(除unpackage、node......