vue--子传父、父传子

vue --子传父 、父传子

一、父传子

如果一个组件A在组件B中被导入使用,称组件B是父组件,组件A是子组件

 示例图:

1.首先定义一个父组件

       在父组件中已经导入子组件---注册使用components---使用(父组件自定义使用(左边新的属性来存放这个值))

2.定义子组件

子组件props接收---子组件内部自定义一个点击事件,点击事件的的方法名可来调用---template里也可使用插值表达使用子组件接收过来的值

 总结:

vue单向数据流-不要修改props

在vue中需要遵循单向数据流原则

  1. 在父传子的前提下,父组件的数据发生会通知子组件自动更新
  2. 子组件内部,不能直接修改父组件传递过来的props => props是只读的

 不然vue控制台就就会由如上的显示:

 如下示例中:

   1.直接去修改props ===> 改了父组件传来的数据 , 这里打破 单向数据流的规则,vue能捕获到错误.
      // this.name = '小花花'

     2. 这里打破 单向数据流的规则,vue能不能捕获到错误 , hobby是引用数据类型,push并没有修改 数组的地址。

       说明:父组件传给子组件的是一个对象,子组件修改对象的属性,是不会报错的,对象是引用类型, 互相更新;但不能改变引用地址,props的值不能重新赋值, 但是引用类型可以子改父。

总结:
1.想要子传父,通过子组件控制父组件方法,进而让父组件的方法自己改变自己的data
2.明确父组件绑定的dom上内容作用域都属于父组件的,因此传值的都是父组件的data或者methods例如
首先v-bind:title = 'title'和@click='parentClick' 中左面都是子组件的接受的变量
值,右面都有可能是父组件data或者methods传值:
    <div id='app'>
        <my-com v-bind:title = 'title' @func='parentClick'></my-com>
    <div>
3.简单总结:等号左面的属于子组件的右面属于父组件

二、子传父

子传父是指:从子组件内部把数据传出来给父组件使用或者修改父组件数据。

语法:

  • 父组件中:< 子组件 @自定义事件名1="父methods函数1" @自定义事件名2="父methods函数2" />
  • 子: this.$emit("自定义事件名1", 传值1) ---> 执行父methods里函数代码

可参考如下关系图:

1.定义父组件

 2.定义子组件

最后子传父的示意图如下:

 总结:

1.子传父就是子组件控制父组件方法,让父组件变相改变自己data
2.需要在子组件methods,某个方法中使用$emit('func','传递的参数') 来控制
3.这种控制是变相的,因此会在子组件中单独有一个事件在内部专门触发,$emit
方法。

  • 6
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
Vue中父组件向子组件传递数据可以通过props属性实现,子组件向父组件传递数据可以通过$emit方法实现。 具体来说,父组件通过在子组件标签上绑定属性的方式向子组件传递数据,例如: ```html <template> <div> <child-component :prop-name="parentData"></child-component> </div> </template> <script> import ChildComponent from './ChildComponent.vue' export default { components: { ChildComponent }, data() { return { parentData: 'Hello from parent component' } } } </script> ``` 在子组件中,可以通过props属性接收父组件传递的数据,例如: ```html <template> <div>{{ propName }}</div> </template> <script> export default { props: { propName: String } } </script> ``` 子组件向父组件传递数据可以通过$emit方法实现,例如: ```html <template> <div> <button @click="sendDataToParent">Send Data to Parent</button> </div> </template> <script> export default { methods: { sendDataToParent() { this.$emit('event-name', 'Data from child component') } } } </script> ``` 在父组件中,可以通过在子组件标签上绑定事件的方式接收子组件传递的数据,例如: ```html <template> <div> <child-component @event-name="handleDataFromChild"></child-component> </div> </template> <script> import ChildComponent from './ChildComponent.vue' export default { components: { ChildComponent }, methods: { handleDataFromChild(data) { console.log(data) // 'Data from child component' } } } </script> ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值