当前位置: 移动技术网 > IT编程>脚本编程>vue.js > Vue概念及常见命令介绍(1)

Vue概念及常见命令介绍(1)

2018年05月07日  | 移动技术网IT编程  | 我要评论

女婴被弃垃圾堆,exynos a9,天水伏羲庙导游词

vue.js介绍

vue.js是javascript mvvm(model-view-viewmodel)库,十分简洁,vue核心只关注视图层,相对angularjs提供更加简洁、易于理解的api。vue尽可能通过简单的api实现响应的数据绑定和组合的视图组件。

vue和mvvm模式

mvvm模式即model-view-viewmodel

vue是以数据为驱动的,vue自身将dom和数据进行绑定,一旦创建绑定,dom和数据将保持同步,每当数据发生变化,dom会跟着变化。

viewmodel是vue的核心,它是vue的一个实例。vue实例时作用域某个html元素上的,这个html元素可以是body,也可以是某个id所指代的元素。

dom listeners和data bindings是实现双向绑定的关键。dom listeners监听页面所有view层dom元素的变化,当发生变化,model层的数据随之变化;data bindings监听model层的数据,当数据发生变化,view层的dom元素随之变化。

vue.js特点

简洁:页面由html模板+json数据+vue实例组成
数据驱动:自动计算属性和追踪依赖的模板表达式
组件化:用可复用、解耦的组件来构造页面
轻量:代码量小,不依赖其他库
快速:精确有效批量dom更新
模板友好:可通过npm,bower等多种方式安装,很容易融入

vue.js入门小例子

声明式渲染

本例子由html模板(view)+json数据(model)+vue实例(viewmodel)组成。

创建vue的实例,需传入一个选项对象,如:数据、挂载元素、方法、模生命周期钩子等。本例子中,选项对象的el属性为#app,表示vue实例挂载在<div id="app">...</div>元素上,data属性为exampledata,表示model为exampledata。view中{{message}}是vue的一种数据绑定语法,在运行时,{{message}}会被数据对象的message属性替换。

<!doctype html>
<html>
 <head>
 <title>声明式渲染</title>
 <meta charset="utf-8">
 <script src="https://unpkg.com/vue/dist/vue.js"></script> 
 </head>
 <body>
 <!-- view -->
 <div id="app">
 {{message}}
 </div>
 <script>
 //model
 var exampledata = {
 message: 'hello vue!'
 }
 //viewmodel
 var app = new vue({
 el: '#app',
 data: exampledata
 })
 </script>
 </body>
</html>

双向绑定

在vue中使用v-model在表单元素上实现双向绑定。当在输入框输入的信息发生变化,<p>...</p>中的信息随之变化;当通过控制台中的console,修改exampledata.message的值,输入框中的信息也随之变化。

<!doctype html>
<html lang="en">
 <head>
 <title>双向绑定</title>
 <meta charset="utf-8">
 <script src="https://unpkg.com/vue/dist/vue.js"></script>
 </head>
 <body>
 <!-- view -->
 <div id="app">
 <p>{{message}}</p>
 <input type="text" v-model="message">
 </div>
 <script>
 //model
 var exampledata = {
 message: 'hello vue!'
 }
 //viewmodel
 var app = new vue({
 el: '#app',
 data: exampledata
 })
 </script>
 </body>
</html>

运行截图:

vue.js常用指令

vue指令以v-开头,作用在html元素上,将指令绑定在元素上时,会给绑定的元素添加一些特殊行为,可将指令视作特殊的html属性(attribute)。

下面将介绍vue中常用的几个内置指令。当然,vue除了内置指令,也可以根据需求自定义指令。

v-if指令

条件判断指令,根据表达式值的真假来插入或删除元素,表达式返回一个布尔值,语法如下:

v-if = "expression"

例子:

在本例中,表达式是yes,no,和age>25,yes的值为true,因此在html中显示该元素,其他同理。

<!doctype html>
<html lang="en">
 <head>
 <title>v-if指令</title>
 <meta charset="utf-8">
 <script src="https://unpkg.com/vue/dist/vue.js"></script>
 </head>
 <body>
 <div id="app">
 <h1 v-if="yes">yes</h1>
 <h1 v-if="no">no</h1>
 <h1 v-if="age > 25">age: {{age}}</h1>
 </div>
 <script>
 var app = new vue({
 el: '#app',
 data: {
 yes: true,//值为真,插入元素
 no: false,//值为假,不插入元素
 age: 28
 }
 })
 </script>
 </body>
</html>

运行截图:

v-show指令

条件渲染指令,与v-if不同的是,无论v-show的值为true或false,元素都会存在于html代码中;而只有当v-if的值为true,元素才会存在于html代码中。v-show指令只是设置了元素css的style值。语法如下:

v-show = "expression"

例子:

<!doctype html>
<html lang="en">
 <head>
 <title>v-show指令</title>
 <meta charset="utf-8">
 <script src="https://unpkg.com/vue/dist/vue.js"></script>
 </head>
 <body>
 <div id="app">
 <h1 v-show="yes">yes</h1>
 <h1 v-show="no">no</h1>
 <h1 v-show="age > 25">age: {{age}}</h1>
 </div>
 <script>
 var app = new vue({
 el: '#app',
 data: {
 yes: true,//值为真
 no: false,//值为假
 age: 28
 }
 })
 </script>
 </body>
