vuex的添加,删除,选中,和vue的组件拆分

1.首先在组件中定义一个enter事件

 <input type="text"
        class="txt"
        v-model="txt"
        @keydown.enter="add"
        />

2.在data中定义双向绑定的内容

data() {
        return {
            txt:""
        };
    },

3.在methods判断数据是否为空,把他传入vuex中

 methods: {
        add(){
            if(this.txt == ""){
                alert('内容不能为空')
                return;
            }
            var o ={
                isCheck:false,
                txt:this.txt
            }
            this.$store.commit('addArr',o)
            this.txt=''
        }
    }

4.在vuex中接收传过来的数据并定义空的数组

 state: {
    arr:[],
    all:false,
  },
  mutations: {
    //添加
    addArr(state,o){
      state.arr.push(o)
    },
    },

5.渲染到页面

<li>
     <input type="checkbox" 
       v-model="item.isCheck"
            @click="$store.commit('checkOne',index)"
            />
         <span>{{item.txt}}</span>
         <button @click="$store.commit('delArr',index)">×</button >
        </li>

1.vuex的删除
1.点击button并把他的index传到vuex中

 <button @click="$store.commit('delArr',index)">×</button >

2.可以在vuex中通过定义的数组删除

mutations: {
 delArr(state,index){
     state.arr.splice(index,1)
    },
}

1.单选反选
点击单选把他传入vuex中

  <input type="checkbox" 
            v-model="item.isCheck"
            @click="$store.commit('checkOne',index)"
            />

2.在vue想中接收

mutations: {
checkOne(state,index){
     state.arr[index].isCheck =!state.arr[index].isCheck
     state.all=state.arr.every(item=>{
       return item.isCheck == true
     })
   },
   }

1.vuex的全选
在页面中定义一个checkbox

<input type="checkbox" v-model="$store.state.all" 
            @click="$store.commit('checkall')"
            />

2.在vuex中定义全选的checked

state: {
    all:false,
  },

3.接收

mutations: {
checkall(state){
     state.all =!state.all
     console.log(state.all)
     state.arr.forEach(item=>{
       item.isCheck=state.all
     })
   },
   }

1.定义vuex总条数,在vuex中写入

 getters:{
    checkNum(state){
      var newArr = state.arr.filter(item=>{
        return item.isCheck == true
      })
      return newArr.length
    }
  },

2.在也面中渲染

总条数{{$store.state.arr.length}}

1.组件拆分
1.新建文件
新建文件
2.在父组件中注册并引入子组件

<script>
import mylistone from './mylistone'
export default {
    components:{
        mylistone
    },
    data() {
        return {
        };
    },
    created() {
    },
    mounted() {
    },
    methods: {
    }
};
</script>

3.把父组件中的内容复制到子组件中通过poprs接收

<template>
    <div>
        <li>
            <input type="checkbox" 
            v-model="item.isCheck"
            @click="$store.commit('checkOne',index)"
            />
                <span>{{item.txt}}</span>
         
            <button @click="$store.commit('delArr',index)">×</button >
        </li>
    </div>
</template>

<script>
export default {
    props:['item','index'],
    data() {
        return {

        };
    },
    created() {

    },
    mounted() {

    },
    methods: {

    }
};
</script>

4.在页面中写入注册的标签

 <mylistone 
        v-for="(item,index) in $store.state.arr"
        :key="index"
        :item="item"
        :index="index"
        />
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值