学习vue.js
Vue.js是一套构建用户界面的渐进式框架。是当下很火的一个JavaScript MVVM库,它是以数据驱动和组件化的思想构建的。Vue.js提供了更加简洁、更易于理解的API,使得我们能够快速地上手并使用Vue.js。
官方文档: https://cn.vuejs.org/v2/guide/
原文地址: http://www.cnblogs.com/keepfool/p/5619070.html
MVVM模式
下图不仅概括了MVVM模式(Model-View-ViewModel),还描述了在Vue.js中ViewModel是如何和View以及Model进行交互的。
ViewModel是Vue.js的核心,它是一个Vue实例。Vue实例是作用于某一个HTML元素上的
,这个元素可以是HTML的body元素,也可以是指定了id的某个元素。
当创建了ViewModel后,双向绑定是如何达成的呢?
首先,我们将上图中的DOM Listeners和Data Bindings看作两个工具,它们是实现双向绑定的关键。
从View侧看,ViewModel中的DOM Listeners工具会帮我们监测页面上DOM元素的变化,如果有变化,则更改Model中的数据;
从Model侧看,当我们更新Model中的数据时,Data Bindings工具会帮我们更新页面中的DOM元素。
Hello World示例
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title></title>
</head>
<body>
<!--这是我们的View-->
<div id="app">
{{ message }}
</div>
</body>
<!-- 引入vue库 -->
<script src="https://unpkg.com/vue"></script>
<script>
// 这是我们的Model
var exampleData = {
message: 'Hello World!'
}
// 创建一个 Vue 实例或 "ViewModel"
// 它连接 View 与 Model
new Vue({
el: '#app',
data: exampleData
})
</script>
</html>
使用Vue的过程就是定义MVVM各个组成部分的过程的过程。
1.定义View
2.定义Model
3.创建一个Vue实例或”ViewModel”,它用于连接View和Model
在创建Vue实例时,需要传入一个选项对象,选项对象可以包含数据、挂载元素、方法、模生命周期钩子等等。
在这个示例中,选项对象的el属性指向View,el: '#app'
表示该Vue实例将挂载到 <div id="app">...</div>
这个元素;data属性指向Model,data: exampleData
表示我们的Model是exampleData对象。
Vue.js有多种数据绑定的语法,最基础的形式是文本插值,使用一对大括号语法,在运行时{{ message }}会被数据对象的message属性替换,所以页面上会输出”Hello World!”。
双向绑定示例
MVVM模式本身是实现了双向绑定的,在Vue.js中可以使用v-model指令在表单元素上创建双向数据绑定。
<!--这是我们的View-->
<div id="app">
<p>{{ message }}</p>
<input type="text" v-model="message"/>
</div>
将message绑定到文本框,当更改文本框的值时,<p>{{ message }}</p>
中的内容也会被更新。
Vue.js的常用指令
Vue.js的指令是以v-开头的,它们作用于HTML元素
,指令提供了一些特殊的特性,将指令绑定在元素上时,指令会为绑定的目标元素添加一些特殊的行为,我们可以将指令看作特殊的HTML特性(attribute)。
Vue.js提供了一些常用的内置指令,接下来我们将介绍以下几个内置指令:
v-if指令
v-if是条件渲染指令,它根据表达式的真假来删除和插入元素
v-show指令
v-show也是条件渲染指令,和v-if指令不同的是,使用v-show指令的元素始终会被渲染到HTML,它只是简单地为元素设置CSS的style属性。
v-else指令
可以用v-else指令为v-if或v-show添加一个“else块”。v-else元素必须立即跟在v-if或v-show元素的后面——否则它不能被识别
v-for指令
v-for指令基于一个数组渲染一个列表,它和JavaScript的遍历语法相似
v-bind指令
v-bind指令可以在其名称后面带一个参数,中间放一个冒号隔开,这个参数通常是HTML元素的特性(attribute)
v-on指令
v-on指令用于给监听DOM事件,它的用语法和v-bind是类似的
综合示例
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title></title>
</head>
<style>
.active{
background-color: greenyellow;
}
</style>
<body>
<!--这是我们的View-->
<div id="app">
{{ testdata.testtt }}
<p>{{ message }}</p>
<input type="text" v-model="message"/>
<br>
<span v-for="n in pageCount">
<!-- <span v-bind:class="activeNumber === n ? 'active' : ''">{{ n }}</span> -->
<!-- Vue.js为最常用的两个指令v-bind和v-on提供了缩写方式。v-bind指令可以缩写为一个冒号,v-on指令可以缩写为@符号。-->
<span :class="activeNumber === n ? 'active' : ''">{{ n }}</span>
</span>
<p>
<!--click事件直接绑定一个方法-->
<!-- <button v-on:click="biu">biu</button> -->
<button @click="biu">biu</button>
</p>
<p>
<!--click事件使用内联语句-->
<button v-on:click="biubiu('biubiu')">biubiu</button>
</p>
</div>
<div id="demo">
<fieldset>
<legend>
Create New Person
</legend>
<div class="form-group">
<label>Name:</label>
<input type="text" v-model="newPerson.name"/>
</div>
<div class="form-group">
<label>Age:</label>
<input type="text" v-model="newPerson.age"/>
</div>
<div class="form-group">
<label>Sex:</label>
<select v-model="newPerson.sex">
<option value="Male">Male</option>
<option value="Female">Female</option>
</select>
</div>
<div class="form-group">
<label></label>
<button @click="createPerson">Create</button>
</div>
</fieldset>
<table>
<thead>
<tr>
<th>Name</th>
<th>Age</th>
<th>Sex</th>
<th>Delete</th>
</tr>
</thead>
<tbody>
<tr v-for="(person, index) in people">
<td>{{ person.name }}</td>
<td>{{ person.age }}</td>
<td>{{ person.sex }}</td>
<td :class="'text-center'"><button @click="deletePerson('{{ index }}')">Delete</button></td>
</tr>
</tbody>
</table>
</div>
</body>
<script src="https://unpkg.com/vue"></script>
<script>
// 这是我们的Model
var exampleData = {
message: 'Hello World!'
}
// 创建一个 Vue 实例或 "ViewModel"
// 它连接 View 与 Model
//new Vue({
// el: '#app',
// data:exampleData
// })
const test = new Vue({
el:'#app',
data:{
message : 'Hello World!',
testdata:{
testtt:'this is a test!!!'
},
pageCount:10,
activeNumber:1,
},
methods: {
biu: function() {
// 方法内 this 指向 test对象
alert(this.testdata.testtt)
},
biubiu: function(msg) {
alert(msg)
}
}
})
var demo = new Vue({
el: '#demo',
data: {
newPerson: {
name: '',
age: 0,
sex: 'Male'
},
people: [{
name: 'Jack',
age: 30,
sex: 'Male'
}, {
name: 'Bill',
age: 26,
sex: 'Male'
}, {
name: 'Tracy',
age: 22,
sex: 'Female'
}, {
name: 'Chris',
age: 36,
sex: 'Male'
}]
},
methods:{
createPerson: function(){
this.people.push(this.newPerson);
// 添加完newPerson对象后,重置newPerson对象
this.newPerson = {name: '', age: 0, sex: 'Male'}
},
deletePerson: function(index){
// 从下标index开始,删一个数组元素
this.people.splice(index,1);
}
}
})
</script>
</html>
上一篇: HDFS java API操作
下一篇: 简单的HDFS操作