前言:前端框架千千万,独有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" > |
?
今天就到这里吧,风尚,好好学啊!慢慢消化,一会去吃饭
风尚一听,学!为了干饭!!!
冲冲冲!!!!!!
|