vue-组件传值

vue组件之间互相传值:父传子,子传父以及平行传值

一.父组件向子组件传值
父组件—子组件传值:通过在子组件上绑定自定义属性,属性值为父组件需要的传递的数据,子组件对象通过props接收属性名,属性名指代就是父组件数据。

在这里插入图片描述
在这里插入图片描述
源码:

 <div id="app">
      <h2>父子组件传值</h2>
      <hr />
      <v-parent></v-parent>
    </div>



    <template id="con">
      <div>
        <h3>父层组件</h3>
        <p>{{ title }}</p>
        <hr />
        <v-child :name="title"></v-child>
      </div>
    </template>
    
    <template id="child">
      <div>
        <h3>子层组件</h3>
        <p>接收父组件数据:{{ name }}</p>
      </div>
    </template>

    <script>
      var app = new Vue({
        el: "#app",
        components: {
          "v-parent": {
            template: "#con",
            data() {
              return {
                title: "hi 父组件"
              };
            },
            components: {
              "v-child": {
                template: "#child",
                props: ["name"] //子组件接收数据
              }
            }
          }
        }
      });
    </script>

二.子组件向父组件传值
子组件----父组件:在子组件标签上绑定自定义事件,内部通过$emit给该事件推送子组件数据,父组件内部通过函数接收
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
源码:

 <div id="app">
      <h2>子组件--父组件 传值</h2>
      <hr />
      <v-parent></v-parent>
    </div>

    <template id="con">
      <div>
        <h3>父层组件</h3>
        <p>接收子组件数据:{{ str }}</p>
        <hr />
        <!-- 绑定自定义事件 -->
        <v-child @toparent="getval"></v-child>
      </div>
    </template>

    <template id="child">
      <div>
        <h3>子层组件</h3>
        <p>{{ title }}</p>
        <button @click="send($event)">发送给父组件</button>
      </div>
    </template>


    <script>
      var app = new Vue({
        el: "#app",
        components: {
          "v-parent": {
            template: "#con",
            data() {
              return {
                str: ""
              };
            },
            methods: {
              //通过函数接收子组件推送的数据
              getval(msg) {
                this.str = msg;
                console.log(msg);
              }
            },
            components: {
              "v-child": {
                template: "#child",
                data() {
                  return {
                    title: "this is child title 这是子组件数据"
                  };
                },
                methods: {
                  send() {
                    // 调用$emit方法给toparent事件推送数据
                    this.$emit("toparent", this.title);
                  }
                }
              }
            }
          }
        }
      });
    </script>

三.平行传值
平行组件 利用vue对象,调用$emit $on 进行数据时间推送
源码:

<div id="app">
      <h2>平行组件传值</h2>
      <v-a></v-a>
      <hr />
      <v-b></v-b>
      <hr />
      <v-c></v-c>
    </div>

    <template id="demoA">
      <div>
        <h3>AAA组件</h3>
        <p>{{ info }}</p>
        <button @click="send()">发送给c组件</button>
      </div>
    </template>

    <template id="demoB">
      <div>
        <h3>BBB组件</h3>
        <p>{{ info }}</p>
        <button @click="send()">发送给c组件</button>
      </div>
    </template>

    <template id="demoC">
      <div>
        <h3>CCC组件</h3>
        <p>接收aaa:{{ stra }}</p>
        <p>接收bbb:{{ strb }}</p>
      </div>
    </template>

    <script>
      var vm = new Vue({}); //声明独立空vue对象 ,确保推送和接收的调用统一
      var app = new Vue({
        el: "#app",
        components: {
          "v-a": {
            template: "#demoA",
            data() {
              return {
                info: "hi aaaa"
              };
            },
            methods: {
              send() {
                //$emit推送数据
                vm.$emit("isa", this.info);
              }
            }
          },
          "v-b": {
            template: "#demoB",
            data() {
              return {
                info: "hi bbbb"
              };
            },
            methods: {
              send() {
                vm.$emit("isb", this.info);
              }
            }
          },
          "v-c": {
            template: "#demoC",
            data() {
              return {
                stra: "",
                strb: ""
              };
            },
            mounted() {
              var _this = this;
              //$on接收
              vm.$on("isa", function(data) {
                console.log(data);
                _this.stra = data;
              });
              vm.$on("isb", function(data) {
                console.log(data);
                _this.strb = data;
              });
            }
          }
        }
      });
    </script>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Vue组件中,v-model可以用于实现子组件与父组件之间的双向数据绑定。具体的传值过程如下: 1. 在子组件中,使用props来定义需要接收的value参数。例如props: { value: [String, Object] }。 2. 在子组件中,使用watch来深度监听value的变化。可以设置immediate为true,以便在初始化时立即改变监听的值。例如watch: { value: { handler: function(val, oldVal) { this.videoForm.showVideoPath = val; }, deep: true, immediate: true } }。 3. 子组件中的某个事件(例如上传成功的回调函数)需要通过$emit("input", 值)来将值传递给父组件的v-model。例如this.$emit("input", res.url)。 在父组件中,使用v-model来绑定子组件的值。例如<video-upload v-model="form.videoDz" />。 总结起来,v-model传值的过程包括在子组件中定义props来接收value参数,在watch中监听value的变化,并通过$emit("input", 值)来将值传递给父组件的v-model。在父组件中使用v-model来绑定子组件的值。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [Vue——父子组件通过v-model传值和显示](https://blog.csdn.net/weixin_42247720/article/details/127650801)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *2* *3* [vue父子组件v-model传值](https://blog.csdn.net/libinemail/article/details/123826501)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值