zoukankan      html  css  js  c++  java
  • vuex-todos

    1,创建 stores 文件夹,在其目录下分别创建 state actions  mutations  getters  mutation-types 模块,以及集成这些模块向外暴露 store 对象的 index.js 模块

    ① index.js

    ② state.js

    2,完成 添加 todo

    ① mutation-types.js,mutations 常量模块

    ② actions.js

    将 todo 作为包装为一个对象传给 mutataion 时

    若直接将 todo 传给 mutation

    ③ mutations.js

    ④ 编写完 store 对象,在 main.js 中注册

    ⑤ 组件中使用 $store 对象的数据

    todoHeader.vue

    todoList.vue

    添加一个 todo 后

    3,完成删除 todo

    ① mutataion-types.js

    ② actions.js

    ③ mutations.js

    ④ todoItem.vue

    4,已完成 和 全部 数据渲染

    getters.js

    是否全选事件完成

    ① mutation-types.js

    ② actions.js

    ③ mutations.js

    ④ todoFooter.vue

    5,清除已完成任务

    ① mutataion-types

    ② actions.js

    ③ mutation.js

    ④ todoFooter.vue

    6,使用 mapState,mapGetters,mapActions 将 store 对象属性映射到 组件对象上。

    todoHeader.vue

    <template>
      <div class="todo-header">
        <input type="text" placeholder="请输入你的任务名称,按回车键确认" @keyup.enter="handleAdd" v-model="input_todo" />
      </div>
    </template>
    
    <script>
    export default {
      data: function () {
        return {
         input_todo:""
        };
      },
      methods: {
        handleAdd() {
          //得到输入的数据
          this.input_todo=this.input_todo.trim()
          //检查合法性
          if(!this.input_todo){
            alert("请输入");
            return;
          }
          let todo={
            isComplete:false,
            title:this.input_todo
          }
          //PubSub.publish("add", todo);
          this.$store.dispatch('addTodo',todo)
          //清空输入框
          this.input_todo = "";
        },
      },
    };
    </script>
    

    todoList.vue

    <template>
      <ul class="todo-main">
        <todoItem v-for="(todo,index) in todos" :key="index" :todo="todo" :index="index"/>
      </ul>
    </template>
    
    <script>
    import todoItem from './todoItem'
    import { mapState } from 'vuex';
    export default {
      computed:{
        ...mapState(['todos'])
      },
      components:{
        todoItem
      },
    };
    </script>

    todoItem.vue

    <template>
      <li :style="{background:isShowDel?'#ccc':'#fff'}" 
            @mouseenter="mouseEnter(true)" @mouseleave="mouseEnter(false)">
        <label>
          <input type="checkbox"  v-model="todo.isComplete"/>
          <span>{{todo.title}}</span>
        </label>
        <button class="btn btn-danger" v-show="isShowDel" @click="handleDel">删除</button>
      </li>
    </template>
    
    
    <script>
    export default {
      props:{
          todo:Object,
          index:Number
      },
      data:function(){
          return {
              isShowDel:false,
          }
      },
      methods:{
        mouseEnter(value){
              if(value){ //鼠标移入事件
                this.isShowDel=true;
              } 
              else{//鼠标移出事件
                this.isShowDel=false
              }
        },
        handleDel(){
          if(window.confirm(`确定删除${this.todo.title}吗`)){
              this.$store.dispatch('delTodo',this.index)
          }
        }
      }
    };
    </script>

    todoFooter.vue

    <template>
      <div class="todo-footer">
        <label>
          <input type="checkbox" v-model="checkAll"/>
        </label>
        <span>
          <span>已完成{{hasCompleteNum}}</span> / 全部{{totalNum}}
        </span>
        <button class="btn btn-danger" v-show="hasCompleteNum" @click="delAllCompleted">清除已完成任务</button>
      </div>
    </template>
    
    <script>
    import { mapState, mapGetters } from 'vuex';
    export default {
      computed:{
        ...mapGetters(['totalNum','hasCompleteNum']),
        //控制全选按钮是否选中
        checkAll:{
          get(){ //是否勾选
            return this.hasCompleteNum==this.totalNum&& this.totalNum>0
          },
          set(value){ //点击全选checkbox,value时当前checkbox的选中状态
            this.$store.dispatch('selectAll',value);
          }
        }
      },
      methods:{
        delAllCompleted(){
          if(window.confirm('确定清除已完成的吗?')){
            this.$store.dispatch('delAllCompleted')
          }
        }
      }
    };
    </script>
    

      

  • 相关阅读:
    C# 添加、删除、读取Word形状(基于Spire.Cloud.Word.SDK)
    Java 添加、修改、读取、复制、删除Excel批注
    Java 设置Word页边距、页面大小、页面方向、页面边框
    C# 将Word转为PDF、XPS、Epub、RTF(基于Spire.Cloud.Word.SDK)
    Java添加、读取Excel公式
    C# 添加文本、图片到PDF文档(基于Spire.Cloud.SDK for .NET)
    Java 在Excel单元格中应用一种/多种字体样式
    Java 添加、删除、移动、隐藏/显示Excel工作表
    Java 复制Excel工作表
    Java 将Excel转为图片、html、XPS、XML、CSV
  • 原文地址:https://www.cnblogs.com/shanlu0000/p/13485175.html
Copyright © 2011-2022 走看看