Äú¿ÉÒÔ¾èÖú£¬Ö§³ÖÎÒÃǵĹ«ÒæÊÂÒµ¡£

1Ôª 10Ôª 50Ôª





ÈÏÖ¤Â룺  ÑéÖ¤Âë,¿´²»Çå³þ?Çëµã»÷Ë¢ÐÂÑéÖ¤Âë ±ØÌî



  ÇóÖª ÎÄÕ ÎÄ¿â Lib ÊÓÆµ iPerson ¿Î³Ì ÈÏÖ¤ ×Éѯ ¹¤¾ß ½²×ù Model Center   Code  
»áÔ±   
   
 
     
   
 ¶©ÔÄ
  ¾èÖú
Óà Vuex ¹¹½¨Ò»¸ö±Ê¼ÇÓ¦ÓÃ
 
  2775  次浏览      27
  2018-11-27
 
±à¼­ÍƼö:
±¾ÎÄÀ´×Ôsegmentfault£¬ÎÄÕÂÖ÷Ҫͨ¹ý¹¹½¨Ò»¸ö±Ê¼ÇÓ¦ÓÃÀ´Ñ§Ï°ÔõôÓà VuexµÈÏà¹ØÄÚÈÝ¡£

ÔÚÕâ¸ö½Ì³ÌÀïÃæ£¬ÎÒÃÇ»áͨ¹ý¹¹½¨Ò»¸ö±Ê¼ÇÓ¦ÓÃÀ´Ñ§Ï°ÔõôÓà Vuex¡£ÎÒ»á¼òµ¥µØ½éÉÜһϠVuex µÄ»ù´¡ÄÚÈÝ£¬ ʲôʱºò¸ÃÓÃËüÒÔ¼°Óà Vuex µÄʱºò¸ÃÔõô×éÖ¯´úÂ룬ȻºóÎÒ»áÒ»²½Ò»²½µØ°ÑÕâЩ¸ÅÄîÓ¦Óõ½Õâ¸ö±Ê¼ÇÓ¦ÓÃÀïÃæ¡£

Õâ¸öÊÇÎÒÃÇÒª¹¹½¨µÄ±Ê¼ÇÓ¦ÓõĽØÍ¼£º

Äã¿ÉÒÔ´Ó Github Repo ÏÂÔØÔ´Â룬ÕâÀïÊÇ demo µÄµØÖ·¡£

Vuex ¸ÅÊö

Vuex ÊÇÒ»¸öÖ÷ÒªÓ¦ÓÃÔÚÖдóÐ͵¥Ò³Ó¦ÓõÄÀàËÆÓÚ Flux µÄÊý¾Ý¹ÜÀí¼Ü¹¹¡£ËüÖ÷Òª°ïÎÒÃǸüºÃµØ×éÖ¯´úÂ룬ÒÔ¼°°ÑÓ¦ÓÃÄڵĵÄ״̬±£³ÖÔÚ¿Éά»¤¡¢¿ÉÀí½âµÄ״̬¡£

Èç¹ûÄ㲻̫Àí½â Vue.js Ó¦ÓÃÀïµÄ״̬ÊÇʲôÒâ˼µÄ»°£¬Äã¿ÉÒÔÏëÏóÒ»ÏÂÄã´ËǰдµÄ Vue ×é¼þÀïÃæµÄ data ×ֶΡ£Vuex °Ñ״̬·Ö³É×é¼þÄÚ²¿×´Ì¬ºÍÓ¦Óü¶±ð״̬£º

×é¼þÄÚ²¿×´Ì¬£º½öÔÚÒ»¸ö×é¼þÄÚʹÓõÄ״̬(data ×Ö¶Î)

Ó¦Óü¶±ð״̬£º¶à¸ö×é¼þ¹²ÓõÄ״̬

