vue
Posted kuxingseng95
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了vue相关的知识,希望对你有一定的参考价值。
vue
vue介绍
Vue.js是前端三大新框架:Angular.js、React.js、Vue.js之一,Vue.js目前的使用和关注程度在三大框架中稍微胜出,并且它的热度还在递增。
Vue.js可以作为一个js库来使用,也可以用它全套的工具来构建系统界面,这些可以根据项目的需要灵活选择,所以说,Vue.js是一套构建用户界面的渐进式框架。
Vue的核心库只关注视图层,Vue的目标是通过尽可能简单的 API 实现响应的数据绑定,在这一点上Vue.js类似于后台的模板语言。
Vue也可以将界面拆分成一个个的组件,通过组件来构建界面,然后用自动化工具来生成单页面(SPA - single page application)系统。
Vue.js使用文档及下载Vue.js
Vue.js使用文档已经写的很完备和详细了,通过以下地址可以查看: https://cn.vuejs.org/v2/guide/
vue.js如果当成一个库来使用,可以通过下面地址下载: https://cn.vuejs.org/v2/guide/installation.html
vue的引入方式
和js一样,vue也是需要引包来进行使用
<script src="./js/vue.js"></script>
引入包之后,也是在<script></script>中进行使用,开发中可以使用开发版本vue.js,产品上线要换成vue.min.js。
vue的基本用法
作用域
在使用之前要知道作用域的概念,通常我们把需要改变的地方,都放到一个盒子里,这个盒子通常是用div标签包裹的,我们也需要给这个盒子取一个名字,类名还是id名都可以,这是为了以后更方便的找到它。
基本使用
vue和js不同,它是需要改变标签的
首先,用一个盒子来包裹需要改变的内容(当然,也可以不包裹,直接用选择器选到,这个盒子只是为了减少后续的操作)然后给这个盒子取一个名字,这里我给它取了一个类名为div1,
<div class="div1"> </div>
然后往里面添加一个需要改变内容的标签
<div class="div1"> <div class="div2">{{content}}</div> </div>
然后在<script>标签中新建一个vue对象
<script> var vm = new Vue({ // 创建vue对象 el:‘.div1‘, // 绑定操作的作用域 data:{ //写入数据 content:"vue的基本使用" } }) </script>
运行之后就完成了一个简单vue操作。
基本语法
操作数据:标签体中加入"{{变量名}}"用来接受数据,然后在<script>标签中创建对象并在data中设置相应的值
修改属性:v-bind:(可以简写为":"),使用方法是在需要改变的属性前加入"v-bind:"或者":",然后将属性值换成变量名,然后在vue对象的data中加入对应内容即可。
调用方法:v-on:(可以简写为"@"),使用方法是在需要改变的的事件前面加上"v-on:"或者"@",然后将函数换成函数名,然后在vue对象的methods中加入相关的函数即可。
三个的综合例子:
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta http-equiv="X-UA-Compatible" content="ie=edge"> <title>02-vue的基本语法</title> <script src="js/vue.js"></script> <script> window.onload = function () { // 创建vue对象 var vm = new Vue({ el:‘.box‘, data:{ content:"操作数据", linkData:"淘宝链接", url:‘http://www.taobao.com‘, counter:0 }, methods:{ fnAddClick:function(){ // this --vue对象 this.counter += 1; } } }) } </script> </head> <body> <div class="box"> <!-- // 3.调用方法 指令 v-on: --> <button v-on:click="fnAddClick">计数器: {{counter}}</button> <!-- // 2.修改属性 指令 v-bind: --> <a v-bind:href="url" target=‘_blank‘>{{linkData}}</a> <!-- // 1.操作数据 --> <p>{{content}}</p> </div> </body> </html>
其他语法:
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta http-equiv="X-UA-Compatible" content="ie=edge"> <title>02-vue的基本语法</title> <style> .red{ color: red; } .font{ font-size:50px; } </style> <script src="js/vue.js"></script> <script> window.onload = function () { // 三元运算符 // (条件)?"值1":"值2" 条件为真则为值1,否则为值2 // 创建vue对象 var vm = new Vue({ el:‘.box‘, data:{ counter:0, contentPragraph:‘三目运算 三元运算‘, isRed:false, sStr:‘12345678‘ }, }) } </script> </head> <body> <div class="box"> <!-- 下面用的都是简写形式 --> <!-- 3.js 链式 字符串反转--> <p>{{sStr.split(‘‘).reverse().join(‘‘)}}</p> <!-- 2.三目运算 三元运算 --> <p :class="isRed?‘red‘:‘font‘">{{contentPragraph}}</p> <!-- 1.累加的表达式 --> <button @click="counter += 1">新的计数器:{{counter}}</button> </div> </body> </html>
vue的属性
其实前面已经说了三种vue属性:el、data和methods,它们一个是找到作用域,一个是设置数据和属性,一个是增加方法。
计算属性
基本语法的其他语法介绍中介绍了字符串反转的例子,反转的过程写到了标签中,没有做到标签和js的分离,计算属性就可以改善这个问题
下面是将反转内容写到属性中的方法:
computed:{ reverseMessage:function(){ return this.message.split(‘‘).reverse().join(‘‘); } },
使用的时候,直接在模板中调用计算属性中自定义的reverseMessage方法即可
整体代码:
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta http-equiv="X-UA-Compatible" content="ie=edge"> <title>03-vue的计算和倾听属性</title> <script src="js/vue.js"></script> <script> window.onload = function () { var vm = new Vue({ el:‘.app‘, data:{ message:‘ABCDEFG‘, }, computed:{ reverseMessage:function(){ return this.message.split(‘‘).reverse().join(‘‘); } }, }) } </script> </head> <body> <div class="app"> <!-- <p>{{message.split(‘‘).reverse().join(‘‘)}}</p> --> <p>计算属性:{{reverseMessage}}</p> </div> </body> </html>
倾听属性
当我们修改一个值的时候,可以用倾听属性来观察新值和旧值
倾听属性用的是watch,给一个值设置一个function方法,然后传入两个数就可以分别记录新值和旧值
整体代码:
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta http-equiv="X-UA-Compatible" content="ie=edge"> <title>03-vue的计算和倾听属性</title> <script src="js/vue.js"></script> <script> window.onload = function () { var vm = new Vue({ el:‘.app‘, data:{ counter:0, }, watch:{ counter:function(newVal,oldVal){ console.log(newVal + ‘------‘ + oldVal); } } }) } </script> </head> <body> <div class="app"> <button @click="counter += 1"> 累加量:{{counter}}</button> </div> </body> </html>
过滤器属性
过滤器属性是对内容进行判断过滤用的它使用的是filters,增加过滤器和增加方法是很类似的。
完整代码:
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta http-equiv="X-UA-Compatible" content="ie=edge"> <title>过滤器</title> <script src="js/vue.js"></script> <script> window.onload = function () { var vm = new Vue({ el:‘.box‘, data:{ money:1000, }, filters:{ moneyFiter:function(a){ if (a > 100) { return "¥" + a; }else{ return "小零钱" } } } }) } </script> </head> <body> <!-- money=50 ¥50 --> <div class="box">{{money | moneyFiter}}</div> </body> </html>
上面设置的是局部的过滤器,还有一种是设置全局的过滤器:
完整代码:
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta http-equiv="X-UA-Compatible" content="ie=edge"> <title>过滤器</title> <script src="js/vue.js"></script> <script> window.onload = function () { // 全局的过滤器 Vue.filter(‘movie‘,function (a) { if (a > 18) { return "允许看电影!" } else { return "小毛孩!" } }) var vm2 = new Vue({ el:‘.app‘, data:{ age:28 } }) } </script> </head> <body> <div class="app">{{age | movie}}</div> </body> </html>
class和style的绑定
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta http-equiv="X-UA-Compatible" content="ie=edge"> <title>04-class和style的绑定</title> <style> .red{ color:red; } .font{ font-size: 50px; } .line{ text-decoration: underline; } </style> <script src="js/vue.js"></script> <script> window.onload = function () { var vm = new Vue({ el:‘.box‘, data:{ cla:"red font", isTrue:false, isRed:true, classObj:{ red:true, font:true }, classList:[‘red‘,‘line‘], style01:{ "font-size":"30px" }, style02:{ "font-weight":"bold", }, } }) } </script> </head> <body> <!-- class 样式类名称 --> <div class="box"> <!-- style ===== --> <!-- 方式二:通过sytle列表 <p :style="[style01,style02]">style第二种写法</p> --> <!-- 方式一:通过修改style值 <p :style="style01">style第一种写法</p> --> <!-- ============== class 样式类名称--> <!-- 方式五:通过data中变量列表来改变 <p :class="classList">5.class 变量的列表List</p> --> <!-- 方式四:通过标签变量列表修改 <p :class="[‘line‘,‘font‘]">4.class 变量的列表</p> --> <!-- 方式三:通过data中字典中对css类的判断改变css值 <p :class="classObj">3.class 变量的对象</p> --> <!-- 方式二:通过对css类在标签中进行判断,然后改变css属性 <p :class="{line:isTrue,red:isRed}">2.class 变量的{类名称:变量}</p> --> <!-- 方式一:通过直接修改class值来改变css属性 <p :class="cla">1.class 变量的字符串</p> --> </div> </body> </html>
条件渲染
介绍v-show,v-if,v-else这三个命令:
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta http-equiv="X-UA-Compatible" content="ie=edge"> <title>05-条件渲染</title> <script src="js/vue.js"></script> <script> window.onload = function () { var vm = new Vue({ el:‘.app‘, data:{ isFirst:6, isShow:true } }) } </script> </head> <body> <div class="app"> <!-- v-show 显示 实质 display:none 注意在vue中使用v-show ;原先css代码不能设置display属性 --> <p v-show="isShow">v-show 是否显示标签</p> <!-- <p v-if="isFirst == 1">条件渲染 第一个标签</p> <p v-else-if="isFirst == 2">条件渲染 第222222个标签</p> <p v-else-if="isFirst == 3">条件渲染 第3333个标签</p> <p v-else>条件渲染 第4444个标签</p> --> <!-- <p v-if="isFirst">条件渲染 第一个标签</p> <p v-else>条件渲染 第222222个标签</p> --> <!-- v-if 如果是false 删除了标签 --> <!-- <p v-if="isFirst">条件渲染 第一个标签</p> --> </div> </body> </html>
注意:v-show和css中的display会有冲突,需要禁用css中的display
列表渲染
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta http-equiv="X-UA-Compatible" content="ie=edge"> <title>01-vue的基本使用</title> <script src="js/vue.js"></script> <script> window.onload = function () { var vm = new Vue({ el:‘.box‘, data:{ itemList:[1,2,3,4,5,6], indexList:["A","B","C","D"], objData:{ name:‘马云‘ }, dataList:[ { name:"张一鸣", age:‘60‘ }, { name:"马化腾", age:‘16‘ }, ] } }) } </script> </head> <body> <div class="box"> <!-- <div v-for="item in itemList">{{item}}</div> --> <ul class="list"> <!-- 列表渲染 --> <li v-for="item in itemList">{{item}}</li> <!-- 这个用法和python类似,v-for中的item就是模板中的item,这个会自动遍历和渲染 --> <li v-for="(item,index) in indexList"> <!-- 两个参数:一个是内容,一个是下标 --> {{index}} ------- {{item}} </li> <!-- 2.只有一个对象 --> <li v-for="obj in objData"> <!-- 这个遍历出来的键值对值显示值 --> {{obj}} </li> <li v-for="(obj,key) in objData"> <!-- 两个参数:一个是值,一个是键 --> {{key}}--------{{obj}} </li> <!-- 3.批量的对象集合 --> <li v-for="dataObj in dataList"> <!-- 这个就相当于遍历出来字典 --> {{dataObj.name}} ----- {{dataObj.age}} </li> </ul> </div> </body> </html>
事件处理
事件处理中包括两个部分,一个是阻止事件传递,一个是阻止默认的提交事件
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta http-equiv="X-UA-Compatible" content="ie=edge"> <title>07-事件的处理</title> <script src="js/vue.js"></script> <script> window.onload = function () { var vm = new Vue({ el:‘.box‘, data:{ }, methods:{ fnFather:function(){ alert(‘father‘); }, fnSon:function(){ alert(‘son‘); }, fnSubmit:function(){ alert(‘提交事件‘); }, fnBtnSub:function () { alert(‘提交按钮点击‘) } } }) } </script> </head> <body> <div class="box"> <!-- 阻止默认的提交事件 --> <!-- 两种方式:一个是修改action,一个是修改click --> <!-- 方式一: --> <!-- <form action="" @submit.prevent="fnSubmit"> --> <form action=""> <input type="text" name="user"> <!-- 方式二 --> <input type="submit" @click.prevent="fnBtnSub"> </form> <!-- 阻止事件的传递 @click.stop--> <div @click="fnFather" class="father" style="background:red"> father <div @click.stop="fnSon" class="son" style="background:green">son</div> </div> </div> </body> </html>
以上是关于vue的主要内容,如果未能解决你的问题,请参考以下文章