Vue的todolist实例 Vue 中的模块化以及封装Storage实现todolist 待办事项 已经完成 和进行中持久化

双向绑定

App.vue

<template>
  <div id="app">

    <input type="text" v-model="todo">

    <button @click="doAdd()">+增加</button>

    <ul>
      <li v-for="(item,key) in list">
        {{item}} --- <button @click="removeData(key)">删除</button>
      </li>
    </ul>
  </div>
</template>

<script>
export default {
  name: 'app',
  data () {
    return {
      msg: 'Welcome to Your Vue.js App',
      todo:'',
      list:[],
    }
  },
  methods:{
    doAdd(){
      //alert(this.todo);
      //获取text里面的值放入list
      this.list.push(this.todo);
      this.todo='';
    },
    //此处的data是形参,也可以写成key
    removeData(key){
      //alert(data);
      //删除功能array.splice(index,num)
      this.list.splice(key,1);
    },
  }
}
</script>

运行截图:
在这里插入图片描述

list双向绑定高级:

App.vue

<template>
  <div id="app">

    <!-- Input增加键盘监听事件 -->
    <input type="text" v-model="todo" @keydown="doAdd($event)">


    <!-- <button @click="doAdd()">+增加</button> -->

    <h2>进行中</h2>

    <ul>
      <li v-for="(item,key) in list" v-if="!item.checked">
        <input type="checkbox" v-model="item.checked">{{item.title}} --- <button @click="removeData(key)">删除</button>
      </li>
    </ul>

    <h2>已完成</h2>

    <ul class="finish">
      <li v-for="(item,key) in list" v-if="item.checked">
        <input type="checkbox" v-model="item.checked">{{item.title}} --- <button @click="removeData(key)">删除</button>
      </li>
    </ul>

    <h2 v-if='ok'>这是一个true</h2>
    <h2 v-if='!ok'>这是一个false</h2>

    <button @click="getList">获取list的值</button>

  </div>
</template>

<script>
export default {
  name: 'app',
  data () {
    return {
      msg: 'Welcome to Your Vue.js App',
      ok:true,
      todo:'',
      list:[],
    }
  },
  methods:{
    doAdd(e){
      console.log(e.keyCode)
      //alert(this.todo);
      //获取text里面的值放入list
      if(e.keyCode==13){
      this.list.push({
        title:this.todo,
        checked:false,
        });
      this.todo='';
      }
    },
    //此处的data是形参,也可以写成key
    removeData(key){
      //alert(data);
      //删除功能array.splice(index,num)
      this.list.splice(key,1);
    },
    getList(){
      console.log(this.list);
    },
  }
}
</script>

<style lang="scss">
  .finish{
    li{
      background: #eee;
    }
  }
</style>

运行截图:
在input框输入文字,加入到进行中下面
在这里插入图片描述

Vue 中的模块化以及封装Storage实现todolist 待办事项 已经完成 和进行中持久化:

实现了:
在Input框输入后进入到“进行中”,点击“进行中”的某个checkbox,会进入到已完成,同时封装了strorage.js方法实现刷新页面,数据的持久化显示

App.vue

<template>


  <div id="app">

      <input type="text" v-model='todo' @keydown="doAdd($event)" />

      <hr>
    <br>

    <h2>进行中</h2>

      <ul>

        <li v-for="(item,key) in list" v-if="!item.checked">
           <input type="checkbox" v-model="item.checked" @change="saveList()" /> {{item.title}}   --  <button @click="removeData(key)">删除</button>
        </li>
      </ul>

    <br>
    <br>
    <h2>已完成</h2>



      <ul>
        <li v-for="(item,key) in list" v-if="item.checked">
          <input type="checkbox"  v-model="item.checked" @change="saveList()" /> {{item.title}}  -- <button @click="removeData(key)">删除</button>
        </li>
      </ul>
  </div>
</template>

<script>


    import storage from './model/storage.js';

    //console.log(storage);

    export default {
      data () {
        return {

          todo:'' ,
          list: []
        }
      },
      methods:{

        doAdd(e){
              // console.log(e);
              //键盘监听,keycode==13为回车
              if(e.keyCode==13){
                  this.list.push({
                    title:this.todo,
                    checked:false
                  })
              }

              storage.set('list',this.list);
        },
        removeData(key){

            this.list.splice(key,1)

            storage.set('list',this.list);
        }
        , saveList(){

           storage.set('list',this.list);
        }

      },mounted(){   /*生命周期函数       vue页面刷新就会触发的方法*/

          var list=storage.get('list');

          if(list){  /*注意判断*/
            this.list=list;
          }
      }

    }
</script>


<style lang="scss">

.finish{


  li{
    background:#eee;
  }
}

</style>

封装:
storage.js

//封装操作localstorage本地存储的方法   模块化的文件


// nodejs  基础



var storage={

    set(key,value){

        localStorage.setItem(key, JSON.stringify(value));
    },
    get(key){

        return JSON.parse(localStorage.getItem(key));
    },remove(key){
        localStorage.removeItem(key);
    }

}

export default storage;



运行截图:
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
Vue,Pinia是一个状态管理库,它提供了一种简单而强大的方式来管理应用程序的状态。关于Pinia的持久实现,可以通过以下步骤来实现: 1. 安装依赖:首先,你需要安装`@pinia/persist`插件,它是Pinia提供的用于持久的插件。你可以使用npm或者yarn进行安装。 2. 创建插件:在你的Vue项目,创建一个名为`persist.ts`(或者其他你喜欢的名称)的文件,并在其编写以下代码: ```typescript import { createPersist } from '@pinia/persist' // 创建持久插件 export const persistPlugin = createPersist({ // 指定要持久的状态模块 // 这里假设你有一个名为counter的状态模块 // 如果有多个模块需要持久,可以在这里添加多个模块 // modules: ['counter'] }) // 在Vue应用程序使用插件 // 在创建Pinia实例之前调用usePlugin方法 // 例如,在main.ts文件: // import { createApp } from 'vue' // import { createPinia } from 'pinia' // import { persistPlugin } from './persist' // const app = createApp(App) // const pinia = createPinia() // pinia.use(persistPlugin) // app.use(pinia) ``` 3. 配置持久选项:在`createPersist`方法,你可以传递一些选项来配置持久行为。例如,你可以指定存储引擎(如localStorage或sessionStorage)、存储键的前缀等。具体的选项可以参考Pinia Persist的文档。 4. 使用持久:在需要进行持久的状态模块,你可以使用`persist`选项来指定哪些状态需要进行持久。例如,在`counter`状态模块: ```typescript import { defineStore } from 'pinia' export const useCounterStore = defineStore('counter', { state: () => ({ count: 0, }), actions: { increment() { this.count++ }, }, // 指定需要持久的状态 persist: true, }) ``` 这样,当你在应用程序使用`useCounterStore`时,`count`状态将会被自动持久
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值