¾Ù¸öÀý×Ó£º±ÈÈç˵ÓÐÒ»¸ö¸¸×é¼þ£¬ËüÓÐÁ½¸ö×Ó×é¼þ¡£Õâ¸ö¸¸×é¼þ¿ÉÒÔÓà props Ïò×Ó×é¼þ´«µÝÊý¾Ý£¬ÕâÌõÊý¾ÝͨµÀºÜºÃÀí½â¡£

ÄÇÈç¹ûÕâÁ½¸ö×Ó×é¼þÏ໥֮¼äÐèÒª¹²ÏíÊý¾ÝÄØ?»òÕß×Ó×é¼þÐèÒªÏò¸¸×é¼þ´«µÝÊý¾ÝÄØ?ÕâÁ½¸öÎÊÌâÔÚÓ¦ÓÃÌåÁ¿½ÏСµÄʱºò¶¼ºÃ½â¾ö£¬Ö»ÒªÓÃ×Ô¶¨Òåʼþ¼´¿É¡£

µ«ÊÇËæ×ÅÓ¦ÓùæÄ£µÄÀ©´ó£º

×·×ÙÕâЩʼþÔ½À´Ô½ÄÑÁË¡£Õâ¸öʼþÊÇÄĸö×é¼þ´¥·¢µÄ£¿Ë­ÔÚ¼àÌýËü£¿

ÒµÎñÂß¼­±é²¼¸÷¸ö×é¼þ£¬µ¼Ö¸÷ÖÖÒâÏë²»µ½µÄÎÊÌâ¡£

ÓÉÓÚÒªÏÔʽµØ·Ö·¢ºÍ¼àÌýʼþ£¬¸¸×é¼þºÍ×Ó×é¼þÇ¿ñîºÏ¡£

Vuex Òª½â¾öµÄ¾ÍÊÇÕâЩÎÊÌ⣬Vuex ±³ºóÓÐËĸöºËÐĵĸÅÄ

״̬Ê÷: °üº¬ËùÓÐÓ¦Óü¶±ð״̬µÄ¶ÔÏó

Getters: ÔÚ×é¼þÄÚ²¿»ñÈ¡ store ÖÐ״̬µÄº¯Êý

Mutations: ÐÞ¸Ä״̬µÄʼþ»Øµ÷º¯Êý

Actions: ×é¼þÄÚ²¿ÓÃÀ´·Ö·¢ mutations ʼþµÄº¯Êý

ÏÂÃæÕâÕÅͼÍêÃÀµØ½âÊÍÁËÒ»¸ö Vuex Ó¦ÓÃÄÚ²¿µÄÊý¾ÝÁ÷¶¯£º

ÕâÕÅͼµÄÖØµã£º

Êý¾ÝÁ÷¶¯Êǵ¥ÏòµÄ

×é¼þ¿ÉÒÔµ÷Óà actions

Actions ÊÇÓÃÀ´·Ö·¢ mutations µÄ

Ö»ÓÐ mutations ¿ÉÒÔÐÞ¸Ä״̬

store ÊÇ·´Ó¦Ê½µÄ£¬¼´£¬×´Ì¬µÄ±ä»¯»áÔÚ×é¼þÄÚ²¿µÃµ½·´Ó³

´î½¨ÏîÄ¿

ÏîÄ¿½á¹¹ÊÇÕâÑùµÄ£º

components/°üº¬ËùÓеÄ×é¼þ

vuex/°üº¬ Vuex Ïà¹ØµÄÎļþ (store, actions)

build.jsÊÇ webpack ½«ÒªÊä³öµÄÎļþ

index.htmlÊÇÒªäÖȾµÄÒ³Ãæ

main.jsÊÇÓ¦ÓõÄÈë¿Úµã£¬°üº¬Á˸ùʵÀý

style.css

webpack.config.js

н¨ÏîÄ¿£º

mkdir vuex-notes-app && cd vuex-note-app
npm init -y

°²×°ÒÀÀµ£º

