使用vuex做增删改查

源码:https://github.com/kingov/vuex-demo1

目录结构

这里写图片描述

webpack.config.js

const path = require('path');
const htmlplugin = require('html-webpack-plugin');
const cleanplugin = require('clean-webpack-plugin');



module.exports = {
    entry:{
        main:'./main.js'  //入口文件
    },
    output:{
        path:path.join(__dirname,'dist'),  //出口文件夹
        filename:'build.js'  //生成的文件名字
    },
    module:{
        loaders:[
            { //以css后缀结尾的文件使用css-loader加载再用style-loader加载
                test:/\.css$/,
                loader:'style-loader!css-loader'  //加载顺序从右到左
            },{   //以js后缀结尾的文件使用babel-loader加载
                test:/\.js$/,
                loader:'babel-loader', //babel-loader依赖于babel-core babel-plugin-transform-runtime babel-preset-es2015
                exclude:/node_modules/  //node_modules文件里的文件不加载
            },{  //以vue后缀结尾的文件使用vue-loader加载
                test:/\.vue$/,
                loader:'vue-loader'  //vue-loader依赖于vue-template-compiler
            }
        ]
    },
    plugins:[
        //此插件的作用是以./index.html为模版插入build.js然后重命名为idx.html放到dist文件夹下
        new htmlplugin({  
            template:'./index.html',
            filename:'idx.html'
        }),
        new cleanplugin(['dist'])  //每次运行webpack的时候首先删除dist文件夹
    ]
}

package.json

{
  "name": "00",
  "version": "1.0.0",
  "description": "",
  "main": "main.js",
  "scripts": {
    "test": ""
  },
  "keywords": [],
  "author": "",
  "license": "ISC",
  "dependencies": {
    "babel-core": "^6.25.0",
    "babel-loader": "^7.1.1",
    "babel-plugin-transform-runtime": "^6.23.0",
    "babel-preset-es2015": "^6.24.1",
    "clean-webpack-plugin": "^0.1.16",
    "css-loader": "^0.28.4",
    "html-webpack-plugin": "^2.29.0",
    "style-loader": "^0.18.2",
    "vue": "^2.4.2",
    "vue-loader": "^12.2.2",
    "vue-template-compiler": "^2.4.2",
    "vuex": "^2.3.1",
    "webpack": "^3.3.0"
  }
}

main.js


import vue from 'vue';
import app from './app.vue';
import vuex from 'vuex';

vue.use( vuex );

var store = new vuex.Store({
    state:{
        users:[
            { name:'tom' , addr:'usa' },
            { name:'jim' , addr:'chn' },
            { name:'tim' , addr:'kor' }
        ]
    },
    mutations:{
        add( state , data ){
            state.users.push( data )
        },
        del( state , i ){
            state.users.splice( i , 1 )
        }

    },
    actions:{
        addUser( {commit} , data ){
            commit('add',data)
        },
        delUser( {commit} , i ){
            commit( 'del' , i )
        }
    },
    getters:{
        allUsers(state){
            return state.users
        }
    }
})


new vue({
    el:'#app',
    store,
    render: c => c(app)
})

index.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Document</title>
</head>
<body>

    <div id="app"></div>

</body>
</html>

app.vue

<template>
    <div>
        <div style="margin:10px;">
            <input type="text" v-model='obj.name'><br>
            <input type="text" v-model='obj.addr'><br>
            <button @click='addUser'>新增用户</button>
        </div>
        <button @click='getAll'>获取所有用户</button>
        <div>
            <li v-for='(item,index) in users' :key='index'>
                <a href="javascript:;">{{item.name}}</a>
                <a href="javascript:;">{{item.addr}}</a>
                <a href="javascript:;" @click='del(index)'>删除用户</a>
            </li>
        </div>
    </div>
</template>
<script>
    export default {
        data(){
            return {
                obj:{}
            }
        },
        methods:{
            getAll(){
                console.log( this.$store.getters.allUsers )
            },
            addUser(){
                this.$store.dispatch( 'addUser' , {name:this.obj.name , addr:this.obj.addr} )
            },
            del(i){
                this.$store.dispatch( 'delUser' , i )
            }
        },
        created(){

        },
        computed:{
            users(){
                return this.$store.getters.allUsers 
            }
        }
    }
</script>
<style scoped>

</style>

.babelrc

{
    "presets":["es2015"],
    "plugins":["transform-runtime"]
}

运行webpack

生成dist文件夹
这里写图片描述

idx.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Document</title>
</head>
<body>

    <div id="app"></div>

<script type="text/javascript" src="build.js"></script></body>
</html>

运行结果

这里写图片描述

新增一个用户
这里写图片描述

删除用户
这里写图片描述

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值