vue 2 의 todolist 입문 작은 프로젝트 에 대한 상세 한 분석
프로젝트 는
vue.js
vue.cli
webpack
ES6
node
환경 을 사 용 했 고 프로젝트 를 완성 한 후에 이런 기술 창고 에 대해 알 게 될 것 이다.개발 환경 을 마련 하 다
$ npm install -g vue-cli
$ vue init , vue init webpack todolist
$ cd todolist
$ npm install
$ npm run dev
// , ~ index.html
import 'todomvc-app-css/index.css'
import Vue from 'vue'
// localStorage
var STORAGE_KEY = 'todos-vuejs-2.0'
var todoStorage = {
fetch: function () {
var todos = JSON.parse(localStorage.getItem(STORAGE_KEY) || '[]')
todos.forEach(function (todo, index) {
todo.id = index
})
todoStorage.uid = todos.length
return todos
},
save: function (todos) {
localStorage.setItem(STORAGE_KEY, JSON.stringify(todos))
}
}
//
var filters = {
all(todos) {
return todos
},
active(todos) {
return todos.filter((todo) => {
return !todo.completed
})
},
completed(todos) {
return todos.filter((todo) => {
return todo.completed
})
},
}
let app = new Vue({
el: '.todoapp', // ~ <section class="todoapp">
data: {
msg: 'hello world',
title: ' ', // ~ {{title}}
newTodo: '',
todos: todoStorage.fetch(), // ~ v-show="todos.length" ; ~ {{todos.length>1?'items':'item'}} li ~ v-for="(todo,index) in filteredTodos"
editedTodo: '', //
hashName: 'all'
},
watch: {
todos: {
handler: function (todos) {
todoStorage.save(todos)
},
deep: true
}
},
computed: {
remain() {
return filters.active(this.todos).length // ~ {{remain}}
},
isAll: { // ~ v-model="isAll"
get() {
return this.remain === 0
},
set(value) {
this.todos.forEach((todo) => {
todo.completed = value
})
}
},
filteredTodos() { // hashName todos ~ v-for="(todo,index) in filteredTodos"
return filters[this.hashName](this.todos)
}
},
methods: {
addTodo(e) { // , (trim ) ~ v-model.trim="newTodo"
if (!this.newTodo) {
return
}
this.todos.push({
id: todoStorage.uid++,
content: this.newTodo,
completed: false // v-model completed ~:class="{completed:todo.completed; ~ v-model="todo.completed"
})
this.newTodo = ''
},
removeTodo(index) { // x , todo ~ @click="removeTodo(index)"
this.todos.splice(index, 1)
},
editTodo(todo) { // ~ @dblclick="editTodo(todo)"
this.editCache = todo.content //
this.editedTodo = todo // ~ editing:todo==editedTodo}"
},
doneEdit(todo, index) { // ~ @blur="doneEdit(todo)";@keyup.enter="doneEdit(todo)"
this.editedTodo = null //
if (!todo.content) { // , todo
this.removeTodo(index)
}
},
cancelEdit(todo) { // esc ~ @keyup.esc="cancelEdit(todo)">
this.editedTodo = null
todo.content = this.editCache // esc ,
},
clear() { // ~ @click="clear"
this.todos = filters.active(this.todos) // ~
}
},
directives: { // ~ v-focus="todo == editedTodo"
focus(el, value) { //
if (value) {
el.focus()
}
}
}
})
//hash(url # )
function hashChange() {
// ~ :class="{selected:hashName=='all'}";:class="{selected:hashName=='active'}";:class="{selected:hashName=='completed'}"
let hashName = location.hash.replace(/#\/?/, '') // #/?, all,active,completed
if (filters[hashName]) { // hashName
app.hashName = hashName // app hashName
} else {
location.hash = '' //
app.hashName = 'all' // ‘all',
}
}
window.addEventListener('hashchange', hashChange) // hash
이상 이 바로 본 고의 모든 내용 입 니 다.여러분 의 학습 에 도움 이 되 고 저 희 를 많이 응원 해 주 셨 으 면 좋 겠 습 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Fastapi websocket 및 vue 3(Composition API)1부: FastAPI virtualenv 만들기(선택 사항) FastAPI 및 필요한 모든 것을 다음과 같이 설치하십시오. 생성main.py 파일 및 실행 - 브라우저에서 이 링크 열기http://127.0.0.1:...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.