npm install\
webpack webpack-dev-server\
vue-loader vue-html-loader css-loader vue-style-loader vue-hot-reload-api\
babel-loader babel-core babel-plugin-transform-runtime babel-preset-es2015\
babel-runtime@5\
--save-dev

npm install vue vuex --save

È»ºóÅäÖà Webpack:

// webpack.config.js
module.exports = {
entry: './main.js',
output: {
path: __dirname,
filename: 'build.js'
},
module: {
loaders: [
{
test: /\.vue$/,
loader: 'vue'
},
{
test: /\.js$/,
loader: 'babel',
exclude: /node_modules/
}
]
},
babel: {
presets: ['es2015'],
plugins: ['transform-runtime']
}
}

È»ºóÔÚ package.json ÀïÃæÅäÖÃһϠnpm script:

"scripts": {
"dev": "webpack-dev-server --inline --hot",
"build": "webpack -p"
}

ºóÃæ²âÊÔºÍÉú²úµÄʱºòÖ±½ÓÔËÐÐnpm run devºÍnpm run build¾ÍÐÐÁË¡£

´´½¨ Vuex Store

ÔÚ vuex/Îļþ¼ÐÏ´´½¨Ò»¸ö store.js:

import Vue from 'vue'
import Vuex from 'vuex'

Vue.use(Vuex)

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

const mutations = { ... }

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

ÏÖÔÚÎÒÓÃÏÂÃæÕâÕÅͼ°ÑÓ¦Ó÷ֽâ³É¶à¸ö×é¼þ£¬²¢°Ñ×é¼þÄÚ²¿ÐèÒªµÄÊý¾Ý¶ÔÓ¦µ½ store.js ÀïµÄ state¡£

g

App, ¸ù×é¼þ£¬¾ÍÊÇ×îÍâÃæÄǸöºìÉ«µÄºÐ×Ó

Toolbar ÊÇ×ó±ßµÄÂÌÉ«ÊúÌõ£¬°üÀ¨Èý¸ö°´Å¥

NotesList Êǰüº¬Á˱ʼDZêÌâÁбíµÄ×ÏÉ«¿ò¡£Óû§¿ÉÒÔµã»÷ËùÓбʼÇ(All Notes)»òÕßÊղرʼÇ(Favorites)

Editor ÊÇÓÒ±ßÕâ¸ö¿ÉÒԱ༭±Ê¼ÇÄÚÈݵĻÆÉ«¿ò

store.js ÀïÃæµÄ״̬¶ÔÏó»á°üº¬ËùÓÐÓ¦Óü¶±ðµÄ״̬£¬Ò²¾ÍÊǸ÷¸ö×é¼þÐèÒª¹²ÏíµÄ״̬¡£

±Ê¼ÇÁбí(notes: [])°üº¬ÁË NodesList ×é¼þÒªäÖȾµÄ notes ¶ÔÏó¡£µ±Ç°±Ê¼Ç(activeNote: {})Ôò°üº¬µ±Ç°Ñ¡ÖеıʼǶÔÏ󣬶à¸ö×é¼þ¶¼ÐèÒªÕâ¸ö¶ÔÏó£º

Toolbar ×é¼þµÄÊղغÍɾ³ý°´Å¥¶¼¶ÔÓ¦Õâ¸ö¶ÔÏó

NotesList ×é¼þͨ¹ý CSS ¸ßÁÁÏÔʾÕâ¸ö¶ÔÏó

Editor ×é¼þչʾ¼°±à¼­Õâ¸ö±Ê¼Ç¶ÔÏóµÄÄÚÈÝ¡£

ÁÄÍêÁË״̬(state),ÎÒÃÇÀ´¿´¿´ mutations, ÎÒÃÇҪʵÏÖµÄ mutation ·½·¨°üÀ¨£º

Ìí¼Ó±Ê¼Çµ½Êý×éÀï (state.notes)

