vuex做的todolist

2020-03-24  本文已影响0人  焚心123

1.首先下载vue脚手架

  vue init webpack 项目名  

2.在components下新建两个aa.vue、bb.vue文件

<template>
    <div>
        <input type="text" placeholder="请输入内容" v-model="Inp"
    @keydown.enter="aa"> 
        <Abb></Abb>
    </div>
</template>
<script>
import Abb from "../components/bb";//引入bb.vue文件
export default{
    components:{Abb},//注册bb.vue组件
    name:'Acd',
    data(){
        return{
            Inp:' ',
        }
    },
    methods:{
        aa(){//回车事件
             this.$store.commit('Inp',this.Inp);//将当前input的输入的值,传递到vuex中
            this.Inp='';
        }
    }
}


</script>
<style>




</style>
import { mapState, mapGetters } from 'vuex';
<template>

    <div>
        <p>未完成{{list.length-this.$store.getters.sun}}</p>
        <ul>
            <li v-for="(item,index) in list" :key='index' v-show="!item.done">
                <input type="checkbox" v-model="item.done">
                <span>{{item.name}}</span>
                <span @click="del(index)">删除</span>
            </li>
        </ul>
        <p>已完成{{this.$store.getters.sun}}</p>
        <ul>
            <li v-for="(item,index) in list" :key='index' v-show="item.done">
                <input type="checkbox"  v-model="item.done">
                <span>{{item.name}}</span>
                <span @click="del(index)">删除</span>
            </li>
        </ul>

    </div>

</template>
<script>
import {mapState, mapGetters} from 'vuex';//vuex中自带的方法可以实时更新数据
    export default{
        name:'Abb',
        data(){
            return{
                // list:JSON.parse(localStorage.getItem('todo'))||[]
            }
        },
        methods:{
            del(k){
                this.$store.commit('del',k);//将当前的下标传递到仓库中
            }
        },
        computed:{
            ...mapState({//实时更新vuex中list的数据
                list:"list"
            })
        }
    }


</script>
<style>

</style>

3.在APP.vue中将脚手架自带的样式和图片删除

4.在router文件夹下的index.js文件中,将首页路由修改一下

import Vue from 'vue'
import Router from 'vue-router'
import Acd from '@/components/aa';//将helloword替换成aa.vue文件


Vue.use(Router)

export default new Router({
  routes: [
    {
      path: '/',
      name: 'acd',
      component: Acd//上方的Acd
    }
  ]
})

5.下载vuex

 cnpm install vuex -s

6. 配置vuex

  import Vue from 'vue';

  import vuex from 'vuex';
  Vue.use(vuex);
  var store = new vuex.Store({
    state:{
        list:JSON.parse(localStorage.getItem('todo'))||[]
    },
    mutations:{
        Inp(state,v){
            var obj = {name:v,done:false};
            state.list.push(obj);
            localStorage.setItem('todo',JSON.stringify(state.list));
        },
        del(state,k){
            state.list.splice(k,1);
        }
    },
    getters:{
        sun(state){
            var s=0;
            for(var i=0;i<state.list.length;i++){
                if(state.list[i].done){
                    s++;
                }
            }
            return s;
        }
    }
  })
  export default store;

7.在main.js中引入一下store

  // The Vue build version to load with the `import` command
// (runtime-only or standalone) has been set in webpack.base.conf with an alias.
import Vue from 'vue'
import App from './App'
import router from './router';
import store from './store';//---->这里

Vue.config.productionTip = false

/* eslint-disable no-new */
new Vue({
  el: '#app',
  router,
  store,//----->这里
  components: { App },
  template: '<App/>'
})

8.此时可以运行项目

//进入当前项目
npm run dev

9.效果图

todolist.png
上一篇 下一篇

猜你喜欢

热点阅读