</html>

运行截图:

v-else指令

可配合v-if或v-show使用,v-else指令必须紧邻v-if或v-show,否则该命令无法正常工作。v-else绑定的元素能否渲染在html中,取决于前面使用的是v-if还是v-show。若前面使用的是v-if,且v-if值为true,则v-else元素不会渲染;若前面使用的是v-show,且v-show值为true,则v-else元素仍会渲染到html。

v-for指令

循环指令,基于一个数组渲染一个列表,与javascript遍历类似,语法如下:

v-for = "item in items"

例子:

在本例中,数组是todos,依次遍历数组todos中的每个元素,将text部分显示。

<!doctype html>
<html lang="en">
 <head>
 <title>v-for指令</title>
 <meta charset="utf-8">
 <script src="https://unpkg.com/vue/dist/vue.js"></script>
 </head>
 <body>
 <div id="app">
 <ol>
 <li v-for="todo in todos">{{todo.text}}</li>
 </ol>
 </div>
 <script>
 var app = new vue({
 el: '#app',
 data: {
 todos: [
 {text: 'learn javascript'},
 {text: 'learn vue'},
 {text: 'learn ...'}
 ]
 }
 })
 </script>
 </body>
</html>

运行截图:

在浏览器控制台里console,输入app.todos.push({text: 'new item'}),则会插入新的一条信息。

运行截图:

v-bind指令

给dom绑定元素属性,语法如下:

v-bind:argument="expression"

其中,argument通常是html元素的特性,如:v-bind:class="expression"。

注:v-bind指令可以缩写为:冒号。如::class="expression"。

例子:

在本例子中,当鼠标悬停在span标签的文字上时,会显示加载网页的时间。

<!doctype html>
<html lang="en">
 <head>
 <meta charset="utf-8">
 <script src="https://unpkg.com/vue/dist/vue.js"></script>
 </head>
 <body>
 <div id="app">
 <span v-bind:title="message">hover your mouse over me</span>
 </div>
 <script>
 var app = new vue({
 el: '#app',
 data: {
 message: 'you loaded this page on ' + new date()
 }
 })
 </script>
 </body>
</html>

v-on指令

用于监听dom事件,语法与v-bind类似,如监听点击事件v-on:click="dosth"。

注:v-on指令可以缩写为@符号。如:@click="dosth"。

例子:

<!doctype html>
<html lang="en">
 <head>
 <meta charset="utf-8">
 <script src="https://unpkg.com/vue/dist/vue.js"></script>
 </head>
 <body>
 <div id="app">
 <p><input type="text" v-model="message"></p>
 <p>
 <button v-on:click="greet">greet</button>
 </p>
 <p>
 <button v-on:click="say('hello vue')">hello</button>
 </p>
 </div>
 <script>
 var app = new vue({
 el: '#app',
 data: {
 message: 'greet to vue'
 },
 methods: {
 greet: function(){
 alert(this.message);
 },
 say: function(msg){
 alert(msg);
 }
 }
 })
 </script>
 </body>
</html>

运行结果:

一个综合性例子

<!doctype html>
<html lang="en">
 <head>
 <meta charset="utf-8">
 <script src="https://unpkg.com/vue/dist/vue.js"></script>
 </head>
 <body>
 <div id="app">
 <fieldset>
 <legend>create new</legend>

 <label for="">name:</label>
 <input type="text" v-model="newperson.name">

 <label for="">age:</label>
 <input type="text" v-model="newperson.age">

 <label for="">age:</label>
 <select name="" id="" v-model="newperson.sex">
 <option value="male">male</option>
 <option value="female">female</option>
 </select>

 <button @click="createperson">create</button>
 </fieldset>
 <table>
 <tr>
 <th>name</th>
 <th>age</th>
 <th>sex</th>
 <th>delete</th>
 </tr>
 <tr v-for="person in people">
 <td>{{person.name}}</td>
 <td>{{person.age}}</td>
 <td>{{person.sex}}</td>
 <td><button @click="deleteperson($index)">delete</button></td>
 </tr>
 </table>
 </div>
 <script>
 var app = new vue({
 el: '#app',
 data: {
 newperson: {
 name: '',
 age: 0,
 sex: 'male'
 },
 people: [{
 name: 'tyy',
 age: 24,
 sex: 'male'
 }, {
 name: 'syd',
 age: 24,
 sex: 'female'
 }]
 },
 methods: {
 createperson: function(){
 this.people.push(this.newperson);
 this.newperson = {
 name: '',
 age: 0,
 sex: 'male'
 }
 },
 deleteperson: function(index){
 this.people.splice(index, 1);
 }
 }
 })
 </script>
 </body>
</html>

运行截图:

参考链接:

vue.js 60分钟轻松入门

本文已被整理到了《vue.js前端组件学习教程》,欢迎大家学习阅读。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持移动技术网。

如对本文有疑问,请在下面进行留言讨论,广大热心网友会与你互动!! 点击进行留言回复

相关文章:

验证码:
移动技术网