上一篇:Vue系列(三):组件及数据传递、路由、单文件组件、vue-cli脚手架

一、模块化开发

1. vue-router模块化

cnpm install vue-router -S

1.1 编辑main.js

//引入VueRouter 
import VueRouter from 'vue-router'

//使用VueRouter
Vue.use(VueRouter);

import routerConfig from './router.config.js'
//创建路由实例
const router=new VueRouter(routerConfig);

1.2 编辑App.vue

1.3 编辑router.config.js

export default {
    routes:[
        {
            path:'/home',
            component:Home
        },
        {
            path:'/news',
            component:News
        }
    ]
}

2. axios模块化

cnpm install axios -S

使用axios的两种方式:
    方式1:在每个组件中引入axios
    方式2:在main.js中全局引入axios并添加到Vue原型中

3. 为自定义组件添加事件

//为自定义组件加修饰符:native
<MyButton @click.native="send"></MyButton>
 

模块化开发

二、 Elment UI

1. 简介

Element UI是饿了么团队提供的一套基于Vue2.0的组件库,可以快速搭建网站,提高开发效率
    ElementUI  PC端
    MintUI 移动端

官网

2. 快速上手

2.1 安装elment ui

cnpm install element-ui -S

2.2 在main.js中引入并使用组件

import ElementUI from 'element-ui'
import 'element-ui/lib/theme-default/index.css' //该样式文件需要单独引入
Vue.use(ElementUI);
这种方式引入了ElementUI中所有的组件

2.3 在webpack.config.js中添加loader

CSS样式和字体图标都需要由相应的loader来加载,所以需要style-loader、css-loader

默认并没有style-loader模块,所以需要单独安装
    cnpm install style-loader --save-dev

2.4 使用组件

2.5 使用less

安装loader,需要两个:lessless-loader
    cnpm install less less-loader -D
在webpack.config.js中添加loader    

3. 按需引入组

3.1 安装babel-plugin-component

cnpm install babel-plugin-component -D  

3.2 配置.babelrc文件

"plugins": [["component", [
    {
      "libraryName": "element-ui",
      "styleLibraryName": "theme-default"
    }
]]]

3.3 只引入需要的插件

三、 自定义全局组件(插件)

全局组件(插件):就是指可以在main.js中使用Vue.use()进行全局引入,然后在其他组件中就都可以使用了,如vue-router
    import VueRouter from 'vue-router'
    Vue.use(VueRouter);

普通组件(插件):每次使用时都要引入,如axios
    import axios from 'axios'

自定义全局组件(插件)

四、 Vuex

1. 简介

Vuex 是一个专为 Vue.js 应用程序开发的状态管理模式。它采用集中式存储管理应用的所有组件的状态,并以相应的规则保证状态以一种可预测的方式发生变化。
简单来说,用来集中管理数据,类似于React中的Redux,都是基于Flux的前端状态管理框架           

2. 基本用法

2.1 安装vuex

cnpm install vuex -S

2.2 创建store.js文件,在main.js中导入并配置store.选项

import store from './store.js' //导入store对象

new Vue({
  store, //配置store选项,指定为store对象,会自动将store对象注入到所有子组件中,在子组件中通过this.$store访问该store对象
  el: '#app',
  render: h => h(App)
})

2.3 编辑store.js文件

Vuex的核心是Store(仓库),相当于是一个容器,一个store实例中包含以下属性的方法:
    state       定义属性(状态、数据)
    getters     用来获取属性
    actions     定义方法(动作)
    commit      提交变化,修改数据的唯一方式就是显式的提交mutations
    mutations   定义变化
    注:不能直接修改数据,必须显式提交变化,目的是为了追踪到状态的变化 
/**
 * vuex配置
 */

import Vue from 'vue'
import Vuex from 'vuex'

Vue.use(Vuex);

//定义属性(数据)
var state={
    count:6
}

//定义getters
var getters={
    count(state){
        return state.count;
    },
    isEvenOrOdd(state){
        return state.count%2==0?'偶数':'奇数';
    }
}

//定义actions,要执行的操作,如流程判断、异步请求等
const actions = {
    increment(context){//包含:commit、dispatch、state
        console.log(context);
        // context.commmit()
    },
    // increment({commit,state}){
    //     commit('increment'); //提交一个名为increment的变化,名称可自定义,可以认为是类型名
    // },
    decrement({commit,state}){
        if(state.count>10){
            commit('decrement');
        }
    },
    incrementAsync({commit,state}){
        //异步操作
        var p=new Promise((resolve,reject) => {
            setTimeout(() => {
                resolve();
            },3000);
        });

        p.then(() => {
            commit('increment');
        }).catch(() => {
            console.log('异步操作');
        });
    }
}

//定义mutations,处理状态(数据)的改变
const mutations={
    increment(state){
        state.count++;
    },
    decrement(state){
        state.count--;
    }
}

//创建store对象
const store=new Vuex.Store({
    state,
    getters,
    actions,
    mutations
})

//导出store对象
export default store;

2.4 编辑App.vue

在子组件中访问store对象的两种方式:
    方式1:通过this.$store访问
    方式2:通过mapState、mapGetters、mapActions访问,vuex提供了两个方法:
        mapState    获取state
        mapGetters  获取getters
        mapActions  获取actions

3. 分模块组织Vuex

|-src
    |-store
        |-index.js
        |-getters.js
        |-actions.js
        |-mutations.js
        |-modules  //分为多个模块,每个模块都可以拥有自己的state、getters、actions、mutations
            |-user.js
            |-cart.js
            |-goods.js
            |....
            

完!

参考Vue教学视频:Vue.js 2.0之全家桶系列视频课程(vue、vue-router、axios、vuex)

本文固定链接: http://www.js-code.com/vue-js/vue-js_26716.html