一、VUE 概述

Vue (读音 /vjuː/,类似于 view) 是一套用于构建用户界面的渐进式框架。与其它大型框架不同的是,Vue 被设计为可以自底向上逐层应用。Vue 的核心库只关注视图层,不仅易于上手,还便于与第三方库或既有项目整合。另一方面,当与现代化的工具链以及各种支持类库结合使用时,Vue 也完全能够为复杂的单页应用提供驱动。
注意:Vue 不支持 IE8 及以下版本,因为 Vue 使用了 IE8 无法模拟的 ECMAScript 5 特性。但它支持所有兼容 ECMAScript 5 的浏览器。

二、Vue.js

Vue.js 就是一个MVVM的实现者,他的核心就是实现了DOM监听与数据绑定。

按照惯例,先来一个 Hello,World!

<html>
<head>
<meta charset="UTF-8">
<title>test01</title>
</head> <body>
<!-- view层 模板 -->
<div id="app"> {{message}} </div> <!-- 1.导入Vue.js -->
<script src="https://cdn.jsdelivr.net/npm/vue@2.5.21/dist/vue.min.js"></script> <script>
// 创建一个Vue 对象实例
var vm = new Vue({
//viewModel 实现与Model双向绑定,动态更新视图数据
el: "#app", //绑定元素的ID
// Model: 数据
data: {
message: "Hello,World!" // 定义一个名为 message 的属性,并设置了初始值
}
});
</script> </body>
</html>

三、Vue.js基础语法

1.模板语法

在数据绑定时使用的 {{}}(双大括号),即:插值表达式。
代码如下:

<div id="app">
{{message}}
</div>

如果想要输出 html 代码,使用 v-html 。
代码如下:

<div id="app">
<div v-html="message"></div>
</div> <script src="https://cdn.jsdelivr.net/npm/vue@2.5.21/dist/vue.min.js"></script>
<script>
new Vue({
el: "#app",
data: {
message: '<h1>TanYongJun</h1>'
}
});
</script>

html 属性中的值,使用 v-bind 绑定
代码如下:

<html>
<head>
<meta charset="UTF-8">
<title></title>
<style>
.testClass{
color: red;
}
</style>
</head> <body>
<div id="app">
<div v-bind:class="{'testClass':use}">
<label>v-bind 绑定属性值</label>
</div> <br>
<!--<a v-bind:href="url">v-bind 完整语法 </a>-->
<br>
<!--<a :href="url"> v-bind 简写 </a>-->
</div> <script src="https://cdn.jsdelivr.net/npm/vue@2.5.21/dist/vue.min.js"></script>
<script>
var app = new Vue({
el: "#app",
data: {
use:true,
url:'www.baidu.com'
}
});
</script> </body>
</html>

  

Vue.js 支持JavaScript 表达式。代码如下:

<div id="app">
{{5+5}}<br>
{{ ok ? 'YES' : 'NO' }}<br>
{{ message.split('').reverse().join('') }}
<div :id="'list-' + id">测试</div>
</div> <script src="https://cdn.jsdelivr.net/npm/vue@2.5.21/dist/vue.min.js"></script>
<script>
var app = new Vue({
el: "#app",
data: {
ok: true,
message: 'tanyongjun',
id : 1
}
});
</script>

Vue.js 允许自定义过滤器,用作一些常见的文本格式化。
代码如下:

 <div id="app">
<!-- 对输入的字符串第一个字母转为大写 --> <!-- 过滤器 在两个大括号中使用 -->
{{ message | capitalize }} <!-- 过滤器 在 v-bind 指令中使用 -->
<!--<div v-bind:id="rawId | formatId"></div> -->
</div> <script src="https://cdn.jsdelivr.net/npm/vue@2.5.21/dist/vue.min.js"></script>
<script>
var app = new Vue({
el: "#app",
data: {
message: 'tanyongjun'
},
filters:{
capitalize:function(value){
if(!value) return '';
value = value.toString();
return value.charAt(0).toUpperCase() + value.slice(1);
}
}
});
</script>

