1.前言:学习Vue.js做了一个简单的表单CRUD的demo,没有涉及服务器。
<!doctype html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="Generator" content="EditPlus®">
<meta name="Author" content="">
<meta name="Keywords" content="">
<meta name="Description" content="">
<title>demo2-cd</title>
<script src="e:\html\js\vue.js"></script>
<link href="e:\html\css\bootstrap.min.css" rel="stylesheet">
</head>
<body class="container">
<div id="app" class='row'>
<div class="col-md-6">
<div class="toolbar">
<label class="control-label col-md-4">keyword:</label>
<input type="text" v-model="keyword" />
<!--v-on:的缩写是@-->
<input type="button" @click="query()" value="search" />
</div>
<table class="table table-bordered">
<tr>
<th>id</th>
<th>title</th>
<th>desc</th>
<th>edit</th>
<th>delete</th>
</tr>
<!--v-for列表渲染 index为可选项-表示列表的下标-->
<!--v-show渲染display属性,优先级比v-for低-->
<tr v-for="(item,index) in items" v-show="item.view">
<!--{{Vue.js的代码}}-->
<td>{{item.id}}</td>
<td>{{item.title}}</td>
<td>{{item.desc}}</td>
<th><input type="button" value="edit" @click="edit(item.id)" class="btn btn-warning btn-sm"/></th>
<th><input type="button" value="delete" @click="remove(item.id)" class="btn btn-danger btn-sm"/></th>
</tr>
</table>
</div>
<div class="col-md-6">
<div class="form-inline">
<label for="index" class="control-label col-md-4">id:</label>
<label type="text" class="control-label col-md-8">{{id}}</label>
</div>
<div class="form-inline">
<label for="title" class="control-label col-md-4">title:</label>
<!--v-model等价于v-bing:value 绑定的对象需要在Vue实例中data中定义-->
<input type="text" v-model="title" class="form-control col-md-8">
</div>
<div class="form-inline">
<label for="desc" class="control-label col-md-4">desc:</label>
<input type="text" v-model="desc" class="form-control col-md-8">
</div>
<div class="form-inline">
<label class="control-label col-md-9"></label>
<!--v-bind:的缩写是:,作用是对属性进行绑定-->
<input type="button" v-model="status" v-on:click="saveUpdate()" class="btn btn-primary" :disabled='canSave'/>
</div>
</div>
</div>
<script>
var id=0;
var Item=function(title,desc){
this.title=title;
this.desc=desc;
this.id=id++;
//是否可见
this.view=true;
};
new Vue({
//绑定该Vue组件对象
el:'#app',
//绑定的属性在这里定义
data:{
items:[],
title:'',
desc:'',
id:'',
status:'新增',
keyword:''
},
methods:{
//根据id是否有值,选择新增或者更新
saveUpdate:function(){
if(this.id!==''){
//写法1:
//var obj=this.items[this.index];
//写法2: 箭头函数---ES6的新特性
var obj=(this.items.filter(v => v.id === this.id))[0];
obj.title=this.title;
obj.desc=this.desc;
obj.id=this.id;
this.reset();
}else{
this.items.push(new Item(this.title,this.desc))
this.title=this.desc='';
console.log(JSON.stringify(this.items));
}
list=this.items;
},
//删除元素
remove:function(id){
var obj=(this.items.filter(v => v.id === id))[0];
var index=this.items.indexOf(obj);
this.items.splice(index,1);
this.reset();
},
//预编辑元素
edit:function(id){
var obj=(this.items.filter(v => v.id === id))[0];
this.id=obj.id;
this.title=obj.title;
this.desc=obj.desc;
this.status='编辑';
},
//重置预编辑
reset:function(){
this.id='';
this.status='新增';
this.title='';
this.desc='';
this.keyword='';
},
//查询视图
query:function(){
for(var i of this.items){
//隐藏不合关键词的结果
if(i.title.indexOf(this.keyword) ===-1){
i.view=false;
}else{
i.view=true;
}
}
this.reset();
}
},
//计算属性
computed:{
canSave:function(){
return !this.title||!this.desc;
}
}
})
</script>
</body>
</html>
2.学习的参考博客为:http://www.cnblogs.com/Johnzhang/p/7214215.html