Vue.js(读音 /vjuː/, 类似于 view) 是一套构建用户界面的渐进式框架。
Vue 只关注视图层, 采用自底向上增量开发的设计。
Vue 的目标是通过尽可能简单的 API 实现响应的数据绑定和组合的视图组件。
Vue 学习起来非常简单。
Vue.js是一个轻巧、高性能、可组件化的MVVM库。Vue 的核心库只关注视图层,并且非常容易学习,同时拥有非常容易上手的API(中英文都有提供)
Vue快速入门
准备:
1. Vue.js 地址:http://cn.vuejs.org/
2. Bootstrap.js 地址:http://v3.bootcss.com/getting-started/#download
没错就只需要这两个就可以开发了 vue是核心文件,bootstrap在这里只是为了提高开发效率而引用的,是可选的。 现在建个html文件引入刚下载好的两个文件这里我们只需要引用bootstrap的css样式文件即可,现在是这样的:
示例:
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>Document</title> <link rel="stylesheet" type="text/css" href="http://cdn.bootcss.com/bootstrap/3.3.0/css/bootstrap.min.css"> </head> <body> <div> <div class="col-md-6 col-md-offset-3"> <h1>Vue demo</h1> <div id="app"> ....... </div> </div> </div> <script src="./public/image/vue.js"></script> </body> </html>
现在我们来先看段代码:
<div id="app"> <div>{{message}}</div> </div>
new Vue({ el:'#app', data: { message:'hello vue.js.' } });
这个例子在浏览器解析时会输出hello vue.js。
我们先不管为什么,我们先理解他的逻辑。 在这个例子里我们的
<div id="app"> <div>{{message}}</div> </div>
就是视图层,而
new Vue({ el:'#app', data: { message:'hello vue.js.' } });
就是数据层,在使用Vue.js之前,我们都需要先像这样实例化一个Vue对象。 里面有四个常用的属性,el、data、methods、components。
1. el:声明vuejs管理的边界,类似于angular的ng-app,把数据绑定给谁。 上面的例子中将数据绑定给了#app。
2. data:专门存储一些数据的属性,数据一定是对象格式。 上面的例子中给message赋值hello vue.js!
3. methods:专门放置我们的事件的方法
4. components:创建组件
回到上面的例子el指定了#app,data存放了数据message,然后利用表达式{{}}将数据显示到页面。
接下来再看个例子:
<div id="app"> <p>{{ message }}</p> <input v-model="message"> </div>
new Vue({ el: '#app', data: { message: 'Hello Vue!' } })
这里用到了新的指令v-model,其作用就是接收用户输入的一些数据,直接就可以将这些数据 挂载到data属性里面,使得实现双向数据绑定更加容易。
接下来介绍一些常用的指令:
1. v-if:通过判断加载内容,若为真加载,为假时删除元素
<div id="app"> <p v-if="seen">Now you see me</p> </div> new Vue({ el: '#app', data: { seen: true } })
2. v-for:控制html元素的循环,实现数据列表
<div id="app"> <ol> <li v-for="todo in todos"> {{ todo.text }} </li> </ol> </div> new Vue({ el: '#app', data: { todos: [ { text: 'Learn JavaScript' }, { text: 'Learn Vue' }, { text: 'Build something awesome' } ] } })
1.Learn JavaScript
2.Learn Vue
3.Bulid sonething awesome
3. v-show:元素会始终渲染并保持在dom中,并且安全性没有v-if高,因为v-show 用法和v-if相同,只是v-show将元素display设置成none,并不是将元素直接移除
4. v-else:元素必须紧跟在v-if或v-show元素的后面——否则它不能被识别。
<div v-if="a"></div> <div v-else></div>
5. v-bind:给页面中html属性进行绑定,拥有缩写“:”,也推荐使用缩写
<img v-bind:src="img" /> <div v-bind:style="styles">style</div> data:{ img:"img/logo.png", styles:{color:'red',fontSize:'30px'} }
可以缩写成这样
<img :src="img" /> <div :style="styles">style</div>
6.v-on:对页面中的事件进行绑定,使用方法 v-on:click="函数名称",函数就是存放在methods属性里的方法名,例如
<button v-on:click="oclick()">点击</button> methods:{ oclick:function(){ alert(1); } }
也有缩写“@”
<button @click="oclick()">点击</button>
效果是一样的
7.$event:事件对象,如同我们原声js中的event
<div @click="show($event)">点我</div> methods:{ show:function(ev){ alert(ev.clientX) } }
结果:
See more 177
8. stop:阻止事件冒泡
//原声:ev.cancelBubble=true; @click.stop="show()"
9. prevent:阻止默认事件
//原声:ev.preventDefault(); @click.prevent="show()"
10. self:当事件在该元素本身触发时触发回调
@click.felf="show()"
11. capture:添加事件侦听器时使用事件捕获模式
@click.capture="show()"
12. 键盘事件:
//原声:ev.keyCode (13回车) /*@keydown:任意键按下 @keyup:任意键抬起 //方向键:.up:上 .down:下 .right:右 .left:左 .enter:回车 //键码:.13:回车 <div @keydown="get()">啦啦啦~</div> <div @keyup.enter="get()">啦啦啦~</div>
看上面例子就注意到vue支持键码
13. 过滤器:
<p>{{ jiexige|uppercase }}</p> //uppercase 大写、 lowercase 小写、 capitalize 首字母大写、currency 参数:"¥" 钱币
以上是vue基本使用,接下来讲讲vue-cli的需要注意的格式,最后做个经典例子“TODOLIST”
1.vue对象里不能有缩进,一般缩进用两个空格代替
2.冒号后面要跟一个空格
3.逗号后面也要跟一个空格
4.存放链接需要使用require
5.数据只能用单引号包着
{ url: require('./assets/images/img4.png'), }
目前只注意到这些,将不定期更新,下面来做个例子:我先前做好了可以点击此处看演示TODOLIST, 下面我来讲解下
我的数据层
window.onload = function(){ new Vue({ el: "#todu", data: { myData: [], username: "", ages: "", nowindex: 1, m: false }, methods: { addData:function(){ if(this.$refs.sele.value==""){ alert("请填满资料!") }else{ this.myData.push({ name:this.username, age:this.ages }); this.username="", this.ages="" } }, noindex:function(n){ if(n==-1){ this.myData = []; }else{ this.myData.splice(n,1); } } } }); }
视图层
<div id="todu"> <h1>TODOLIST</h1> <form role="form"> <label for="name">名称:</label> <input type="text" name="name" id="name" ref="sele" placeholder="请输入名称" v-model="username"> <br> <label for="sag">年龄:</label> <input type="text" name="seg" id="seg" ref="sele" placeholder="请输入年龄" v-model="ages"> <br> <div> <button type="button" class="btn btn-primary" @click="addData()" value="添加">添加</button> <input class="btn btn-danger" type="reset" value="重置"> </div> </form> <hr> <h3 class="text-center text-muted">数据查询列表</h3> <table role="table"> <tr> <th>#</th> <th>名称</th> <th>年龄</th> <th>操作</th> </tr> <tr v-for="(list,index) in myData"> <td>{{index+1}}</td> <td>{{list.name}}</td> <td>{{list.age}}</td> <td> <button class="btn btn-danger" data-toggle="modal" data-target="#layer" @click="nowindex=index,m=false">删除</button> </td> </tr> <tr v-show="myData.length==0"> <td colspan="4"> <p class="text-center text-muted">暂无数据……</p> </td> </tr> <tr v-show="myData.length!=0"> <td colspan="4"> <button class="btn btn-danger" @click="nowindex=-1,m=true" data-toggle="modal" data-target="#layer">删除全部</button> </td> </tr> </table> <!--模态框 弹出框--> <div role="dialog" class="modal fade" id="layer" > <div> <div> <div> <h4>确定<span v-show="m">全部</span>删除吗?</h4> <div> <button class="btn btn-primary" data-dismiss="modal">取消</button> <button class="btn btn-danger" data-dismiss="modal" @click="noindex(nowindex)">确定</button> </div> </div> </div> </div> </div> </div>
引用了bootstrap的js文件,所以有些弹框效果是基于bootstrap的。 关于html布局就不说了,从添加数据开始说。
data: { myData: [], username: "", ages: "", nowindex: 1, m: false } <label for="name">名称:</label> <input type="text" name="name" id="name" ref="sele" placeholder="请输入名称" v-model="username"> <br> <label for="sag">年龄:</label> <input type="text" name="seg" id="seg" ref="sele" placeholder="请输入年龄" v-model="ages"> <br> <div> <button type="button" class="btn btn-primary" @click="addData()" value="添加">添加</button> addData:function(){ if( this.$refs.sele.value==""){ alert("请填满资料!") }else{ this.myData.push({ name:this.username, age:this.ages }); this.username="", this.ages="" } },
建两个变量username、ages用来存放input利用v-model传过来的名称和年龄,在通过点击添加触发addData()将收到值的两个变量添加到建的数组当中在清除两个变量。 这样就形成了添加数据,那该如何删除添加后的数据呢?
<tr v-for="(list,index) in myData"> <td>{{index+1}}</td> <td>{{list.name}}</td> <td>{{list.age}}</td> <td> <button class="btn btn-danger" data-toggle="modal" data-target="#layer" @click="nowindex=index,m=false">删除</button> </td> </tr> <div> <h4>确定<span v-show="m">全部</span>删除吗?</h4> <div> <button class="btn btn-primary" data-dismiss="modal">取消</button> <button class="btn btn-danger" data-dismiss="modal" @click="noindex(nowindex)">确定</button> </div> </div> data: { myData: [], username: "", ages: "", nowindex: 1, m: false } noindex:function(n){ if(n==-1){ this.myData = []; }else{ this.myData.splice(n,1); } }
其实很简单给个判断就好了,如果是删除单个的话,点击删除后将当前下标传给变量nowindex,再将变量当参数传给noindex(nowindex),最后noindex方法里面判断nowindex是多少,在使用splice(n,1)删除在数组中第n个值。
<button class="btn btn-danger" @click="nowindex=-1,m=true" data-toggle="modal" data-target="#layer">删除全部</button>
删除全部直接将变量值赋-1,判断如果-1就清空数组。
参考文档:
官方文档:http://vuejs.org/v2/guide/syntax.html
中文文档:
https://cn.vuejs.org/v2/guide/index.html https://cn.vuejs.org/v2/guide/syntax.html
http://www.savh.cn/thread-228.htm
转载请注明:Savh.Cn 发表