过滤器可以串联,例如:{{ message | filterA | filterB }}
过滤器是 JavaScript 函数,因此可以接受参数:
{{ message | filterA('arg1', arg2) }}
这里,message 是第一个参数,字符串 'arg1' 将传给过滤器作为第二个参数, arg2 表达式的值将被求值然后传给过滤器作为第三个参数。

Vue.js 中可以使用 v-model 来实现双向数据绑定
v-model 指令用来在 input、select、textarea、checkbox、radio 等表单控件元素上创建双向数据绑定,根据表单上的值,自动更新绑定的元素的值。

<div id="app">
<p>{{ message }}</p>
<input v-model="message">
</div> <script>
new Vue({
el: '#app',
data: {
message: 'tanyongjun'
}
})
</script>

  

2. 条件语句 v-if & v-else

<div id="app">
<h1 v-if="type=='A'">A</h1>
<h1 v-else-if="type=='B'">B</h1>
<h1 v-else>C</h1>
</div> <script src="https://cdn.jsdelivr.net/npm/vue@2.5.21/dist/vue.min.js"></script>
<script>
var vm = new Vue({
el: "#app",
data: {
type: 'A'
},
});
</script>

  

3. 循环语句 v-for

<div id="app">
<ol>
<li v-for="todo in todos">
{{ todo.text }}
</li>
</ol>
</div> <script src="https://cdn.jsdelivr.net/npm/vue@2.5.21/dist/vue.min.js"></script>
<script>
new Vue({
el: "#app",
data: {
todos: [
{ text: 'tan' },
{ text: 'yong' },
{ text: 'jun' }
]
}
});
</script>

 

4. 计算属性 computed 

<div id="app">
<p>原始字符串: {{ message }}</p>
<p>计算后反转字符串: {{ reversedMessage }}</p>
</div> <script src="https://cdn.jsdelivr.net/npm/vue@2.5.21/dist/vue.min.js"></script>
<script>
var app = new Vue({
el: "#app",
data: {
message: 'tanyongjun'
},
computed: {
// 计算属性的 getter
reversedMessage: function () {
// this 指向 app 实例
return this.message.split('').reverse().join('')
}
}
});
</script>

  

上面的示例中声明了一个计算属性 reversedMessage 。提供的函数将用作属性 app.reversedMessage 的 getter 。
app.reversedMessage 依赖于 app.message,在 app.message 发生改变时,app.reversedMessage 也会更新。
我们可以使用 methods 来替代 computed,效果上两个都是一样的,但是 computed 是基于它的依赖缓存,只有相关依赖发生改变时才会重新取值。而使用 methods ,在重新渲染的时候,函数总会重新调用执行。使用 computed 性能会更好,但是如果你不希望缓存,你可以使用 methods 属性。

computed 属性默认只有 getter ,不过在需要时也可以提供一个 setter :
代码如下:

<div id="app">
<p>原始字符串: {{ message }}</p>
<p>计算后反转字符串: {{ reversedMessage }}</p>
</div> <script src="https://cdn.jsdelivr.net/npm/vue@2.5.21/dist/vue.min.js"></script>
<script>
var app = new Vue({
el: "#app",
data: {
message: 'tanyongjun'
},
computed: {
// 计算属性的 getter
reversedMessage: function () {
// this 指向 app 实例
return this.message.split('').reverse().join('')
},
// setter
set: function (newValue) {
var names = newValue.split(' ')
this.name = names[0]
this.url = names[names.length - 1]
}
}
});
</script>

 

5. Vue.js 监听属性

Vue.js 监听属性 watch,我们可以通过 watch 来响应数据的变化。

