vuex写todolist

本文介绍了如何使用Vuex创建一个TodoList应用,包括组件划分、功能实现如添加、删除、全选等,并提醒读者在复制代码时注意样式可能因使用flex和scss布局而有所变化。
摘要由CSDN通过智能技术生成

用vuex写一个todolist

这是完整的效果图(里面包含了添加、删除、删除已完成、未完成的数量、全选和取消全选、以及选中后的样式)

一个完整的样式

看到这个案例我第一步要先划分组件(具体划分请看下图)

组件划分

这是头部组件的具体内容

<template>
    <div class="header">
        <div class="left">
            <input type="checkbox" v-model="$store.state.istrue" @click="qx"/>
        </div>
        <div class="right">
            <input type="text" placeholder="What needs to be done?" onKeypress="javascript:if(event.keyCode == 32)event.returnValue = false;" v-model="addtext" @keyup.enter="add"/>
        </div>
    </div>
</template>
<script>
export default {
   
    data() {
   
        return {
   
            addtext:"",
        }
    },
    methods:{
   
        add(){
   
            var obj = {
   
                ischecked:false,
                title : this.addtext
            }
            this.addtext=""
            this.$store.commit('add',obj)
        },
        qx(){
   
            this.$store.commit('qx')
        }
    }
}
</script>
<style lang="scss" scoped>
.header{
   
    width: 100%;
    height: 9vh;
    background: #fff;
    box-shadow: 1px 1px 3px #e1e1e1;
    box-sizing: border-box;
    display: flex;
    justify-content: flex-start;
    .left{
   
        width: 10%;
        height: 100%;
        background:#fff;
        font-size: 20px;
        line-height: 9vh;
        text-align: center;
    }
    .right{
   
        width: 80%;
        height:100%;
        input{
   
            width: 100%;
            height: 97%;
            outline: none;
            border: none;
            font-size: 30px;
            background: #fff;
            padding-left: 10px;
                color: inherit;
        }
        input::-webkit-input-placeholder {
   
            color: #e1e1e1;
            font-style: oblique;
            font-size: 25px;
        }
    }
}
</style>

这是列表渲染的具体内容

<template>
  <div class="items">
    <Item v-for="(item, index) in arr" :item="item" :index="index" :key = "index"></Item>
  </div>
</template
  • 5
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
好的,下面是一个简单的使用Vuex实现TodoList的示例代码: 首先,需要安装Vuex: ``` npm install vuex --save ``` 然后,创建一个store.js文件,用于定义Vuex的状态、mutations、actions等: ```javascript import Vue from 'vue'; import Vuex from 'vuex'; Vue.use(Vuex); const store = new Vuex.Store({ state: { todos: [ { id: 1, text: '学习Vue', completed: false }, { id: 2, text: '学习Vuex', completed: false }, { id: 3, text: '学习Vue Router', completed: false } ] }, mutations: { addTodo (state, payload) { state.todos.push({ id: Date.now(), text: payload.text, completed: false }); }, toggleTodo (state, payload) { const todo = state.todos.find(todo => todo.id === payload.id); todo.completed = !todo.completed; }, deleteTodo (state, payload) { state.todos = state.todos.filter(todo => todo.id !== payload.id); } }, actions: { addTodo ({ commit }, payload) { commit('addTodo', payload); }, toggleTodo ({ commit }, payload) { commit('toggleTodo', payload); }, deleteTodo ({ commit }, payload) { commit('deleteTodo', payload); } } }); export default store; ``` 在上面的代码中,我们定义了一个todos数组作为状态,然后定义了三个mutations来修改这个状态。addTodo用于添加一个todo项,toggleTodo用于切换一个todo项的完成状态,deleteTodo用于删除一个todo项。最后,我们定义了三个actions,这些actions用于触发mutations来修改状态。 接下来,我们可以在组件中使用Vuex: ```vue <template> <div> <h2>TodoList</h2> <form @submit.prevent="addTodo"> <input type="text" v-model="newTodoText"> <button type="submit">Add Todo</button> </form> <ul> <li v-for="todo in todos" :key="todo.id" :class="{ completed: todo.completed }"> <input type="checkbox" v-model="todo.completed" @change="toggleTodo(todo)"> <span>{{ todo.text }}</span> <button @click="deleteTodo(todo)">Delete</button> </li> </ul> </div> </template> <script> import { mapState, mapActions } from 'vuex'; export default { computed: { ...mapState(['todos']), newTodoText: { get () { return ''; }, set (value) { this.$data.newTodoText = value; } } }, methods: { ...mapActions(['addTodo', 'toggleTodo', 'deleteTodo']) } }; </script> ``` 在上面的代码中,我们使用了Vuex提供的mapState和mapActions辅助函数,来将todos状态和addTodo、toggleTodo、deleteTodo等actions映射到组件的computed和methods中。 最后,在组件的created钩子中,我们可以使用Vuex的actions来初始化状态: ```javascript import store from './store'; export default { created () { this.$store.dispatch('addTodo', { text: '学习Vuex' }); this.$store.dispatch('addTodo', { text: '学习Vue Router' }); }, store }; ``` 以上就是使用Vuex实现TodoList的示例代码。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值