美文网首页前端开发那些事儿
vue--三种组件中之间的传值

vue--三种组件中之间的传值

作者: 为光pig | 来源:发表于2020-12-11 16:05 被阅读0次

    一、父子组件之间的传值----props/$emit

    组件之间的传值,我们比较常用到的是props/$emit

    1、父组件向子组件传值--props

    这里我们在父组件中定义的extensionObj是一个对象

    <Extension :extensionObj="extensionObj"/>
    
    data(){
        return{
            extensionObj: {},
        }
    }
    

    在子组件中接收值

    props:{
        extensionObj: {
            type: Object,
            default: {}
        },
    },
    

    2、子组件向父组件传值

    子组件:

    <col @click="tableClickBtn(item)"></col>
    

    写个方法触发

    tableBtnClick(item){
        this.$emit('select',item);
    }
    

    父组件:

    <StaffDialog ref="staffDialogRef" @select="staffDialogSelect"/>
    

    写个方法接收

    staffDialogSelect(item) {
        this.searchObj = item;
    }
    

    二、父组件向下(深层)子组件传值----provide/inject

    这里引用vue官网文档里的话

    类型:

    provide:Object | () => Object
    inject:Array<string> | { [key: string]: string | Symbol | Object }
    详细:

    provide 和 inject 主要在开发高阶插件/组件库时使用。并不推荐用于普通应用程序代码中。

    provide 选项应该是一个对象或返回一个对象的函数
    inject 选项应该是:

    一个字符串数组,或
    一个对象,对象的 key 是本地的绑定名,value 是:
    在可用的注入内容中搜索用的 key (字符串或 Symbol),或
    一个对象,该对象的:
    from property 是在可用的注入内容中搜索用的 key (字符串或 Symbol)
    default property 是降级情况下使用的 value

    // 父级组件提供 'foo'
    var Provider = {
      provide: {
        foo: 'bar'
      },
      // ...
    }
    
    // 子组件注入 'foo'
    var Child = {
      inject: ['foo'],
      created () {
        console.log(this.foo) // => "bar"
      }
      // ...
    }
    

    父组件中getCustInfo为接口返回的数据

    provide(){
        return {
            getCustInfo: this.getCustInfo
        }
    },
    

    子组件接收

    inject: ['getCustInfo'],
    

    这里的getCustInfo也可以个是一个方法,返回一个函数

    methods:{
        getCustInfo(){
            return this.custInfo; //custInfo是接口返回的数据
        }
    }
    

    那么,子组件的接收应该这样

    custInfo(){
        return this.getCustInfo();
    },
    

    三、访问父、子组件----ref、parent/child

    1、ref--在父组件中访问子组件

    引用官网api:

    尽管存在 prop 和事件,有的时候你仍可能需要在 JavaScript 里直接访问一个子组件。为了达到这个目的,你可以通过 ref 这个 attribute 为子组件赋予一个 ID 引用。例如:

    <base-input ref="usernameInput"></base-input>
    

    现在在你已经定义了这个 ref 的组件里,你可以使用:

    this.$refs.usernameInput

    注意:refs 只会在组件渲染完成之后生效,并且它们不是响应式的。这仅作为一个用于直接操作子组件的“逃生舱”——你应该避免在模板或计算属性中访问refs。

    2、父、子组件之间的访问

    引用官网api:

    指定已创建的实例之父实例,在两者之间建立父子关系。子实例可以用 this.parent 访问父实例,子实例被推入父实例的children 数组中。

    节制地使用 parent 和children - 它们的主要目的是作为访问组件的应急方法。更推荐用 props 和 events 实现父子组件通信

    这里组件之间的访问,目前实战中用到的较少。按官网的话,就是不太建议使用。

    相关文章

      网友评论

        本文标题:vue--三种组件中之间的传值

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