°ÑÑ¡ÖеıʼÇÉèÖÃΪ¡¸µ±Ç°±Ê¼Ç¡¹(state.activeNote)

ɾµôµ±Ç°±Ê¼Ç

±à¼­µ±Ç°±Ê¼Ç

ÊÕ²Ø/È¡ÏûÊղص±Ç°±Ê¼Ç

Ê×ÏÈ,ÒªÌí¼ÓÒ»Ìõбʼǣ¬ÎÒÃÇÐèÒª×öµÄÊÇ£º

н¨Ò»¸ö¶ÔÏó

³õʼ»¯ÊôÐÔ

push µ½state.notesÀïÈ¥

°Ñн¨µÄÕâÌõ±Ê¼ÇÉèΪµ±Ç°±Ê¼Ç(activeNote)

ADD_NOTE (state) {
const new Note = {
text: 'New note',
favorite: fals
}
state.notes.push(newNote)
state.activeNote= newNote
}

È»ºó£¬±à¼­±Ê¼ÇÐèÒªÓñʼÇÄÚÈÝ text ×÷²ÎÊý£º

EDIT_NOTE (state, text) {
state.activeNote.text = text
}

ʣϵÄÕâЩ mutations ºÜ¼òµ¥¾Í²»Ò»Ò»×¸ÊöÁË¡£Õû¸ö vuex/store.js ÊÇÕâ¸öÑù×ӵģº

import Vue from 'vue'
import Vuex from 'vuex'

Vue.use(Vuex)

const state = {
note: [],
activeNote: {}
}

const mutations = {
ADD_NOTE (state) {
const newNote = {
text: 'New Note',
favorite: false
}
state.notes.push(newNote)
state.activeNote = newNote
},

EDIT_NOTE (state, text) {
state.activeNote.text = text
},

DELETE_NOTE (state) {
state.notes.$remove(state.activeNote)
state.activeNote = state.notes[0]
},

TOGGLE_FAVORITE (state) {
state.activeNote.favorite = !state.activeNote.favorite
},

SET_ACTIVE_NOTE (state, note) {
state.activeNote = note
}
}

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

½ÓÏÂÀ´ÁÄ actions, actions ÊÇ×é¼þÄÚÓÃÀ´·Ö·¢ mutations µÄº¯Êý¡£ËüÃǽÓÊÕ store ×÷ΪµÚÒ»¸ö²ÎÊý¡£±È·½Ëµ£¬µ±Óû§µã»÷ Toolbar ×é¼þµÄÌí¼Ó°´Å¥Ê±£¬ÎÒÃÇÏëÒªµ÷ÓÃÒ»¸öÄÜ·Ö·¢ADD_NOTE mutation µÄ action¡£ÏÖÔÚÎÒÃÇÔÚ vuex/Îļþ¼ÐÏ´´½¨Ò»¸ö actions.js ²¢ÔÚÀïÃæÐ´ÉÏ addNoteº¯Êý:

// actions.js
export const addNote = ({ dispatch }) => {
dispatch('ADD_NOTE')
}

ʣϵÄÕâЩ actions ¶¼¸úÕâ¸ö²î²»¶à£º

export const addNote = ({ dispatch }) => {
dispatch('ADD_NOTE')
}

export const editNote = ({ dispatch }, e) => {
dispatch('EDIT_NOTE', e.target.value)
}

export const deleteNote = ({ dispatch }) => {
dispatch('DELETE_NOTE')
}

export const updateActiveNote = ({ dispatch }, note) => {
dispatch('SET_ACTIVE_NOTE', note)
}

export const toggleFavorite = ({ dispatch }) => {
dispatch('TOGGLE_FAVORITE')
}

