<span id="mktg5"></span>

<i id="mktg5"><meter id="mktg5"></meter></i>

        <label id="mktg5"><meter id="mktg5"></meter></label>
        最新文章專題視頻專題問答1問答10問答100問答1000問答2000關(guān)鍵字專題1關(guān)鍵字專題50關(guān)鍵字專題500關(guān)鍵字專題1500TAG最新視頻文章推薦1 推薦3 推薦5 推薦7 推薦9 推薦11 推薦13 推薦15 推薦17 推薦19 推薦21 推薦23 推薦25 推薦27 推薦29 推薦31 推薦33 推薦35 推薦37視頻文章20視頻文章30視頻文章40視頻文章50視頻文章60 視頻文章70視頻文章80視頻文章90視頻文章100視頻文章120視頻文章140 視頻2關(guān)鍵字專題關(guān)鍵字專題tag2tag3文章專題文章專題2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章專題3
        問答文章1 問答文章501 問答文章1001 問答文章1501 問答文章2001 問答文章2501 問答文章3001 問答文章3501 問答文章4001 問答文章4501 問答文章5001 問答文章5501 問答文章6001 問答文章6501 問答文章7001 問答文章7501 問答文章8001 問答文章8501 問答文章9001 問答文章9501
        當(dāng)前位置: 首頁 - 科技 - 知識(shí)百科 - 正文

        通過vue+vuex這2樣技術(shù)實(shí)現(xiàn)todolist(詳細(xì)教程)

        來源:懂視網(wǎng) 責(zé)編:小采 時(shí)間:2020-11-27 19:43:15
        文檔

        通過vue+vuex這2樣技術(shù)實(shí)現(xiàn)todolist(詳細(xì)教程)

        通過vue+vuex這2樣技術(shù)實(shí)現(xiàn)todolist(詳細(xì)教程):這篇文章主要介紹了vue + vuex todolist的實(shí)現(xiàn)示例代碼,我覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。todolist demo最近有空重新看了一下vuex,然后又寫了一個(gè)todolist小demo,原理比較簡單,主要是自己規(guī)范了一下代碼的寫法.下載地址 :vue-te
        推薦度:
        導(dǎo)讀通過vue+vuex這2樣技術(shù)實(shí)現(xiàn)todolist(詳細(xì)教程):這篇文章主要介紹了vue + vuex todolist的實(shí)現(xiàn)示例代碼,我覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。todolist demo最近有空重新看了一下vuex,然后又寫了一個(gè)todolist小demo,原理比較簡單,主要是自己規(guī)范了一下代碼的寫法.下載地址 :vue-te
        這篇文章主要介紹了vue + vuex todolist的實(shí)現(xiàn)示例代碼,我覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。

        todolist demo

        最近有空重新看了一下vuex,然后又寫了一個(gè)todolist小demo,原理比較簡單,主要是自己規(guī)范了一下代碼的寫法.

        下載地址 :vue-test_jb51.rar

        效果圖

        根組件

        <template>
         <p class='container'>
         <h1 class='title'>todo list demo</h1>
         <type-filter
         :types='types'
         :filter='filter'
         :handleUpdateFilter='handleUpdateFilter'
         />
         <add-todo :handleAdd='handleAdd' />
         <todo-item
         v-for='(item,index) in list'
         :key='item.id'
         :index='index'
         :data='item'
         :filter='filter'
         :handleRemove='handleRemove'
         :handleToggle='handleToggle'
         />
         </p>
        </template>
        
        <script>
        import { createNamespacedHelpers } from 'vuex'
        import TypeFilter from './filter'
        import AddTodo from './addTodo'
        import TodoItem from './item'
        
        const { mapState, mapMutations } = createNamespacedHelpers('TodoList')
        export default {
         name: 'todo-list-demo',
         components: { TypeFilter, TodoItem, AddTodo },
         computed: {
         ...mapState(['list', 'types', 'filter'])
         },
         methods: {
         ...mapMutations([
         'handleAdd',
         'handleRemove',
         'handleToggle',
         'handleUpdateFilter'
         ])
         }
        }
        </script>
        
        <style lang='scss' scoped>
        @import './style.scss';
        </style>

        過濾條件組件

        <template>
         <ul class='types'>
         <li
         v-for='(item,index) in types'
         :key='index + item'
         :class='filterClass(item)'
         @click='handleUpdateFilter(item)'
         >{{item}}</li>
         </ul>
        </template>
        
        <script>
        export default {
         name: 'type-filter',
         props: ['types', 'filter', 'handleUpdateFilter'],
         methods: {
         filterClass(filter) {
         return { filter: true, active: filter === this.filter }
         }
         }
        }
        </script>
        
        <style lang='scss' scoped>
        @import './style.scss';
        </style>

        添加待辦組件

        <template>
         <input
         type='text'
         name='add-todo'
         id='add-todo-input'
         class='add-todo'
         @keyup.enter='add'
         placeholder='input then hit enter'
         />
        </template>
        
        <script>
        export default {
         name: 'add-todo',
         props: ['handleAdd'],
         methods: {
         add(e) {
         const val = e.target.value.trim()
         if (val) {
         this.handleAdd({
         id: new Date().getTime(),
         message: val,
         status: false
         })
         e.target.value = ''
         }
         }
         }
        }
        </script>
        
        <style lang='scss' scoped>
        @import './style.scss';
        </style>

        單個(gè)待辦事項(xiàng)組件

        <template>
         <p v-if='show' class='todo-item'>
         <span
         :class='messageClass(data.status)'
         @click='handleToggle(data.id)'
         >{{index+1}}. {{data.message}}<i class='date'>{{dateFormat(data.id)}}</i></span>
         <span
         class='delete'
         @click='handleRemove(data.id)'
         >Delete</span>
         </p>
        </template>
        
        <script>
        export default {
         name: 'todo-items',
         props: ['data', 'filter', 'index', 'handleRemove', 'handleToggle'],
         computed: {
         show() {
         return (
         this.filter === 'ALL' ||
         (this.filter === 'UNDO' && !this.data.status) ||
         (this.filter === 'DONE' && this.data.status)
         )
         }
         },
         methods: {
         dateFormat(time) {
         const date = new Date(time)
         return `(${date.getFullYear()}-${date.getMonth() + 1}-${date.getDate()})`
         },
         messageClass: status => ({ message: true, done: status })
         }
        }
        </script>
        
        <style lang='scss' scoped>
        @import './style.scss';
        </style>

        vuex部分(模塊)

        const state = {
         list: [],
         types: ['ALL', 'UNDO', 'DONE'],
         filter: 'ALL'
        }
        const mutations = {
         handleAdd(state, item) {
         state.list = [...state.list, item]
         },
         handleRemove(state, id) {
         state.list = state.list.filter(obj => obj.id !== id)
         },
         handleToggle(state, id) {
         state.list = state.list.map(
         obj => (obj.id === id ? { ...obj, status: !obj.status } : obj)
         )
         },
         handleUpdateFilter(state, filter) {
         state.filter = filter
         }
        }
        export default {
         namespaced: true,
         state,
         mutations
        }

        上面是我整理給大家的,希望今后會(huì)對(duì)大家有幫助。

        相關(guān)文章:

        jQuery實(shí)現(xiàn)的回車觸發(fā)按鈕事件功能示例

        jQuery+Cookie實(shí)現(xiàn)切換皮膚功能

        Angular 組件之間的交互的示例代碼

        聲明:本網(wǎng)頁內(nèi)容旨在傳播知識(shí),若有侵權(quán)等問題請(qǐng)及時(shí)與本網(wǎng)聯(lián)系,我們將在第一時(shí)間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com

        文檔

        通過vue+vuex這2樣技術(shù)實(shí)現(xiàn)todolist(詳細(xì)教程)

        通過vue+vuex這2樣技術(shù)實(shí)現(xiàn)todolist(詳細(xì)教程):這篇文章主要介紹了vue + vuex todolist的實(shí)現(xiàn)示例代碼,我覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。todolist demo最近有空重新看了一下vuex,然后又寫了一個(gè)todolist小demo,原理比較簡單,主要是自己規(guī)范了一下代碼的寫法.下載地址 :vue-te
        推薦度:
        • 熱門焦點(diǎn)

        最新推薦

        猜你喜歡

        熱門推薦

        專題
        Top
        主站蜘蛛池模板: 亚洲AV永久无码精品水牛影视| 国产精品色午夜视频免费看| 亚洲国产AV无码专区亚洲AV| jzzjzz免费观看大片免费| mm1313亚洲精品无码又大又粗| 黄色三级三级三级免费看| 免费a级毛片大学生免费观看| 日韩电影免费在线观看网址| 免费a级毛片无码a∨性按摩| 人妻无码中文字幕免费视频蜜桃| 免费成人av电影| 中国videos性高清免费| 亚洲国产女人aaa毛片在线| 97av免费视频| 亚洲日产乱码一二三区别| 国产真人无遮挡作爱免费视频| 另类图片亚洲校园小说区| 久久精品国产亚洲一区二区三区| 男人都懂www深夜免费网站| 亚洲综合综合在线| 在线免费观看一区二区三区| 一级毛片免费不卡直观看| 亚洲国产精品无码久久SM | 亚洲国产精品ⅴa在线观看| 国产精品国产午夜免费福利看| 一级毛片免费不卡直观看| 亚洲av激情无码专区在线播放| 2021国产精品成人免费视频| 18禁亚洲深夜福利人口| 亚洲国产精品无码AAA片| 国国内清清草原免费视频99| 日韩欧美亚洲中文乱码| 亚洲日韩国产精品第一页一区| 欧洲一级毛片免费| 美女被免费视频网站| 亚洲国产精品久久久久婷婷老年 | 免费人成在线观看播放国产| 伊人久久大香线蕉免费视频| 国产精品亚洲四区在线观看| 亚洲热妇无码AV在线播放| 国产成人免费高清激情视频|