Vue通信、传值的多种方式

一、通过路由带参数进行传值


1. 两个组件 A和B,A组件通过query把id传递给pageB组件(触发事件可以是点击事件、钩子函数等)

    this.$router.push({ path: '/pageB', query: { id: 1 } }) // 跳转到pageB
    // query:传值会将值放在路由之后
    // params:传值不会将值放在路由之后

2. 在pageB组件中获取A组件传递过来的参数

    this.$route.query.id //query传值
    this.$route.params.id // params传值

注意:这里是$route而不是$router


二、通过设置 Session Storage缓存的形式进行传递


1. 两个组件A和B,在A组件中设置缓存orderData

    const orderData = { 'id': 123, 'useid': 88 }
    sessionStorage.setItem('缓存名称', JSON.stringify(orderData))

2. B组件就可以获取在A中设置的缓存了

    const dataB = JSON.parse(sessionStorage.getItem('缓存名称'))

此时 dataB 就是数据 orderData
至于sessionStorage和localStorage的区别,我也有文章说明它们区别
localStorage和sessionStorage区别


三、父子组件之间的传值


1. 父组件往子组件传值props

1.定义父组件,父组件传递 number这个数值给子组件,如果传递的参数很多,推荐使用json数组{}的形式

    <template>
        <div class="parent">
            // 例如传递数字1给childres组件(childres为子组件)
            <childres number=1></childres>
        </div>
    </template>
    <script>
     // 引入组件
     import childres from 'components/childres'
     export default {
         components: {
            childres: childres  //习惯这么写,也可以直接childres
         }
     }  
    </script>

2.定义子组件,子组件通过 props方法获取父组件传递过来的值。props中可以定义能接收的数据类型,如果不符合会报错,在components创建childres.vue。

    // childres.vue
    <template>
        <div class="childres">
            // 显示父组件传递过来的值,显示1
            {{ number }}
        </div>
    </template>
    <script>
     export default {
        // 限制父组件传递过来的数据类型,如果不符合会报错 
        props: {
            'number':[Number, String, Object],
            'String':[String],
            //.... 可以传递多个值,用,隔开
        }
     }  
    </script>

当然也可以简单一点,如果不考虑数据类型,直接 props:[‘Number’,’String’]就可以了,中括号包裹,多个值使用,分隔。

2. 子组件向父组件传值 通过emit事件

创建Child.vue

<template>
    <div>
        <button @click="add">点击</button>
        <!-- 子组件通过触发emit给父组件传递数据 -->
    </div>
</template>

创建parant.vue

<template>
    <div>
        <span>{{num}}<span>
        <Child @emitEvent= "setNum"></Child> // @emitEvent是子组件定义的方法, setNum是父组件的一个方法
        <!-- 触发父组件的一个方法,然后拿到子组件传过来的值,再做其他操作 -->
    </div>
</template>

四、不同组件之间传值,通过eventBus(小项目少页面用eventBus,大项目多页面使用 vuex)


具体怎么用vuex,可以简单大概了解下vuex简单入门


 上一篇
vuex简单入门 vuex简单入门
此文章没有官网那么详细,仅仅给刚要入坑vuex的读者的一些帮助,大神请绕道,有帮助的请给个赞~~
2019-11-25
下一篇 
localStorage和sessionStorage区别 localStorage和sessionStorage区别
localStorage和sessionStorage一样都是用来存储客户端临时信息的对象,他们均只能存储字符串类型的对象(虽然规范中可以存储其他原生类型的对象,但是目前为止没有浏览器对其进行实现)
2019-10-16
  目录