ÕâÑù£¬ÔÚ vuex Îļþ¼ÐÀïÃæÒªÐ´µÄ´úÂë¾Í¶¼Ð´ÍêÁË¡£ÕâÀïÃæ°üÀ¨ÁË store.js ÀïµÄ state ºÍ mutations,ÒÔ¼° actions.js ÀïÃæÓÃÀ´·Ö·¢ mutations µÄ actions¡£

¹¹½¨ Vue ×é¼þ

×îºóÕâ¸öС½á£¬ÎÒÃÇÀ´ÊµÏÖËĸö×é¼þ (App, Toolbar, NoteList ºÍ Editor) ²¢Ñ§Ï°ÔõôÔÚÕâЩ×é¼þÀïÃæ»ñÈ¡ Vuex store ÀïµÄÊý¾ÝÒÔ¼°µ÷Óà actions¡£

´´½¨¸ùʵÀý - main.js

main.jsÊÇÓ¦ÓõÄÈë¿ÚÎļþ£¬ÀïÃæÓиùʵÀý£¬ÎÒÃÇÒª°Ñ Vuex store ¼Óµ½µ½Õâ¸ö¸ùʵÀýÀïÃæ£¬½ø¶ø×¢Èëµ½ËüËùÓеÄ×Ó×é¼þÀïÃæ£º

import Vue from 'vue'
import store from './vuex/store'
import App from './components/App.vue'

new Vue({
store, // ×¢Èëµ½ËùÓÐ×Ó×é¼þ
el: 'body',
components: { App }
})

App - ¸ù×é¼þ

¸ù×é¼þ App »á import ÆäÓàÈý¸ö×é¼þ£ºToolbar, NotesList ºÍ Editor:

<template>
<div id="app">
<toolbar></toolbar>
<notes-list></notes-list>
<editor></editor>
</div>
</template>

<script>
import Toolbar from './Toolbar.vue'
import NotesList from './NotesList.vue'
import Editor from './Editor.vue'

export default {
components: {
Toolbar,
NotesList,
Editor
}
}
</script>

°Ñ App ×é¼þ·Åµ½ index.html ÀïÃæ£¬Óà BootStrap Ìṩ»ù±¾Ñùʽ£¬ÔÚ style.css Àïд×é¼þÏà¹ØµÄÑùʽ:

<!-- index.html -->

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>Notes | coligo.io</title>
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap
/3.3.6/css/bootstrap.min.css">
<link rel="stylesheet" href="styles.css">
</head>
<body>
<app></app>
<script src="build.js"></script>
</body>
</html>

Toolbar

Toolbar ×é¼þÌṩ¸øÓû§Èý¸ö°´Å¥£º´´½¨Ð±ʼǣ¬Êղص±Ç°Ñ¡ÖеıʼǺÍɾ³ýµ±Ç°Ñ¡Öеıʼǡ£

Õâ¶ÔÓÚ Vuex À´ËµÊǸö¾ø¼ÑµÄÓÃÀý£¬ÒòΪ Toolbar ×é¼þÐèÒªÖªµÀ¡¸µ±Ç°Ñ¡Öеıʼǡ¹ÊÇÄÄÒ»Ìõ£¬ÕâÑùÎÒÃDzÅÄÜɾ³ý¡¢ÊÕ²Ø/È¡ÏûÊÕ²ØËü¡£Ç°ÃæËµÁË¡¸µ±Ç°Ñ¡Öеıʼǡ¹ÊǸ÷¸ö×é¼þ¶¼ÐèÒªµÄ£¬²»Ó¦¸Ãµ¥¶À´æÔÚÓÚÈκÎÒ»¸ö×é¼þÀïÃæ£¬ÕâʱºòÎÒÃǾÍÄÜ·¢ÏÖ¹²ÏíÊý¾ÝµÄ±ØÒªÐÔÁË¡£

ÿµ±Óû§µã»÷±Ê¼ÇÁбíÖеÄijһÌõʱ£¬NodeList ×é¼þ»áµ÷ÓÃupdateActiveNote() action À´·Ö·¢ SET_ACTIVE_NOTE mutation, Õâ¸ö mutation »á°Ñµ±Ç°Ñ¡ÖеıʼÇÉèΪ activeNote¡£

