vue 组件传值

31 篇文章 1 订阅

1.prop和$emit

父组件通过子组件暴露的prop的sonValue、dauValue向子组件传值
子组件通过内部定义的props接收到父组件的值,每当父组件的值变化的时候,
子组件内部的值就会发生变化,可以使用this.[props]来进行引用
2.vm. r e f . [ c h i l d ] 和 v m . ref.[child]和vm. ref.[child]vm.parent(父子组件之间的显示调用)

在父组件中引入子组件并且设置子组件的ref值
父组件都可以通过引用’ref’的方式来获得vm.$parent在子组件中引入父组件实例
3.bus总线机制(兄弟组件之间)

 通过vm.$emit和vm.$on通过 vm.$emit 触发当前实例上的事件,并将参数传递给监听器,
 通过 vm.$on 监听当前实例上的自定义事件
  var bus = new Vue()
  Vue.prototype.bus = bus

4.vm. a t t r s 和 v m . attrs和vm. attrsvm.listeners

props和emit的父子组件传值的进化版。可以从父组件到孙组件的跨级传递,中间的子组件作为vm. a t t r s 和 v m . attrs和vm. attrsvm.listeners的实现载体
子组件,能在父组件中被引用的是myData的值,但是我们能通过vm.$attr对象获得props之外的属性
孙组件,不需要props可以直接获得从父组件传递过来的值
5.使用vuex和localStorage

state用来存储数据,需要注意的是Vuex是单一状态的,虽然有模块,但是他们的状态其实都是集中管理的
Mutation更改Vuex的store中的状态的唯一方法,不支持异步,Mutation遵守 Vue 的响应规则,必须以合适的方式去修改数据,不然可能无法触发页面更新。
Action类似于mutation,但是action不能直接修改state,只能通过mutation去间接修改,而且action支持异步操作
getters根据state产生一些新的数据,类似与计算属性,会被缓存,只有依赖值修改时,才会产生变化
module在我们的状态过于臃肿的时候,可以通过模块去分隔我们的数据。建议使用代码实现module的自动加载,避免每次都需要导入模块:
vuex的原理
vuex的state实际上就是vue的data数据,
getters使用了defineProperty方法,vuex中实现了两个方法,
一个是install,安装 Vue.js 插件。如果插件是一个对象,必须提供install方法。
如果插件是一个函数,它会被作为install方法,install方法调用时,会将Vue作为参数传入。
一个是Store,生成store对象,然后放入到vue根元素中

6.跨越层级 - provide/inject
rovide/inject是一对需要配套使用的属性,provide定义的值,
你可以使用inject进行接收,无论组件之前是如何嵌套的,
父组件使用provide定义的值,
你都可以在它的子孙组件中使用inject接收到,
provide和inject绑定并不是可响应的,但是你可以通过传递一个可监听的数据,
甚至直接传入组件的实例,来实现数据的相互传递

为什么keep-alive可以直接使用
因为keep-alive是vue的内置组件,已经在vue中提前定义
keep-alive无需注册,在模板中直接可以使用 keep-alive是如何保持组件状态的



为了保持组件状态,keep-alive设计了缓存机制。
keep-alive设置了cache和keys两个属性来缓存子组件。
其中cache中的每项是一个以所包裹的组件的组件名为key,
包裹组件对应的vnoded为值的对象。keys的每一项是其所包裹的组件的组件名 render 函数是vue实例和vue组件实例中用来创建vnode的方法

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值