vue数据传递方式

父子组件数据传递

  • 在子组件中的props选项,定义属性propComponent,用于父向子传递数据
  • 子向父传递数据,通过事件传递的方式实现,在子组件中通过this.$emit(‘eventEmit’,'1')触发相应的事件,在父组件中监听eventEmit事件,并在参数中获取子向父传递过来的数据
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <script src="https://cdn.jsdelivr.net/npm/vue@2/dist/vue.js"></script>
    <style>
        .component-a .box{
            width: 200px;
            height: 200px;
            background: mediumaquamarine;
            line-height: 200px;
            text-align: center;
        }
        .component-a p{
            margin: 0;
        }
    </style>
</head>
<body>
    <div id="app">
        <!-- 监听子组件传递过来数据 -->
        <component-a :prop-component="str" @event-emit="onEventEmitHandle" />
    </div>
    <template id="componentA">
        <div class="component-a">
            <div class="box">{{propComponent}}</div>
            <button @click="onEvenHandle">按钮</button>
        </div>    
    </template>
    <script>
        Vue.component("component-a",{
            template:"#componentA",
            props:{
                propComponent:{
                    type:String,
                    default:""
                }
            },
            methods:{
                onEvenHandle(){
                    // 子向父传递数据 1
                    this.$emit("event-emit","sioasojpopa");
                }
            }
        })
        const vm = new Vue({
            el:"#app",
            data:{
                str:"模拟父子组件传递数据"
            },
            methods:{
                onEventEmitHandle(e){
                    this.str = e;
                }
            }
        })
    </script>
</body>
</html>

路由传递数据

  • 在路由跳转时,在params或query中携带需要传递的参数,然后在相应的页面中通过路由api获取这些参数
#通过查询字符串的方式传递参数
1.this.$router({
	path:"url",
	query:{
		a:"10",
		b:"20"
	}
})
2.在页面中获取这些参数
const query = this.$route.query;
console.log("a="+query.a,"b="+query.b)

#通过页面路径来传递参数
1.this.$router({
	path:"/abc",
	params:{
		id:"saosopaopsopa",
		name:"asisniaiaiojjiosa"
	}
})

2.在页面中获取这些参数
// url = /abc/saosopaopsopa/asisniaiaiojjiosa  定义时 url = url/id=?/name=?
const params = this.$route.params;
console.log("id="+params.id,"b="+params.name)

vuex全局状态管理器的方式进行传递数据

  • state中定义全局共享的数据
  • getters中定义获取共享数据的方法,相当于vue实例中计算属性,只有相关依赖的属性发生变化时,才会重新的计算值
  • mutations中定义操作state中数据的方法,并更新相关的state数据,不允许进行异步的操作
  • actions中定义触发mutations中的方法,并随之修改相关的state,可以进行异步的操作

依赖注入

  • 在父级组件中通过provide定义注入子级组件的方法和数据,然后在子级组件中通过inject引入父向子注入的数据,通过依赖注入的数据不是响应式的
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <script src="https://cdn.jsdelivr.net/npm/vue@2/dist/vue.js"></script>
    <style>
        .component-a .box{
            width: 200px;
            height: 200px;
            background: mediumaquamarine;
            line-height: 200px;
            text-align: center;
        }
        .component-a p{
            margin: 0;
        }
    </style>
</head>
<body>
    <div id="app">
        <component-a  />
    </div>
    <template id="componentA">
        <div class="component-a">
            <p>{{obj.a}}-{{obj.b}}</p>
        </div>    
    </template>
    <script>
        Vue.component("component-a",{
            template:"#componentA",
            // 子组件接收父组件传递过来的数据
            inject:["obj"]
        })
        const vm = new Vue({
            el:"#app",
            data:{
                str:"模拟父子组件传递数据"
            },
            //向所有的子组件注入的数据
            provide(){
                return {
                    obj:{
                        a:1,
                        b:"sajoisiojsaiojiojas"
                    }
                }
            },
            methods:{
            }
        })
    </script>
</body>
</html>

通过localStoragesessionStorage传递数据

  • 设置数据:localStorage.setItem("key","value")
  • 访问数据:localStorage.getItem("key")
  • 删除数据:localStorage.removeItem("key")
  • 清空数据:localStorage.clear()
  • localStorage设置的数据,只要是通过一个网站,数据会一直存在,除非手动删除
  • sessionStorage设置的数据,只在当前窗口中有效,只要关闭了网站或浏览器,数据就会被删除
  • localStoragsessionStorage设置的数据,不能实现不同浏览器的数据共享,设置的数据只在当前浏览器中有效
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值