前言:前端框架千千万,独有vue占一半
我是风尚,让我们一起坐火箭去学习Vue
第三章:Vue的语法和指令
上章回顾:你好好理解啊!!!算了,我给你总结一下吧”老头说道。。。。。
总结:
模板语法-文本语法
文本
数据绑定最常见的形式就是使用{{}}语法 (双大括号)
< span > {{message}}</ span > |
也可以使用v-text方法
< span v-text = "message" ></ span > |
html文本
双大括号会将数据解释为普通文本,而非 HTML 代码。为了输出真正的 HTML,你需要使用 v-html
< div id = "app" > < div v-html = "rawMsg" ></ div > </ div > < script type = "text/javascript" > var app=new Vue({ el:'#app', data:{ message:'hello Vue!', rawMsg:'< h1 >你好风尚vue</ h1 >' } }) </ script > |
模板语法-属性
给html标签绑定一个属性值应该使用 v-bind:属性名称
以下代码给h1绑定一个新的id和title属性
< div id = "app" > < h1 v-bind:id = "dyId" v-bind:title = "dyTitle" >我是一行快乐的标题</ h1 > </ div > < script type = "text/javascript" > var app=new Vue({ el:'#app', data:{ dyId:'best', dyTitle:'看见我的人一生平安' } }) </ script > |
渲染结果是:
< h1 id = "best" title = "看见我的人一生平安" >我是一行快乐的标题</ h1 > |
绑定属性也是可以直接简写:
< h1 :id = "dyId" :title = "dyTitle" >我是一行快乐的标题</ h1 > |
使用 JavaScript 表达式
在我们的模板中,我们一直都只绑定简单的属性键值。但实际上,对于所有的数据绑定,Vue.js 都提供了完全的 JavaScript 表达式支持。
{{4+5}} {{ ok ? '是的' : '不是' }} {{['风尚','风尚啊'].join('--')}} |
<!-- 这是语句,不是表达式 --> {{ var a = 1 }} <!-- 流控制也不会生效,请使用三元表达式 --> {{ if (ok) { return message } }} |
条件指令 v-if
指令用于条件性地渲染一块内容。这块内容只会在指令的表达式返回 真 值的时候被渲染。
< div v-if = "isLogin" >你好,风尚!</ div > |
也可以用 v-else 添加一个“else 块”:
<div v - else = "">请登录后操作< / div> |
< div id = "app" > < div v-if = "isLogin" >你好:风尚</ div > < div v-else = "" >请登录后操作</ div > </ div > < script type = "text/javascript" > var app=new Vue({ el:'#app', data:{ isLogin:false } }) </ script > |
v-show指令
另一个用于根据条件展示元素的选项是 v-show 指令
< h1 v-show = "isShow" >Hello!</ h1 > |
v-show 只是调整css中display属性,DOM已经加载,只是CSS控制没有显示出来。
v-if: 判断是否加载,可以减轻服务器的压力,在需要时加载。
v-show:调整css dispaly属性,可以使客户端操作更加流畅。
列表渲染
我们用 v-for 指令根据一组数组的选项列表进行渲染。v-for 指令需要使用 item in items 形式的特殊语法,items 是源数据数组并且 item 是数组元素迭代的别名。
基本用法
< li v-for = "item in items" > {{item}} </ li > |
var app=new Vue({ el:'#app', data:{ items:['angular','react','vue',jquery] } }) |
对象循环输出
< li v-for = "item in items" > {{item.name}}--{{item.age}} </ li > |
var app=new Vue({ el:'#app', data:{ items:[ {name:"fsfs", age:18}, {name:"fsa", age:22}, {name:"风尚啊", age:28}, ] } }) |
索引
< li v-for = "(item, index) in items" > {{item.name}}-{{index}}-{{item.age}} </ li > |
结果是
< li >fsfs-0-18</ li > < li >fsa-0-22</ li > < li >风尚啊-0-28</ li > |
key
为了给 Vue 一个提示,以便它能跟踪每个节点的身份,从而重用和重新排序现有元素,你需要为每项提供一个唯一 key 属性。理想的 key 值是每项都有的唯一 id。
< li v-for = "(item,index) in items" :key = "index" > {{item}} </ li > |
var app=new Vue({ el:'#app', data:{ items:['mumu','风尚啊','风尚','fsa'] } }) |
如果不绑定tip 重复的'mumu' 再列表循环在列表循环会报错
监听事件
可以用 v-on 指令监听 DOM 事件,并在触发时运行一些 JavaScript 代码。
< div id = "app" > < button v-on:click = "counter += 1" >加 1</ button > < p >按钮被点击了 {{ counter }}次.</ p > </ div > |
var example1 = new Vue({ el: '#ap', data: { counter: 0 } }) |
事件处理方法
< div id = "app" > < button v-on:click = "greet" >问候</ button > </ div > < script > var app = new Vue({ el:'#app', data:{ name:'Vue.js' }, methods:{ greet:function(event){ // 'this' 在方法里指向当前 Vue 实例 alert('你好'+this.name+'!'); // 'even' 是元生 DOM事件 if(event){ alert(event.target.tagName) } } } }) // 也可以用JavaScript 直接调用 app.greet(); </ script > |
事件绑定简写方式
问候
事件修饰符
在事件处理程序中调用 event.preventDefault() 或 event.stopPropagation() 是非常常见的需求
为了解决这个问题,Vue.js 为 v-on 提供了事件修饰符。之前提过,修饰符是由点开头的指令后缀来表示的。
<!-- 阻止单击事件继续传播 --> < a v-on:click.stop = "doThis" ></ a > <!-- 提交事件不再重载页面 --> < form v-on:submit.prevent = "onSubmit" ></ form > <!-- 修饰符可以串联 --> < a v-on:click.stop.prevent = "doThat" ></ a > <!-- 点击事件将只会触发一次 --> < a v-on:click.once = "doThis" ></ a > |
按键修饰符
在监听键盘事件时,我们经常需要检查详细的按键。Vue 允许为 v-on 在监听键盘事件时添加按键修饰符:
<!-- 只有在 `key` 是 `Enter` 时调用 `vm.submit()` --> < input v-on:keyup.enter = "submit" > < input v-on:keyup.page-down = "onPageDown" > |
按键码
使用 keyCode 特性也是允许的:
< input v-on:keyup.13 = "submit" > |
Vue 提供了绝大多数常用的按键码的别名:
.enter
.tab
.delete
(捕获“删除”和“退格”键).esc
.space
.up
.down
.left
.right
表单输入绑定
v-model
你可以用 v-model 指令在表单 >input<、>textarea< 及 >select< 元素上创建双向数据绑定。它会根据控件类型自动选取正确的方法来更新元素。
信息是: {{msg }}
复选框
{{ checked }}
多个复选框
< div id = "app" > < input type = "checkbox" id = "name1" value = "风尚" v-model = "checkedNames" > < label for = "name1" >风尚</ label > < input type = "checkbox" id = "name2" value = "风尚啊" v-model = "checkedNames" > < label for = "name2" >风尚啊</ label > < input type = "checkbox" id = "name3" value = "fsfs" v-model = "checkedNames" > < label for = "name3" >mumu</ label > < br > < span >选择的名字是: {{ checkedNames }}</ span > </ div > < script > var app = new Vue({ data:{checkedNames:[]}, }) </ script > <!-- 结果 --> <!-- 选择的名字是:["风尚","风尚啊","fsfs"] --> |
修饰符
在默认情况下,v-model 在每次 input 事件触发后将输入框的值与数据进行同步 (除了上述输入法组合文字时)。你可以添加 lazy 修饰符,从而转变为使用 change 事件进行同步:
<!-- 在“change”时而非“input”时更新 --> < input v-model.lazy = "msg" > |
.number
如果想自动将用户的输入值转为数值类型,可以给 v-model 添加 number 修饰符
< input v-model.number = "age" type = "number" > |
.trim 如果要自动过滤用户输入的首尾空白字符,可以给 v-model 添加 trim 修饰符:
< input v-model.trim = "msg" > |
今天就到这里吧,风尚,好好学啊!慢慢消化,一会去吃饭
风尚一听,学!为了干饭!!!
冲冲冲!!!!!!