<div id="app">
千米 : <input type = "text" v-model = "kilometers">
米 : <input type = "text" v-model = "meters">
<p id="info"></p>
</div> <script src="https://cdn.jsdelivr.net/npm/vue@2.5.21/dist/vue.min.js"></script>
<script>
var app = new Vue({
el: "#app",
data: {
kilometers : 0,
meters:0
},
watch : {
kilometers:function(val) {
this.kilometers = val;
this.meters = this.kilometers * 1000
},
meters : function (val) {
this.kilometers = val/ 1000;
this.meters = val;
}
}
}); app.$watch('kilometers', function (newValue, oldValue) {
// 这个回调将在 app.kilometers 改变后调用
document.getElementById ("info").innerHTML = "修改前值为: " + oldValue + ",修改后值为: " + newValue;
})
</script>

上面的代码实现了千米与米之间的换算。两个输入框用来接收用户输入的值,在 data 属性中把 kilometers 和 meters 初始值都为 0。watch 对象创建了两个方法 kilometers 和 meters。当输入框输入数据时,watch 会实时监听数据变化并改变自身的值。

6. 绑定事件

可以用 v-on 指令监听 DOM 事件,并在触发时运行一些 JavaScript 代码。

<div id="app">
<button v-on:click="sayHi">点我</button>
<!-- 简写 -->
<button @click="sayHi">点我(简写方式)</button>
</div> <script src="https://cdn.jsdelivr.net/npm/vue@2.5.21/dist/vue.min.js"></script>
<script>
var app = new Vue({
el: "#app",
data: { },
methods: { //方法必须定义在Vue的methods对象中
sayHi: function () {
alert('Hello');
}
}
});
</script>

Vue.js 为 v-on 提供了事件修饰符来处理 DOM 事件细节,Vue.js通过由点 "." 表示的指令后缀来调用修饰符。
例如: 

<!-- 提交事件不再重载页面 -->
<form v-on:submit.prevent="onSubmit"></form>
<!-- 修饰符可以串联 -->
<a v-on:click.stop.prevent="doThat"></a>
<!-- click 事件只能点击一次,2.1.4版本新增 -->
<a v-on:click.once="doThis"></a>

Vue 允许为 v-on 在监听键盘事件时添加按键修饰符:
例如:

<!-- 只有在 keyCode 是 13 时调用 -->
<input v-on:keyup.13="submit">

为了方便使用,Vue 为最常用的按键提供了别名:  

<!-- 同上 -->
<input v-on:keyup.enter="submit">

全部的按键别名: .enter 、.tab 、 .delete (捕获 "删除" 和 "退格" 键) 、.esc 、.space、.up、.down、.left、.right、.ctrl、.alt、.shift、.meta 。  

最新文章

  1. TopCoder kawigiEdit插件配置
  2. 利用flash精确定位asp.net的图像热点区域
  3. junit单元测试(keeps the bar green to keeps the code clean)
  4. 系统隐式 Intent
  5. CSS基础(六):浮动深入
  6. Android项目实战(七):Dialog主题Activity实现自定义对话框效果
  7. PHP笔记随笔
  8. Codeforces Round #257 (Div. 2) B
  9. C语言字节对齐 __align(),__attribute((aligned (n))),#pragma pack(n)
  10. IOS 通过button获取cell
  11. day6_python学习笔记_chapter8_条件,循环
  12. android ScrollView--Linearlayout可以上下拖动
  13. vbscript语句
  14. android4.0 的图库Gallery2代码分析(二)
  15. gulp的流与执行顺序
  16. 为什么要用 Docker
  17. [leetcode](4.21)3. 最长重复子串
  18. Hbase balancer RSgroup shell 脚本
  19. EXTJS4 Grid Filter 插件的使用 与后台数据解析------Extjs 查询筛选功能的实现
  20. Python程序的执行原理

热门文章

  1. BUU_RE学习记录
  2. vulnhub靶场之HACKABLE: III
  3. 【转载】C#使用Dotfuscator混淆代码以及加密
  4. 47.DRF实现分页
  5. 数据分析中的SQL如何解决业务问题
  6. ArcGIS工具 - 导出空数据库
  7. [WPF]C#调用C++代码(通过C++/CLI)
  8. wkhtmltopdf 目录对象使用 及 目录样式分享
  9. File的概述-File类的静态成员变量
  10. Solon v2.0 大版本发布。提效率!降成本!