Vue数据传递的五种方法

组件(Component)是 Vue.js 最强大的功能。组件可以封装可重用的代码,通过传入对象的不同,实现组件的复用,但组件传值就成为一个需要解决的问题。

1.父组件向子组件传值

组件实例的作用域是孤立的。这意味着不能在子组件的模板内直接引用父组件的数据。要让子组件使用父组件的数据,我们需要通过子组件的props选项。

子组件:
在这里插入图片描述
子组件需要从父组件获取 logo 的值,就需要使用 props: [‘logo’]
在这里插入图片描述
父组件:
在这里插入图片描述
在这里插入图片描述

2.子组件向父组件传值

子组件主要通过事件传递数据给父组件。

子组件:
在这里插入图片描述
在这里插入图片描述
其中 transferUser 是一个自定义的事件,this.username 将通过这个事件传递给父组件 。

父组件:
在这里插入图片描述
在这里插入图片描述
getUser 方法中的参数 msg 就是从子组件传递过来的参数 username

3.路由传值

假设有一个列表页,点击列表项,需要通过id进入到对应的详情页。

列表页:

<div class="list">
  <ul>
    <li v-for="(item, index) in recommendList" :key="index" @click="getDetail(item.id)">
      .....
    </li>
  </ul>
</div>

方法一

getDetail (id) {
//直接调用$router.push 实现携带参数的跳转
  this.$router.push({
    path: `/detail/${id}`,
  })
 }

对应的路由配置

{
   path: '/detail/:id',
   name: 'Detail',
   component: Detaul
 }

获取参数的方法:

this.$route.params.id

方法二:

methods: {
	getDetail (id) {
	  this.$router.push({
	    name: 'Detail', 
	    params: {
	      id: id
	    }
	  })
	}
}

对应的路由配置:

{
     path: '/detail',
     name: 'Detail',
     component: Detail
 }

获取参数的方法:

this.$route.params.id

方法三
通过query来传递参数,这种情况下 query传递的参数会显示在url后面?id=?

methods: {
	getDetail (id) {
	  this.$router.push({
	    path: '/detail', 
	    query: {
	      id: id
	    }
	  })
	}
}

对应的路由配置:

{
     path: '/detail',
     name: 'Detail',
     component: Detail
 }

获取参数的方法:

this.$route.query.id

注:
使用params传值时,页面刷新时参数会消失,使用query时不会出现这个问题
使用时,可以在生命周期created赋值。

4. 通过localStorage或者sessionStorage来存储数据

使用方法:
在这里插入图片描述
区别:
1.sessionStorage:将数据保存在session对象中。所谓session,是指用户在浏览某个网站时,从进入网站到浏览器关闭所经过的这段时间,也就是用户浏览这个网站所花费的时间。session对象可以用来保存在这段时间内所要求保存的任何数据。

2.localStorage:将数据保存在客户端本地的硬件设备(通常指硬盘,也可以是其他硬件设备)中,即使浏览器被关闭了,该数据仍然存在,下次打开浏览器访问网站时仍然可以继续使用。

这两者的区别在于,sessionStorage为临时保存,而localStorage为永久保存。

相同点:
都是保存在浏览器端,且同源的。

两者与cookie的区别:
1、cookie数据始终在同源的http请求中携带(即使不需要),即cookie在浏览器和服务器间来回传递。storage不传递,只保存在客户端。
2、cookie大小限制为4K,storage大的多

5.Vuex

在应用复杂时,推荐使用vue官网推荐的vuex。

https://vuex.vuejs.org/zh-cn/getting-started.html


作者:小天使娜娜
来源:优快云
原文:https://blog.youkuaiyun.com/localhost_1314/article/details/83657546
版权声明:本文为博主原创文章,转载请附上博文链接!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值