美文网首页
Vue组件之间传值

Vue组件之间传值

作者: wade3po | 来源:发表于2019-02-09 19:42 被阅读8次

    基于现在都是模块化开发,vue开发过程中组件之间传值是必不可少的,传值的方法有很多,今天整理一些组件之间传值的方法。

    Props:

    这个方法应该是最常用的,父组件通过bind指令传给子组件,子组件通过跟data同级的props数组接收。

    父组件:<model :msg ="msg"></model>

    子组件:props: ['msg']

    然后子组件就可以使用msg这个值了。

    $parent:

    子组件修改父组件数据,这要在props的基础上才能使用,子组件修改父组件直接赋值会报错,使用this.$parent.msg = ‘修改父组件’;子组件就可以修改父组件的数据。

    $emit:

    也是很常见的放,子组件通过方法传递参数给父组件。

    父组件:

    <model @btn="btn"></model>

    btn(val){
    console.log(val);
    }

    子组件:this.$emit(‘btn’, ‘我是传递给父组件方法的参数’);

    ref:

    父组件:<model ref="headcar"></model>

    父组件调用:this.$refs.headcar

    父组件通过$refs调用子组件的方法和属性。

    .sync修饰符:

    父组件:

    <model :msg.sync="msg"></model>
    <p>{{msg}}</p>

    子组件:

    <input type="text" v-model="index">

    watch:{
    index(val){
    this.$emit('update:msg', val)
    }
    },

    这个方法用的比较少,因为parent和emit调用方法就能实现了。

    Vuex全局状态管理器:

    这个是vue的一个状态管理模式,这个就不多讲了,不过我们说的是组件之间传值,虽然vuex可以实现,但是并不符合数据共享的概念,并不推荐。

    attrs 和listeners:

    这两个一个是传递数据,一个是调用方法回传数据。跨组件之间传递数据使用这两个属性非常有用。接下来我会用四个组件,结构如下:

    A组件:<model1 :msg="msg" @btn="btn" :tre="tre"></model1>

    B组件:<model2 v-bind="attrs" v-on="listeners"></model2>

    C组件:<model3 v-bind="attrs" v-on="listeners"></model3>

    D组件:{{msg}}this.$emit("btn", '我是第N个组件');

    简单说attrs是传递数据,listeners是传递方法,通过v-bind和v-on指令跨组件传递数据(实践不能简写),方法在每个组件之间都能调用。而attrs的数据要用props获取,但是要注意,要是B组件props: [‘msg’],在B组件可以使用msg数据,但是C和D组件就无法获取msg数据,等于被拦截了。

    Provide和inject

    父组件中通过provider来提供变量,然后在子组件中通过inject来注入变量。

    父组件:

    provide(){
    return {
    all: this.msg,
    }
    },

    这边通过跟data一样返回,主要是为了可以调用当前的数据,直接用json格式只能写死数据。

    在父组件生命周期内的任何子组件:

    inject: ['all']

    然后就可以调用这个数据了。这边要注意一点,想要响应式的改变各个子组件的数据,msg想要是一个对象,否则子组件不会动态响应all这个数据。使用provide和inject的时候,要注意,因为这跟props不一样,不是局限于从当前父组件获取的,所以在非常多组件之间调用的时候,不利于维护。

    Vue组件通信大概就这几个,当然,要是使用JavaScript的方法,比如全局绑定在某个方法或者属性,本地缓存等也是可以的。不过大部分看起来还是基于props和emit。

    欢迎关注Coding个人笔记 公众号

    相关文章

      网友评论

          本文标题:Vue组件之间传值

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