通常语法:vue
Vue.component(tagName, options)
组件options说明:es6
来看看文档里一段值得参考的语法(位置:组件-自定义事件-.sync修饰符):vuex
<comp :foo="bar" @update:foo="val => bar = val"></comp>
好了,这里涉及的概念可能比较多,因此再多解释一下吧~为了逻辑上更加清新,vue是不推荐子组件改变父组件的数据的,主要是出于维护成本的考虑,这就是所谓的单向数据流。父组件能够经过改变prop影响子组件数据,而子组件能够经过emit触发父组件方法。redux
可是,若是这样的数据传递不单单限于父子组件之间,而是祖先与后代组件或是兄弟组件呢?显然这会是一件很麻烦的事,为了处理这种多状态、多通讯的情形,咱们引入了vuex。promise
若是你以前使用过flux、redux等状态状态管理工具的话,那么应该会很容易理解这个工具是要作什么~异步
下面依次介绍一下state、mutation和action这三个核心概念:async
是一个持久化存储的状态,不归属于vue的某个特定组件,除非刷新页面,不然数据不会消失~函数
在根实例中注册store,下发到全部子组件,使用以下:工具
computed: { count () { return this.$store.state.count } }
若是想要简化定义,使用mapState辅助函数就可,使用时从vuex引入该方法就可。this
state的值不能直接被操做,想要改变它必须经过提交mutation的形式进行,方式为:
store.commit('something', payload)
注意一下第二个参数,这是以载荷形式提交参数,参数最多一个,想传多个参数的话必须以对象的形式提交。
mutation只能是同步函数,缘由是devtool没法捕捉异步函数的快照。
为了执行异步操做,vuex引入了action来完成这一工做,调用方式是用dispatch方法,简化写法与state和mutation是相似的,值得看看的是将它和es6的promise和es7的async与await结合起来的工做原理:
actions: { actionA ({ commit }) { return new Promise((resolve, reject) => { setTimeout(() => { commit('someMutation') resolve() }, 1000) }) } }
这个action返回了一个Promise对象,能够在后续进行处理,同时action中也能够调用其余异步action。
除了这三个概念外,还有getter(类比计算属性,用于从state派生出一些值)、module(分割较大的状态树,便于管理)。
处理表单可手动监听input、change或是使用带setter的双向绑定计算属性。