‘壹’ Vue组件的使用
通过ref来获取页面上的dom
若在一个组件<item>中添加上ref,那么获取到的dom就是对应的组件,也就是可以获取到组件的引用。
可以获取到组件中定义的data数据
父组件传值给子组件通过属性来传。
过来的值赋值给定义的值,然后修改那个值
子组件通过事件触发来向父组件传值
定义一个全局组件
父组件给子组件通过属性传递一些值,而子组件做的一些约束就是组件的参数校验
父组件要传一个名叫content的属性,而子组件刚好定义了content的prop,这个就是props特性
非props特性
例如:给子组件的标签中定义一个click事件
上面的实现是错误的,原因就是在子组件中定义的@click中的click是监听的自定义事件的名称,它是接收子组件触发的事件名称,如:this.$emit('click'),@click是接收这样的事件的,并不是我们熟知的点击事件
实现上面的例子
方法一:
方法二
在click中添加.native就可标明为原生事件
方法一,使用Vuex
方法二,使用发布订阅模式,也称为总线机制
怎么使父组件给子组件优雅的传递dom,例如父组件要给子组件传递<p>Dell</p>
按以往的方法应该是
使用slot可以解决问题
如果template中有多个<slot>,那怎么确定哪个slot要那些dom呢
可以通过名称来确定对应的dom,如
通过动态组件来怎么实现呢
切换的时候,每次都是先销毁,然后再创建子组件,每次切换都销毁和创建
v-once就是为了避免这种情况的发生,使用v-once第一次展示的时候,会将组件放到内存中,第二次就不需要创建组件了,可以直接从内存中读取到
参考
Vue.js API文档
慕课网:Vue2.5开发去哪儿网App 从零基础入门到实战项目
‘贰’ vuex的基本使用
作用 :
它采用集中式存储管理应用的所有组件的状态。(统一管理所有组件中公用的数据)
组成:
state:管理所有的状态(数据)
getter:state 的计算属性
mutations:用来操作 state
用法 :
1.0 定义
// 在 store/index.js 中
export default new Vuex.Store ({state:{userInfo:''}})
2.0 使用
// 在 .vue(组件) 中
// // 取值
this.$store.state.userInfo
// // 赋值
this.$store.state.userInfo={}
总结:
在 vuex 中,如果要给 vuex 中的数据赋值,不能直接得到 state 去赋值,这样不配合 vuex 设计规范
vuex - mapState 基本使用
它是 vuex 中 state 对应的一个辅助函数
mapState:可以用来简化 vuex 中 state 中属性的使用
步骤:
导入
import { mapState } from 'vuex'
定义
computed:{...mapState(["state中的属性名"])}
使用
this.state中的属性名 === this.$store.state.state中的属性名
vuex - mutations 的使用
在 vuex 中,如果要给 state 中的属性赋值,建议大家借助 mutation 来赋值
步骤:
1.0 在 mutations 中定义赋值方法
// 在 store/index.js 中
export default new Vuex.Store({
state: { userInfo: ' ' },
mutations: { setUserInfo ( state, payload ) {
state.userInfo = payload
}
}})
2.0 在组件中调用方法
// 在 .vue(组件) 中
// 取值
this.$store.state.userInfo
// 赋值
this.$store.commit('setUserInfo', data)
vuex - mapMutaions 基本使用
mapMutaions : 可能用来简化 vuex 中的 mutations 中方法的调用
步骤:
导入 mapMutations
import { mapMutaions } from 'vuex'
定义方法:
methods:{...mapMutations(['setUserInfo'])}
使用方法:
this.setUserInfo('abc')
总结:
vuex:
state:管理状态
取值:
this.$store.state.xxx
...mapState(['xxx']) 或者 ...mapState({ myname: 'xxx' })
mutaions
取值:
this.$store.commit('xxx', payload)
...mapMutations(['xxx']) 或者 ...mapMutations({ myname: 'xxx' })
‘叁’ Vuex简单使用
Vuex 是一个专为 Vue.js 应用程序开发的状态管理模式。它采用集中式存储管理应用的所有组件的状态,并以相应的规则保证状态以一种可预测的方式发生变化。
如果一份数据需要在多个组件中使用,组件间传值又比较复杂,就可以使用vuex托管数据。
state选项: 定义状态(状态就是数据)。
mutations选项: 定义修改状态的方法(注意:这里面只能定义同步方法)。
$store: 返回的是当前项目中的全局状态对象。
commit()方法: 用于执行指定的mutations里面的方法。
在组件中,直接通过$store.state就可以获取到全局状态对象管理的状态数据,直接渲染到页面。
state选项: 定义状态(状态就是数据)。
通过 $store.state.数据名 使用。
getters选项: 定义计算属性。方法的参数是状态对象。
通过 $store.getters.属性名 使用计算属性。
mutations选项: 定义修改状态的方法(注意:这里的方法一般都是同步方法)。方法的第一个参数是状态对象,第二个参数是新值。
通过 commit() 方法,调用mutations里面的方法。
actions选项: 定义操作状态的方法(这里的方法可以定义异步方法)。
注意: actions里的方法最好不要直接操作state状态,而是通过调用mutations里面的方法去修改状态。所以,actions直接操作的是mutations。
通过 dispatch() 方法,调用actions里面定义的方法。
由于使用单一状态树,应用的所有状态会集中到一个比较大的对象。当应用变得非常复杂时,store 对象就有可能变得相当臃肿。
为了解决以上问题,Vuex 允许我们将 store 分割成模块(mole)。每个模块拥有自己的 state、mutation、action、getter、甚至是嵌套子模块。
namespaced属性: 默认情况下,action、mutation 和 getter 是注册在全局命名空间的。通过设置namespaced属性为true,将action、mutation 和 getter全部注册到私有命名空间中。
要从私有模块中获取数据,方式是: $store.state.模块名称.模块的数据 。
要从私有模块中获取计算属性,方式是: $store.getters['模块名/计算属性'] 。
调用私有模块里面的mutations定义的方法,方式是: $store.commit('模块名/方法名',新值) 。
调用私有模块里面的actions定义的方法,方式是: $store.dispatch('模块名/方法名',新值) 。
直接在模板中使用全局状态管理数据,表达式会写的很长。所以可以使用计算属性。
通过映射函数mapState、mapGetters、mapActions、mapMutations,可以将vuex.store中的属性映射到vue实例身上,这样在vue实例中就能访问vuex.store中的属性了,便于操作vuex.store。
如果vuex里面state的数据名称 跟 页面中的计算属性名称相同,就可以使用 mapState 映射函数,自动生成页面中的计算属性。
如果vuex里面getters的数据名称 跟 页面中的计算属性名称相同,就可以使用 mapGetters 映射函数,自动生成页面中的计算属性。
注意: 如果要映射模块里面的state/getters,函数的第一个参数设置为模块的名称。
如果定义的方法名跟全局管理对象中mutations里面的方法名相同,并且定义的方法会带有一个参数,通过参数传递数据。满足该规则,就可以使用 mapMutations 映射函数生成方法。
如果定义的方法名跟全局管理对象中actions里面的方法名相同,并且定义的方法会带有一个参数,通过参数传递数据。满足该规则,就可以使用 mapActions 映射函数生成方法。
注意: 如果要映射私有模块中mutations/actions里面的方法,函数的第一个参数设置为模块的名称。
‘肆’ vuex的几种调用方法
就是子组件给自己加的一把锁,不让父组件轻易的访问进来
第一种: 直接调用
第二种: 辅助函数
第三种: 仅做了解
第四种:辅助函数的 升级版