Ò²¾ÍÊÇ˵£¬Toolbar ×é¼þÐèÒª´Ó state »ñÈ¡ activeNote ÊôÐÔ£º

vuex: {
getters: {
activeNote: state => state.activeNote
}
}

ÎÒÃÇÒ²ÐèÒª°ÑÕâÈý¸ö°´Å¥Ëù¶ÔÓ¦µÄ actions Òý½øÀ´,Òò´Ë Toolbar.vue ¾ÍÊÇÕâÑùµÄ£º

<template>
<div id="toolbar">
<i @click="addNote" class="glyphicon glyphicon-plus"></i>
<i @click="toggleFavorite"
class="glyphicon glyphicon-star"
:class="{starred: activeNote.favorite}"></i>
<i @click="deleteNote" class="glyphicon glyphicon-remove"></i>
</div>
</template>
<script>
import { addNote, deleteNote, toggleFavorite } from '../vuex/actions'

export default {
vuex: {
getters: {
activeNote: state => state.activeNote
},
actions: {
addNote,
deleteNote,
toggleFavorite
}
}
}
</script>

×¢Òâµ½µ± activeNote.favorite === trueµÄʱºò£¬Êղذ´Å¥»¹ÓÐÒ»¸ö starred µÄÀàÃû£¬Õâ¸öÀàµÄ×÷ÓÃÊǶÔÊղذ´Å¥Ìṩ¸ßÁÁÏÔʾ¡£

NotesList

NotesList ×é¼þÖ÷ÒªÓÐÈý¸ö¹¦ÄÜ£º

°Ñ±Ê¼ÇÁбíäÖȾ³öÀ´

ÔÊÐíÓû§Ñ¡Ôñ"ËùÓбʼÇ"»òÕßÖ»ÏÔʾ"ÊղصıʼÇ"

µ±Óû§µã»÷ijһÌõʱ£¬µ÷ÓÃupdateActiveNoteaction À´¸üРstore ÀïµÄ activeNote

ÏÔÈ»£¬ÔÚ NoteLists ÀïÐèÒª store ÀïµÄnotes arrayºÍactiveNote:

vuex: {
getters: {
notes: state => state.notes,
activeNote: state => state.activeNote
}
}

µ±Óû§µã»÷ijһÌõ±Ê¼Çʱ£¬°ÑËüÉèΪµ±Ç°±Ê¼Ç£º

import { updateActiveNote } from '../vuex/actions'

export default {
vuex: {
getters: {
// as shown above
},
actions: {
updateActiveNote
}
}
}

½ÓÏÂÀ´£¬¸ù¾ÝÓû§µã»÷µÄÊÇ"ËùÓбʼÇ"»¹ÊÇ"ÊղرʼÇ"À´Õ¹Ê¾¹ýÂ˺óµÄÁÐ±í£º

import { updateActiveNote } from '../vuex/actions'

export default {
data () {
return {
show: 'all'
}
},
vuex: {
// as shown above
},
computed: {
filteredNotes () {
if (this.show === 'all'){
return this.notes
} else if (this.show === 'favorites') {
return this.notes.filter(note => note.favorite)
}
}
}
}

ÔÚÕâÀï×é¼þÄÚµÄ show ÊôÐÔÊÇ×÷Ϊ×é¼þÄÚ²¿×´Ì¬³öÏֵģ¬ºÜÃ÷ÏÔ£¬ËüÖ»ÔÚ NoteList ×é¼þÄÚ³öÏÖ¡£

ÒÔÏÂÊÇÍêÕûµÄ NotesList.vue:

<template>
<div id="notes-list">

