一. 组件基本结构
<template>
  <div>
  </div>
</template>
<script>
  import Login from '@/components/login/Login';
  export default {
    name: 'Test',  // 组件名称
    props: ['val'], // 组建对外提供的属性
    components: { // 组建内部引入的组件
      Login
    },
    data() { // 组件状态
      return {
        firstName: 'liu',
        lastName: 'huihao',
        age: 24
      }
    },
    computed: { // 计算属性
      name() {
        return this.firstName + this.lastName
      }
    },
    watch: { // 侦听器
      age(newVal, oldVal) {
        console.log(newVal + '/' + oldVal);
      }
    },
    methods: { // 组件方法
      clickEvent() {
        alert();
      }
    }
  }
</script>
<style lang="less">
</style>
二. 常用指令
v-model
实现表单数据的双向绑定。
<template>
  <div>
    <input v-model="inputText" type="text"/>
  </div>
</template>
<script>
  export default {
    name: 'Test',
    data() {
      return {
        inputText: ''
      }
    }
  }
</script>
绑定后,输入框内的值和inputText变量中的任意一个发生改变,另一个都会随之改变。
v-text、v-html、 {{}}
均用来实现数据的单向绑定。
<template>
  <div>
    <span></span>
    <span v-html="inputText"></span>
    <span v-text="inputText"></span>
  </div>
</template>
<script>
  export default {
    name: 'Test',
    data() {
      return {
        inputText: 'inputText<span>span</span>'
      }
    }
  }
</script>
区别在于, {{}} 和v-text会将html标签转为普通文本。
v-on
可简写为@,用于绑定事件。
<template>
  <div>
    <div @click="clickEvent">Click me</div>
  </div>
</template>
<script>
  export default {
    name: 'Test',
    data() {
      return {}
    },
    methods: {
      clickEvent(e) {
        console.log(e);
      }
    }
  }
</script>
注意:
- 
    v-on 绑定事件时既可以不传入参数,如:@click=”clickEvent”,也可以传入参数,如:@click=”clickEvent(‘message’)”。不传参数时methods中可获取自动传入的event参数,传入自定义参数时如需event参数可通过特殊变量$event将其传入方法。 
- 
    绑定时可以用相关修饰符,如@click.prevent=“clickEvent” 可阻止默认事件,.stop可阻止事件传播等。 
- 
    v-bind 可简写为:,用于绑定属性。 
<template>
  <div>
    <div :class="{active: isActive}">Some message</div>
    <div :class="messageClass">Some message</div>
    <div :class="jsonClass">Some message</div>
    <div :class="[messageClass]">Some message</div>
  </div>
</template>
<script>
  export default {
    name: 'Test',
    data() {
      return {
        isActive: true,
        messageClass: 'active',
        jsonClass: {
          active: true
        }
      }
    }
  }
</script>
v-show
用来显示或隐藏元素,通过display实现。
v-for、v-if
列表渲染 和 条件渲染。
    <ul id="example-2">
      <li v-for="(item, index) in items">
         - 
      </li>
    </ul>
三. Vuex
store基本结构
const user = {
  state: {
    firstName: '',
    lastName: '',
    age: ''
  },
  // 类似与computed,返回经过计算的state
  getters: {
    name(state) {
      return state.firstName + state.lastName;
    }
  },
  // 修改state
  mutations: {
    SET_FIRSTNAME(state, {firstName}) {
      state.firstName = firstName;
    }
  },
  // 处理异步操作,异步完成后发出mutations修改state
  actions: {
    getFirstName({commit, state, getter}) {
      commit('SET_FIRSTNAME', {firstName: 'liu'});
      setTimeout(() => {
        commit('SET_FIRSTNAME', {firstName: 'wang'});
      }, 3000);
    }
  }
};
在组件中获取
获取vuex中的state:
通过在computed中添加mapState实现vuex中的state到组件计算属性的映射。映射时需要添加命名空间。
或使用 this.$store.state.xxxx
import {mapState} from 'vuex';
computed: {
 ...mapState({
    ageVuex: state => state.user.age
  }),
},
通过在computed中添加mapState实现vuex中的getter到组件计算属性的映射。默认getter无命名空间,给模块添加namespaced: true 可以使 getter具有命名空间。
或使用 this.$store.getters.xxxx
import { mapGetters } from 'vuex'
export default {
  // ...
  computed: {
   ...mapGetters({
     nameVuex: 'name'
   }),
  }
}
通过在methods中添加mapMutations实现vuex中的mapMutations到组件方法的映射。默认Mutations无命名空间,给模块添加namespaced: true 可以使 Mutations具有命名空间。
或使用 this.$store.commit(‘xxx’)
import {mapMutations} from 'vuex';
methods: {
  ...mapMutations({
    clickEvent: 'SET_FIRSTNAME'
  })
}
}
注意,如果调用的Mutations包含参数,那么可以在调用methods的时候传入@click=”clickEvent({firstName:’liu’})”
通过在methods中添加mapActions实现vuex中的mapActions到组件方法的映射。默认Actions无命名空间,给模块添加namespaced: true 可以使 Actions具有命名空间。
或使用 this.$store.dispatch(‘xxx’)
import {mapActions} from 'vuex';
 methods: { // 组件方法
  ...mapActions({
    clickEvent: 'getFirstName'
  }),
}
注意,如果调用的Actions包含参数,那么可以在调用methods的时候传入@click=”clickEvent({firstName:’liu’})”