vue子组件的使用和事件传递

vue子组件的使用和事件传递

在使用vue进行编程的时候我们经常会遇到在多个界面重用功能,比如联动的下拉框,重复的表单等等。如果在每个模块里面都重新写一遍,在发生变更的时候需要修改很多的界面,导致了复杂的工作量。那么需要怎么样去处理呢?vue里面提供了子组件的方式,在我理解就是自定义标签。下面看一下效果。


在粉色的虚框中是子组件,它有一个值是aabbcc,通过点击子组件的自定义按钮,父组件就能收到相应的值。
具体的实现:
子组件
<template>
  <div style="border: hotpink 2px dashed;">
    <div>子组件</div>
    <div>发送 :{{data}}</div>
    <div>
      <el-button @click="test">自组件按钮</el-button>
    </div>
  </div>
</template>

<script>
  export default {
    name: 'selfmodel',
    data () {
      return {
        msg: 'Welcome to Your Vue.js App',
        data: 'aabbcc'
      }
    },
    mounted(){
      this.getParams();
    },
    watch: {
      '$route'(to, from){
        //在这里重新刷新一下
        this.getParams();
      }
    },
    methods: {
      getParams: function () {
      },
      test: function () {
        alert(this.data);
        this.$emit("selfevent", this.data);
      },
    }
  }
</script>

<!-- Add "scoped" attribute to limit CSS to this component only -->
<style>
  .el-container {
    height: 100%;
    margin: 0;
    padding: 0;
  }
</style>

父组件:
<template>
  <div>
    <div>
      父组件
    </div>
    <div>
      接收到的data:{{data}}
    </div>
    <div>
      <el-button @click="test">父组件按钮</el-button>
    </div>
    <div>
      <selfmodel @selfevent="selfevent"></selfmodel>
    </div>
  </div>
</template>

<script>
  import selfmodel from './selfmodel.vue'
  export default {
    components: {
      selfmodel
    },
    name: 'selfmodelparent',
    data () {
      return {
        msg: 'Welcome to Your Vue.js App',
        data: '',
      }
    },
    mounted(){
      this.getParams();
    },
    watch: {
      '$route'(to, from){
        //在这里重新刷新一下
        this.getParams();
      }
    },
    methods: {
      getParams: function () {
      },
      test: function () {
      },
      selfevent: function (...data) {
        console.log(data[0]);
        this.data = data[0];
      },
    }
  }
</script>

<!-- Add "scoped" attribute to limit CSS to this component only -->
<style>
  .el-container {
    height: 100%;
    margin: 0;
    padding: 0;
  }
</style>

这里需要注意的是子组件和父组件之间传递值是通过emit方法进行的
子组件中使用
this.$emit("selfevent", this.data);
进行传递参数。

父组件中使用
selfmodel @selfevent="selfevent"></selfmodel>
进行接收参数。




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值