vue子组件和父组件之间动态传参交互

vue子组件和父组件动态交互

       组件 A 在它的模板中使用了组件 B。它们之间必然需要相互通信:父组件可能要给子组件下发数据,子组件则可能要将它内部发生的事情告知父组件。在 Vue 中,父子组件的关系可以总结为 prop 向下传递,事件向上传递。父组件通过 prop 给子组件下发数据,子组件通过事件给父组件发送消息。

 

一、父子组件传参数是通过属性props来实现的,需要在子组件内定义一个属性来接收父组件传过来的值;父组件要做的是双向绑定一个参数、给参数赋值。

子组件:

1.要用brainstormData属性,此时属性是没有值的,父组件还没给它传值。

2.定义属性:brainstormData,写上类型:Array

父组件:

1.引入、注册组件:

2.为组件双向绑定属性,属性的值为一个参数,通过给参数赋值来实现为绑定的属性传值

3.在Data(){}中定义要用到的参数

4.为joinBrains赋值,值为从后端接收到的数据

二、父子组件传函数是通过$emit实现的,当子组件的方法需要在被引用后扩展的时候,$emit就发挥了作用。子组件需要用$emit来接收父组件传进来的方法,父组件要写具体的此方法步骤。

子组件:

1.点击触发方法,参数是父组件传过来的值

2.在methods里定义方法,方法内容是用$emit接收父组件传来的方法

父组件:

1.省略引入组件

2.@子组件的方法名,用来和子组件绑定,绑定的值为父组件中要具体去执行的方法的方法名

3.方法具体要做的是带着参数跳转页面

  三、单向数据流
  父级的prop数据的更新,会向下流动到子组件中,反过来不行
  父组件能够修改子组件中的数据,而子组件不能直接修改父组件中的数据
  作用:
      防止子组件意外变更状态,会影响父组件中的状态或者数据

以下是具体的实例

1)父组件向子组件传参
      父组件使用prop属性,向子组件传参
      <div id="app">"
        <my-com :title="title" msg="hello"></my-com>
      </div>
      
      动态传参
        没有:传递的常量字符串
        有:  传递boolean、number、对象、数组、变量

      子组件接受参数
      let component = {
        props: ['title','msg'],
      }

      props校验
      let component = {
        props: {
          title: {
            type: String,     // 验证数据类型
            required: true,   // 该参数必需传递的参数
            // 基本数据类型直接写在default后面
            default: '你好',  //  当前参数的默认值
            // 引用数据类型,使用工厂函数的形式返回一个对象或者数组
            default() {
              return { }
            }
            validator(val) {  // 自定义的验证器
              return val.length > 3
            }
          }
        },
      }
    2)子组件向父组件传参
      <div id="app">"
        <my-com @son-handler="fatherHandler" msg="hello"></my-com>
      </div>

      let component = {
        data() {
          return {
            comMsg: '我是子组件数据'
          }
        },
        template:`
          <div>
            <button @click='clickHandler'>发送事件</button>
          </div>
        `,
        methods: {
          clickHandler() {
            this.$emit('son-handler', this.comMsg)
          }
        }
      }

      new Vue({
        el:'#app',
        data: {
          fatherDate: ''
        },
        methods: {
          fatherHandler(val) {
            // val就是子组件发送事件时,携带的参数this.comMsg
            this.fatherDate = val
          }
        },
        components: {
          myCom: component
        }
      })
 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
1. assets和public的区别是:assets目录用于存放需要webpack处理的静态资源文件,如样式、图片等;而public目录用于存放不需要webpack处理的静态资源文件,如favicon.ico、robots.txt等。 2. Vue的性能优化有以下几个方面:使用v-if代替v-show、使用v-for时添加key、避免在模板中使用复杂表达式、使用异步组件、使用keep-alive缓存组件等。 3. SPA(Single Page Application)是指只有一个HTML页面的Web应用,通过动态加载数据和更新DOM来实现页面的切换。其优点是用户体验好、交互性强,缺点是首次加载时间长、SEO不友好。 4. Vue的生命周期包括:beforeCreate、created、beforeMount、mounted、beforeUpdate、updated、beforeDestroy、destroyed。 5. 当一个包含组件组件被创建时,Vue会先创建组件,再创建组件。当组件被销毁时,Vue会先销毁组件,再销毁组件。 6. 组件通信的方式有:props、$emit、$parent/$children、$refs、事件总线、Vuex等。 7. $route是当前路由信息对象,包括路由路径、参数、查询参数等;$router是路由实例,包括路由跳转、路由拦截等方法。 8. 前端路由是指通过改变URL来实现页面的切换,而不是像传统的多页面应用一样每次请求都返回一个新的HTML页面。 9. Vuex是Vue的状态管理库,通过集中管理应用的状态,使得组件之间的通信更加方便、可控。 10. Vue3.0的更新包括:更快的渲染速度、更小的体积、更好的TypeScript支持、更好的组合API等。 11. Vue 3.0中的Vue Composition API风格是一种新的组件编写方式,通过函数式API来组织组件代码,使得组件更加可复用、可测试。 12. Composition API与Option API的区别在于,前者是基于函数的API,可以更加灵活地组织组件代码;而后者是基于对象的API,更加适合简单的组件。 13. 虚拟DOM是一种用JavaScript对象来描述真实DOM结构的技术,通过比较新旧虚拟DOM树的差异,来最小化DOM操作,提高渲染性能。 14. 虚拟DOM的解析过程包括:将模板转换为虚拟DOM树、将虚拟DOM树转换为真实DOM树、将新旧虚拟DOM树进行比较,生成差异对象、根据差异对象进行DOM操作。 15. 使用虚拟DOM可以减少DOM操作次数,提高渲染性能,但是在某些情况下,虚拟DOM的性能可能会比真实DOM差。 16. 在Vue中,key的作用是用于标识每个节点的唯一性,以便在DOM更新时进行优化。 17. 不建议使用index作为key的原因是,当数组中的元素发生变化时,index可能会发生变化,导致DOM更新不正确。 18. Vue-router跳转和location.href的区别在于,前者是通过路由实例进行跳转,可以进行路由拦截等操作;而后者是直接修改URL,会导致页面刷新。 19. router跳转传参时,params是通过URL路径传递的参数,query是通过URL查询参数传递的参数。 20. Vue-router导航守卫包括:全局前置守卫、全局后置钩、路由独享的守卫、组件内的守卫。它们可以用于路由拦截、权限控制等场景。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值