美文网首页
利用.$emit、props、watch完成组件间(子组件、兄弟

利用.$emit、props、watch完成组件间(子组件、兄弟

作者: 持续5年输出bug | 来源:发表于2022-11-01 21:12 被阅读0次

    现在接触项目有一段时间了,因为vue中组件概念,组件间传值属于常用的一种手段。
    如图所示:


    image.png

    现在假设有这样一个页面(父组件),点击列表(子组件 A)的编辑按钮时触发了父组件的事件,并且携带了一个参数,然后根据这个参数去获取这一行的数据,将其填入表单(子组件B)之中,至此,就完成了父子组件的传值和兄弟组件间的传值:
    一、父子组件间传值(尤指需要通过触发事件来传值)
    .$emit

    // 父组件里先绑定下
        <list :table-data="tableData"
                     :loading="loading"
                     @edit="handleEdit"></list>
    
    
        // 子组件触发父组件edit事件
        handleEdit (currentRow) {
          this.$emit('edit', currentRow.Id)
        },
    
        // 父组件接收子组件通过$emit方法传递的参数,并将其赋值给currentRow保存下来,为待会传给其他子组件作准备。
        handleEdit (Id) {
          this.editVisible = true
          this.currentRow = Id
        },
    

    二、兄弟组件间传值
    .$emit+props+watch
    完成以上代码,发现作为父组件,其实就是充当了其他子组件之间传值的媒介,如果不用中央事件总线的方法去处理兄弟组件间的传值,那现在这种方法还是比较简单的。

    // 记得先将获取到的这个参数初始化一下,然后双向绑定到子组件B上
      <edit :edit-visible.sync="editVisible"
                     :row-id.sync="currentRow"
                    ></edit>
    
      // 接收父组件传递的参数
      props: {
        editVisible: {
          type: Boolean,
          default: false
        },
        rowId: {
          type: String,
          default: null
        }
      }
    
      watch: {
        // 监听父组件传递的数据
        rowId (val) {
          this.getRowData(val) // 这里是通过传递的这个参数去获取了这一行的数据
        }
      },
    

    有时候需要传递多个参数,可以直接将一个对象传递过来,然后根据需要进行侦听即可,如下,虽然传递了一个对象,但是获取表单数据的时候只用到一个属性,需要注意的是,如果你要侦听一个对象,记得用deep:true。

        'rowData.id': {
          handler (val) {
            // 为当前表单赋值
            this.getRowData(val)
          },
          immediate: true
        }
    

    相关文章

      网友评论

          本文标题:利用.$emit、props、watch完成组件间(子组件、兄弟

          本文链接:https://www.haomeiwen.com/subject/rlgcyctx.html