前言 Vue是一个渐进式框架,它提供了一系列的模板语法用于数据渲染。
指令
指令就是一个自定义属性
Vue中指令都是以 v- 开头
v-cloak
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 <!DOCTYPE html > <html lang ="en" > <head > <meta charset ="UTF-8" > <title > Document 02</title > <style > [v-cloak] { display : none; } </style > </head > <body > <div id ="app" > <div v-cloak > {{msg}}</div > </div > <script type ="text/javascript" src ="js/vue.js" > </script > <script type ="text/javascript" > var vm = new Vue ({ el : '#app' , data : { msg : 'Hello Vue' } }) </script > </body > </html >
v-text
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 <div id ="app" > <p v-text ="msg" > </p > <p > {{msg}} </p > </div > <script > new Vue ({ el : '#app' , data : { msg : 'Hello Vue.js' } }); </script >
v-html
用法和v-text 相似 但是他可以将HTML片段填充到标签中
可能有安全问题, 一般只在可信任内容上使用 v-html
,永不 用在用户提交的内容上
它与v-text区别在于v-text输出的是纯文本,浏览器不会对其再进行html解析,但v-html会将其当html标签解析后输出。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 <div id ="app" > <p v-html ="html" > </p > <p > {{message}}</p > <p v-text ="text" > </p > </div > <script > let app = new Vue ({ el : "#app" , data : { message : "<span>通过双括号绑定</span>" , html : "<span>html标签在渲染的时候被解析</span>" , text : "<span>html标签在渲染的时候被源码输出</span>" , } }); </script >
v-pre
显示原始信息跳过编译过程
跳过这个元素和它的子元素的编译过程。
一些静态的内容不需要编译加这个指令可以加快渲染
1 2 3 4 5 6 7 8 9 10 11 12 13 <span v-pre > {{ this will not be compiled }}</span > <span v-pre > {{msg}}</span > <script > new Vue ({ el : '#app' , data : { msg : 'Hello Vue.js' } }); </script >
v-once
执行一次性的插值【当数据改变时,插值处的内容不会继续更新】
1 2 3 4 5 6 7 8 9 10 <span v-once > {{ msg}}</span > <script > new Vue ({ el : '#app' , data : { msg : 'Hello Vue.js' } }); </script >
双向数据绑定
当数据发生变化的时候,视图也就发生变化
当视图发生变化的时候,数据也会跟着同步变化
v-model
v-model 是一个指令,限制在 <input>、<select>、<textarea>、components
中使用
1 2 3 4 5 6 7 <div id ="app" > <div > {{msg}}</div > <div > 当输入框中内容改变的时候, 页面上的msg 会自动更新 <input type ="text" v-model ='msg' > </div > </div >
mvvm
MVC 是后端的分层开发概念; MVVM是前端视图层的概念,主要关注于 视图层分离,也就是说:MVVM把前端的视图层,分为了 三部分 Model, View , VM ViewModel
m model
数据层 Vue 中 数据层 都放在 data 里面
v view 视图
vm (view-model) 控制器 将数据和视图层建立联系
v-on
用来绑定事件的
形式如:v-on:click 缩写为 @click;
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 <!DOCTYPE html > <html lang ="en" xmlns:v-on ="http://www.w3.org/1999/xhtml" > <head > <meta charset ="UTF-8" > <title > Document 06</title > </head > <body > <div id ="app" > <div > {{num}}</div > <div > <button v-on:click ="num++" > 点击</button > <br > <button @click ="num++" > 点击1</button > <br > <button @click =handle() > 点击2</button > </div > </div > <script type ="text/javascript" src ="js/vue.js" > </script > <script type ="text/javascript" > var vm = new Vue ({ el : '#app' , data : { num : 0 }, methods :{ handle ( ){ this .num ++; } } }) </script > </body > </html >
v-on事件函数中传入参数 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 <!DOCTYPE html > <html lang ="en" xmlns:v-on ="http://www.w3.org/1999/xhtml" > <head > <meta charset ="UTF-8" > <title > Document 07</title > </head > <body > <div id ="app" > <div > {{num}}</div > <div > <br > <button @click =handle1 > 点击1</button > <button @click =handle2(123,456,$event) > 点击2</button > </div > </div > <script type ="text/javascript" src ="js/vue.js" > </script > <script type ="text/javascript" > var vm = new Vue ({ el : '#app' , data : { num : 0 }, methods : { handle2 (p, p1, event ) { console .log (event.target .innerHTML ) console .log (p) this .num ++; }, handle1 (event ) { console .log (event.target .innerHTML ) } } }) </script > </body > </html >
事件修饰符
在事件处理程序中调用 event.preventDefault()
或 event.stopPropagation()
是非常常见的需求。
Vue 不推荐我们操作DOM 为了解决这个问题,Vue.js 为 v-on
提供了事件修饰符
修饰符是由点开头的指令后缀来表示的
1 2 3 4 5 6 7 8 9 10 11 12 13 14 <a v-on:click.stop ="doThis" > </a > <form v-on:submit.prevent ="onSubmit" > </form > <a v-on:click.stop.prevent ="doThat" > </a > <div v-on:click.self ="doThat" > ...</div > 使用修饰符时,顺序很重要;相应的代码会以同样的顺序产生。因此,用 v-on:click.prevent.self 会阻止所有的点击,而 v-on:click.self.prevent 只会阻止对元素自身的点击。
按键修饰符
在做项目中有时会用到键盘事件,在监听键盘事件时,我们经常需要检查详细的按键。Vue 允许为 v-on
在监听键盘事件时添加按键修饰符
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 <input v-on:keyup.13 ="submit" > <input v-on:keyup.enter ="submit" > <input type ="text" v-on:keyup.enter.space ="alertMe" > 常用的按键修饰符 .enter => enter键 .tab => tab键 .delete (捕获“删除”和“退格”按键) => 删除键 .esc => 取消键 .space => 空格键 .up => 上 .down => 下 .left => 左 .right => 右 <script > var vm = new Vue ({ el :"#app" , methods : { submit :function ( ){}, alertMe :function ( ){}, } }) </script >
自定义按键修饰符别名
在Vue中可以通过config.keyCodes
自定义按键修饰符别名
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 <div id ="app" > 预先定义了keycode 116(即F5)的别名为f5,因此在文字输入框中按下F5,会触发prompt方法 <input type ="text" v-on:keydown.f5 ="prompt()" > </div > <script > Vue .config .keyCodes .f5 = 116 ; let app = new Vue ({ el : '#app' , methods : { prompt : function ( ) { alert ('我是 F5!' ); } } }); </script >