Vue.js+Vuex:一个简单的记事本

本文介绍了使用Vue.js和Vuex实现一个简单的记事本应用的过程,包括UI设计、使用vue-cli构建项目、Vuex状态管理的运用,以及在开发过程中遇到的问题和改进方案,如焦点处理、记录删除、代码简化等。同时,文章探讨了Vue的绑定语法和事件监听,展示了如何利用Vuex提高组件间的通信效率。
摘要由CSDN通过智能技术生成

写在前面

最近在学习vue,正好也在掘金看到一篇文章,是作者在学习vue的过程中实现的一个记事本应用。
这个想法真的很棒,因为记事本的功能并不多,逻辑也很简单,是一个学习vue的好例子。
于是我也跟风实现了一下,下面就讲一下我实现的过程和一些收获。


UI

先看下UI吧

界面

111111

添加一篇记录

这里写图片描述

点击一篇记录

这里写图片描述

添加一篇记录为喜爱

这里写图片描述

查看喜爱记录

这里写图片描述


使用vue-cli构建项目

这个项目是用脚手架构建的,有了脚手架,根本不需要自己集结所有工具,只需要几行命令就可以拥有足够强大的构建框架。

# 安装vue-cli
npm install -g vue-cli

# 使用vue-cli初始化项目
vue init webpack note

# 进入到目录
cd note

# 安装依赖
npm install

# 开始运行
npm run dev

构建完成后会发现根目录下有个note文件夹,文件结构如下
这里写图片描述
main.js就是入口文件


vuex维护状态

vuex主要的工作原理就是其在全局维护一个store,在store里包含着stateactionsgettersmutations,显然使用一个store维护所以的数据,这样表现层只需要取得状态并显示就好,而修改状态只需要派遣一个事件,action会捕获事件并调用相应的mutations来修改state。

store.js
import Vue from 'vue'
import Vuex from 'vuex'

Vue.use(Vuex)

const state = {
    notes: [],
    activeNote: {},
    favorNotes: []
}

const getters = {
    notes: (state) => state.notes,
    activeNote: (state) => state.activeNote,
    favorNotes: (state) => state.favorNotes
}

const actions = {
    add_note({commit}) {
        return commit('ADD_NOTE');
    },
    delete_note({commit}) {
        return commit('DELETE_NOTE');
    },
    add_favor({commit}) {
        return commit('ADD_FAVOR');
    },
    remove_favor({commit}) {
        return commit('REMOVE_FAVOR');
    },
    edit_note({commit}, text) {
        return commit('EDIT_NOTE', text);
    },
    set_activenote({commit}, item) {
        return commit('SET_ACTIVENOTE', item);
    }
}

const mutations = {
    ADD_NOTE(state) {
        //根据id判断是否为同一个note
        const noteid = Math.round(Math.random()*10000);
        const note = {
            id: noteid,
            text: 'New Note, say somthing...',
            favor: false
        }
        state.notes.push(note);
        console.log(state.notes);
    },
    DELETE_NOTE(state) {
        let notes = state.notes;
        for(let key in notes) {
            if(notes[key].id == state.activeNote.id) {
                state.notes.splice(key, 1);
            }
        }
        state.activeNote = state.notes[0];
    },
    ADD_FAVOR(state) {
        state.activeNote.favor = true;
    },
    REMOVE_FAVOR(state) {
        state.activeNote.favor = false;
    },
    EDIT_NOTE(state, text) {
        state.activeNote.text = text;
        for(let i in state.notes) {
            if(i == state.activeNote) {
                i.text = text;
            }
        }
    },
    SET_ACTIVENOTE(state, item) {
        state.activeNote = item;
    }
}

export default new Vuex.Store({
    state,
    mutations,
    actions,
    getters
})

App.js

<template>
  <div id="app">
    <tool-bar></tool-bar>
    <note-list></note-list>
    <edit-note></edit-note>
  </div>
</template>

<script>
import EditNote from './components/editNote';
import ToolBar from 
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值