<div id="list-header">
<h2>Notes | coligo</h2>
<div class="btn-group btn-group-justified" role="group">
<!-- All Notes button -->
<div class="btn-group" role="group">
<button type="button" class="btn btn-default"
@click="show = 'all'"
:class="{active: show === 'all'}">
All Notes
</button>
</div>
<!-- Favorites Button -->
<div class="btn-group" role="group">
<button type="button" class="btn btn-default"
@click="show = 'favorites'"
:class="{active: show === 'favorites'}">
Favorites
</button>
</div>
</div>
</div>
<!-- render notes in a list -->
<div class="container">
<div class="list-group">
<a v-for="note in filteredNotes"
class="list-group-item" href="#"
:class="{active: activeNote === note}"
@click="updateActiveNote(note)">
<h4 class="list-group-item-heading">
{{note.text.trim().substring(0, 30)}}
</h4>
</a>
</div>
</div>

</div>
</template>

<script>
import { updateActiveNote } from '../vuex/actions'

export default {
data () {
return {
show: 'all'
}
},
vuex: {
getters: {
notes: state => state.notes,
activeNote: state => state.activeNote
},
actions: {
updateActiveNote
}
},
computed: {
filteredNotes () {
if (this.show === 'all'){
return this.notes
} else if (this.show === 'favorites') {
return this.notes.filter(note => note.favorite)
}
}
}
}
</script>

Õâ¸ö×é¼þµÄ¼¸¸öÒªµã£º

ÓÃǰ30¸ö×Ö·ûµ±×÷¸Ã±Ê¼ÇµÄ±êÌâ

µ±Óû§µã»÷Ò»Ìõ±Ê¼Ç£¬¸Ã±Ê¼Ç±ä³Éµ±Ç°Ñ¡ÖбʼÇ

ÔÚ"all"ºÍ"favorite"Ö®¼äÑ¡Ôñʵ¼ÊÉϾÍÊÇÉèÖà show ÊôÐÔ

ͨ¹ý:class=""ÉèÖÃÑùʽ

Editor

Editor ×é¼þÊÇ×î¼òµ¥µÄ£¬ËüÖ»×öÁ½¼þÊ£º

´Ó store »ñÈ¡µ±Ç°±Ê¼ÇactiveNote£¬°ÑËüµÄÄÚÈÝչʾÔÚ textarea

ÔÚÓû§¸üбʼǵÄʱºò£¬µ÷Óà editNote() action

ÒÔÏÂÊÇÍêÕûµÄ Editor.vue:

<template>
<div id="note-editor">
<textarea
:value="activeNoteText"
@input="editNote"
class="form-control">
</textarea>
</div>
</template>
<script>
import { editNote } from '../vuex/actions'

export default {
vuex: {
getters: {
activeNoteText: state => state.activeNote.text
},
actions: {
editNote
}
}
}
</script>

 

Ïà¹ØÎÄÕÂ

Éî¶È½âÎö£ºÇåÀíÀôúÂë
ÈçºÎ±àд³öÓµ±§±ä»¯µÄ´úÂë
ÖØ¹¹-ʹ´úÂë¸ü¼ò½àÓÅÃÀ
ÍŶÓÏîÄ¿¿ª·¢"±àÂë¹æ·¶"ϵÁÐÎÄÕÂ
Ïà¹ØÎĵµ

ÖØ¹¹-¸ÄÉÆ¼ÈÓдúÂëµÄÉè¼Æ
Èí¼þÖØ¹¹v2
´úÂëÕû½àÖ®µÀ
¸ßÖÊÁ¿±à³Ì¹æ·¶
Ïà¹Ø¿Î³Ì

»ùÓÚHTML5¿Í»§¶Ë¡¢Web¶ËµÄÓ¦Óÿª·¢
HTML 5+CSS ¿ª·¢
ǶÈëʽC¸ßÖÊÁ¿±à³Ì
C++¸ß¼¶±à³Ì

   
2775 ´Îä¯ÀÀ       27