1. Vue概述
Vue:渐进式JavaScript框架
声明式渲染→组件系统→客户端路由→集中式状态管理→项目构建
- Vue (读音 /vjuː/,类似于 view) 是一套用于构建用户界面的渐进式框架
- Vue 的核心库只关注视图层,不仅易于上手,还便于与第三方库或既有项目整合
##2.Vue基本使用
2.1传统开发模式对比
原生JS之HelloWorld基本步骤
1 2 3 4 5 6
| <div id="msg"></div> <script type="text/javascript"> var msg = 'Hello World'; var div = document.getElementById('msg'); div.innerHTML = msg; </script>
|
Jquery之HelloWorld基本步骤
1 2 3 4 5 6
| <div id="msg"></div> <script type="text/javascript" src="js/jquery.js"></script> <script type="text/javascript"> var msg = 'Hello World'; $('#msg').html(msg); </script>
|
Vue.js之HelloWorld基本步骤
1 2 3 4 5 6 7 8 9 10 11 12
| <div id="app"> <div>{{msg}}</div> </div> <script type="text/javascript" src="js/vue.js"></script> <script type="text/javascript"> new Vue({ el: '#app', data: { msg: 'HelloWorld' } }) </script>
|
2.2 Vue.js之HelloWorld细节分析
1. 实例参数分析
el: 元素的挂载位置(值可以是CSS选择器或者DOM元素)
data:模型数据(值是一个对象)
2. 插值表达式用法
将数据填充到HTML标签中
插值表达式支持基本的计算操作
3. Vue代码运行原理分析
概述编译过程的概念(Vue语法→原生语法)
2.3 指令
- 本质就是自定义属性
- 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
| <style type="text/css"> [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>
|
v-text
- v-text指令用于将数据填充到标签中,作用于插值表达式类似,但是没有闪动问题
- 如果数据中有HTML标签会将html标签一并输出
- 注意:此处为单向绑定,数据对象上的值改变,插值会发生变化;但是当插值发生变化并不会影响数据对象的 值
v-html
- 用法和v-text 相似 但是他可以将HTML片段填充到标签中
- 可能有安全问题, 一般只在可信任内容上使用 v-html ,永不用在用户提交的内容上
- 它与v-text区别在于v-text输出的是纯文本,浏览器不会对其再进行html解析,但v-html会将其当html标签解析 后输出。
v-pre
- 显示原始信息跳过编译过程
- 跳过这个元素和它的子元素的编译过程
- 一些静态的内容不需要编译加这个指令可以加快渲染
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
| <body> <div id="app"> <div>{{msg}}</div> <div v-text='msg'></div> <div v-html='msg1'></div> <div v-pre>{{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', msg1: '<h1>HTML</h1>' } }); </script> </body>
|
v-once
- 执行一次性的插值【当数据改变时,插值处的内容不会继续更新
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
| <body> <div id="app"> <div>{{msg}}</div> <div v-once>{{info}}</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', info: 'nihao' } }); </script> </body>
|
双向数据绑定
- 当数据发生变化的时候,视图也就发生变化
- 当视图发生变化的时候,数据也会跟着同步变化
V-model
v-model是一个指令,限制在<input>、<select>、<textarea>、components中使用
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
| <body> <div id="app"> <div>{{msg}}</div> <div> <input type="text" v-model='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>
|
MVVM
MVC 是后端的分层开发概念; MVVM是前端视图层的概念,主要关注于 视图层分离,也就是说:MVVM把前 端的视图层,分为了 三部分 Model, View , VM ViewModel
- m model 数据层 Vue 中 数据层 都放在 data 里面
- v view 视图 Vue 中 view 即 我们的HTML页面
- vm (view-model) 控制器 将数据和视图层建立联系 vm 即 Vue 的实例 就是 vm
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
| <body> <div id="app"> <div>{{num}}</div> <div> <button v-on:click='num++'>点击</button> <button @click='num++'>点击1</button> <button @click='handle'>点击2</button> <button @click='handle()'>点击3</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: function() { console.log(this === vm) this.num++; }
}
}); </script>
|
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
| <body> <div id="app"> <div>{{num}}</div> <div> <button v-on:click='handle1'>点击1</button>
<button v-on: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: { handle1: function(event) { console.log(event.target.innerHTML) }, handle2: function(p, p1, event) { console.log(p, p1) console.log(event.target.innerHTML) this.num++; } } }); </script> </body>
|
**事件修饰符 **
- 在事件处理程序中调用 event.preventDefault() 或 event.stopPropagation() 是非常常见的需求。
- Vue 不推荐我们操作DOM 为了解决这个问题,Vue.js 为 v-on 提供了事件修饰符
- 修饰符是由点开头的指令后缀来表示的
1 2 3 4 5 6 7 8
| <!-- 阻止单击事件继续传播 --> <a v-on:click.stop="doThis"></a> <!-- 提交事件不再重载页面 --> <form v-on:submit.prevent="onSubmit"></form> <!-- 修饰符可以串联 即阻止冒泡也阻止默认事件 --> <a v-on:click.stop.prevent="doThat"></a> <!-- 只当在 event.target 是当前元素自身时触发处理函数 --> <!-- 即事件不是从内部元素触发的 --> <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
| <!-- 只有在 `keyCode` 是 13 时调用 `vm.submit()` --> <input v-on:keyup.13="submit">
<!-- -当点击enter 时调用 `vm.submit()` --> <input v-on:keyup.enter="submit"> <!--当点击enter或者space时 时调用 `vm.alertMe()` --> <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
| <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>
|
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
| <body> <div id="app"> <form action=""> <div> 用户名: <input type="text" v-on:keyup.delete='clearContent' v-model='uname'> </div> <div> 密码: <input type="text" v-on:keyup.f1='handleSubmit' v-model='pwd'> </div> <div> <input type="button" v-on:click='handleSubmit' value="提交"> </div> </form> </div> <script type="text/javascript" src="js/vue.js"></script> <script type="text/javascript"> /* 事件绑定-按键修饰符 */ Vue.config.keyCodes.f1 = 113 var vm = new Vue({ el: '#app', data: { uname: '', pwd: '', age: 0 }, methods: { clearContent:function(){ // 按delete键的时候,清空用户名 this.uname = ''; }, handleSubmit: function(){ console.log(this.uname,this.pwd) } } }); </script> </body>
|