<!DOCTYPE html><html><head><meta charset="utf-8"><meta name="viewport" content="width=device-width,initial-scale=1.0"><title>vue-notes</title></head><body><div id="app"><p>{{title}}</p><p v-if="showSub">{{subTitle}}</p></div><!-- built files will be auto injected --></body></html>
main.js
// The Vue build version to load with the `import` command// (runtime-only or standalone) has been set in webpack.base.conf with an alias.import Vue from'vue'// import App from './App'// import router from './router'
Vue.config.productionTip =false/* eslint-disable no-new */// new Vue({// el: '#app',// router,// components: { App },// template: '<App/>'// })newVue({// 将 inndex.html 文件里面的 id="app",这个 div 作为整个应用的容器
el:'#app',// data 存放的是变量data(){return{
title:'hello Vue.js',
subTitle:'Vue is good',
showSub:true}}})
以上是变量的渲染,既然是 todoList ,就是一个列表,接下来进行列表的渲染
main.js
newVue({
el:'#app',data(){return{
title:'hello Vue.js',
subTitle:'Vue is good',
showSub:true,
todos:['吃饭','睡觉','写代码']}}})
index.html
<body><div id="app"><p>{{title}}</p><p v-if="showSub">{{subTitle}}</p><ul><li v-for="todo in todos">{{todo}}</li></ul></div><!-- built files will be auto injected --></body>
列表渲染出来了,但是数据是固定的,接下来要把用户输入的值,渲染到界面上
index.html
<body><div id="app"><p>{{title}}</p><p v-if="showSub">{{subTitle}}</p>// input 输入框,绑定 mytodo 变量<div class=""><input type="text" v-model="mytodo">// button 绑定点击事件 handleClick<button @click="handleClick">添加</button></div><ul><li v-for="todo in todos">{{todo}}</li></ul></div><!-- built files will be auto injected --></body>
main.js
newVue({
el:'#app',data(){return{
title:'hello Vue.js',
subTitle:'Vue is good',
showSub:true,
mytodo:'',
todos:['吃饭','睡觉','写代码']}},
methods:{handleClick(){// 将用户输入的值, push 到 todo 这个列表里面this.todos.push(this.mytodo)// 输入框内容置空this.mytodo =''}}})
接下来要实现,点击 todo 变成灰色,告诉用户这件事已经做完了,并且在页面中添加用户 todo 的数据
index.html
<head><meta charset="utf-8"><meta name="viewport" content="width=device-width,initial-scale=1.0"><title>vue-notes</title><style>
li.done {
text-decoration: line-through;
color: #ccc;}</style></head><body><div id="app"><p>{{title}}</p><p v-if="showSub">{{subTitle}}</p><div class=""><input type="text" v-model="mytodo"><button @click="handleClick">添加</button></div><ul>// 给 todo 添加一个 toggle 函数 同时将 todo 的 Index 传入<li :class="{'done': todo.done}" @click="toggle(index)" v-for="(todo, index) in todos">{{index}}-----{{todo.text}}</li></ul>// todo 的数量 remain 是未完成的数量<p>{{remain}}/{{todos.length}}</p></div><!-- built files will be auto injected --></body>
<body><div id="app"><p>{{title}}</p><p v-if="showSub">{{subTitle}}</p><div class=""><input @keyup.enter="handleClick" type="text" v-model="mytodo"><button @click="handleClick">添加</button>// 清空已完成的 todo<button @click="clean">清空</button></div><ul><li :class="{'done': todo.done}" @click="toggle(index)" v-for="(todo, index) in todos">{{index}}-----{{todo.text}}</li></ul><p>{{remain}}/{{todos.length}}</p></div><!-- built files will be auto injected --></body>
// The Vue build version to load with the `import` command// (runtime-only or standalone) has been set in webpack.base.conf with an alias.import Vue from'vue'import App from'./App'import router from'./router'
Vue.config.productionTip =false/* eslint-disable no-new */newVue({
el:'#app',
router,
components:{ App },
template:'<App/>'})
index.html
<!DOCTYPE html><html><head><meta charset="utf-8"><meta name="viewport" content="width=device-width,initial-scale=1.0"><title>vue-notes</title><style></style></head><body><div id="app"></div><!-- built files will be auto injected --></body></html>