vue.js库的基本使用

  第一步:下载

    官网地址:https://cn.vuejs.org/v2/guide/installation.html

  第二步:放到项目的文件目录下

    一般新建一个js文件夹,放到js文件夹下

  第三步:在文档中导入

 <script src="js/vue.js"></script>

  第四步:使用vue

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<script src="js/vue.js"></script> <!--导入js文件-->
</head>
<body> <div id="one">
<h1>{{message}}</h1>
</div> <script> let vm=new Vue({ //实例化vue对象
el:'#one', //绑定控制区域
data:{ //数据属性
message:'hello'
}
}); </script> </body>
</html>

vue.js的M-V-VM思想

MVVM 是Model-View-ViewModel 的缩写,它是一种基于前端开发的架构模式。

Model 指代的就是vue对象的data属性里面的数据。这里的数据要显示到页面中。

View 指代的就是vue中数据要显示的HTML页面,在vue中,也称之为“视图模板” 。

ViewModel 指代的是vue.js中我们编写代码时的vm对象了,它是vue.js的核心,负责连接 View 和 Model,保证视图和数据的一致性。

显示数据

1、作为标签的内容显示,使用{{ value }}的形式,支持使用js代码

<h1>{{str1.split("").reverse().join("")}}</h1>
<!-- 3.2 支持js的运算符-->
<h1>{{num1+3}}</h1>

<!-- 3.3 js还有一种运算符,三元运算符,类似于python里面的三元表达式
三元运算符的语法:
判断条件 ? 条件为true : 条件为false的结果

python 三元表达式[三目运算符]的语法:
a if 条件 else b
-->
<h1>num1和num2之间进行比较,最大值:{{ num2>num1?num2:num1 }}</h1>

使用js代码

<h1>{{str1.split("").reverse().join("")}}</h1>
<!-- 3.2 支持js的运算符-->
<h1>{{num1+3}}</h1> <!-- 3.3 js还有一种运算符,三元运算符,类似于python里面的三元表达式
三元运算符的语法:
判断条件 ? 条件为true : 条件为false的结果 python 三元表达式[三目运算符]的语法:
a if 条件 else b
-->
<h1>num1和num2之间进行比较,最大值:{{ num2>num1?num2:num1 }}</h1>

2、作为表单元素的值显示,使用 v-model = "name",而且数据是双向绑定的,表单的值发生变化,data跟着变;data发生变化,表单的显示也跟着变

3、输出htnl代码,使用v-html

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<script src="js/vue.js"></script>
</head>
<body>
<div class="app">
<h1>{{title}}</h1>
<h3>{{url1}}</h3>
{{img}}<br>
<span v-html="img"></span>
</div>
<script>
let vm = new Vue({
el:".app",
data:{
title:"我的vue",
url1:"我的收获地址",
img:'<img src="data:images/shendan.png">',
}
})
</script>
</body>
</html>

输出html内容

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<script src="js/vue.js"></script>
</head>
<body>
<div class="app">
<h1>{{title}}</h1>
<h3>{{url1}}</h3>
{{img}}<br>
<span v-html="img"></span>
</div>
<script>
let vm = new Vue({
el:".app",
data:{
title:"我的vue",
url1:"我的收获地址",
img:'<img src="data:images/shendan.png">',
}
})
</script>
</body>
</html>

常用指令

指令(directives)是带有"v-"前缀的特殊属性,每一个指令在vue中都用固定的作用,常用的有v-if,v-for,v-model等等。

指令会在vm对象中的data属性的数据发生变化时,同步改变元素中其控制的内容或属性。

vue指令的两种写法:

vue1.x写法             vue2.x的写法
v-html ----> {{ }}
v-bind:属性名 ----> :属性
v-on:事件名 ----> @事件名
vue1.x写法             vue2.x的写法
v-html ----> {{ }}
v-bind:属性名 ----> :属性
v-on:事件名 ----> @事件名

1、操作属性

格式:    <标签名 :标签属性="data"></标签名>

<p :title="str1">{{ str1 }}</p> <!-- 也可以使用v-html显示双标签的内容,{{  }} 是简写 -->
<a :href="url2">淘宝</a>
<a v-bind:href="url1">百度</a> <!-- v-bind是vue1.x版本的写法 -->

2、绑定事件

<button v-on:click="num++">按钮</button>   <!-- v-on 是vue1.x版本的写法 -->
<button @click="num+=5">按钮2</button>

3、操作样式

3.1 控制标签的style样式

格式1:值是json对象,对象写在元素的:style属性中
标签元素:
<div :style="{color: activeColor, fontSize: fontSize + 'px' }"></div>
data数据如下:
data: {
activeColor: 'red',
fontSize: 30
}
格式2:值是对象变量名,对象在data中进行声明
标签元素:
<div v-bind:style="styleObject"></div>
data数据如下:
data: {
styleObject: {
color: 'red',
fontSize: '13px'
}
}

格式3:值是数组
标签元素:
<div v-bind:style="[style1, style2]"></div>
data数据如下:
data: {
style1:{
color:"red"
},
style2:{
background:"yellow",
fontSize: "21px"
}
}

控制style属性

格式1:值是json对象,对象写在元素的:style属性中
标签元素:
<div :style="{color: activeColor, fontSize: fontSize + 'px' }"></div>
data数据如下:
data: {
activeColor: 'red',
fontSize: 30
}
格式2:值是对象变量名,对象在data中进行声明
标签元素:
<div v-bind:style="styleObject"></div>
data数据如下:
data: {
styleObject: {
color: 'red',
fontSize: '13px'
}
} 格式3:值是数组
标签元素:
<div v-bind:style="[style1, style2]"></div>
data数据如下:
data: {
style1:{
color:"red"
},
style2:{
background:"yellow",
fontSize: "21px"
}
}

3.2 控制class类名 

格式:<h1 :class="值">元素</h1>

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<script src="js/vue.js"></script>
<style>
.box1{
color: red;
border: 1px solid #000;
}
.box2{
background-color: orange;
font-size: 32px;
}
</style>
</head>
<body>
<div id="box">
<!--- 添加class类名,值是一个对象
{
class类1:布尔值变量1,
class类2:布尔值变量2,
}
-->
<p :class="{box1:myclass1}">一个段落</p>
<p @click="myclass3=!myclass3" :class="{box1:myclass2,box2:myclass3}">一个段落</p>
</div>
<script>
let vm1=new Vue({
el:"#box",
data:{
myclass1:false, // 布尔值变量如果是false,则不会添加对象的属性名作为样式
myclass2:true, // 布尔值变量如果是true,则不会添加对象的属性名作为样式
myclass3:false,
},
})
</script>

<!-- 上面的代码可以:class的值保存到data里面的一个变量,然后使用该变量作为:class的值 这种最常用-->
<style>
.box4{
background-color: red;
}
.box5{
color: green;
}
</style>
<div id="app">
<button @click="mycls.box4=!mycls.box4">改变背景</button>
<button @click="mycls.box5=!mycls.box5">改变字体颜色</button>
<p :class="mycls">第二个段落</p>
</div>
<script>
let vm2 = new Vue({
el:"#app",
data:{
mycls:{
box4:false,
box5:true
},
}
})
</script>

<!-- 批量给元素增加多个class样式类 -->
<style>
.box6{
background-color: red;
}
.box7{
color: green;
}
.box8{
border: 1px solid yellow;
}
</style>
<div id="app2">
<p :class="[mycls1,mycls2]">第三个段落</p>
</div>
<script>
let vm3 = new Vue({
el:"#app2",
data:{
mycls1:{
box6:true,
box7:true,
},
mycls2:{
box8:true,
}
}
})
</script>
</body>
</html>

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<script src="js/vue.js"></script>
<style>
.box1{
color: red;
border: 1px solid #000;
}
.box2{
background-color: orange;
font-size: 32px;
}
</style>
</head>
<body>
<div id="box">
<!--- 添加class类名,值是一个对象
{
class类1:布尔值变量1,
class类2:布尔值变量2,
}
-->
<p :class="{box1:myclass1}">一个段落</p>
<p @click="myclass3=!myclass3" :class="{box1:myclass2,box2:myclass3}">一个段落</p>
</div>
<script>
let vm1=new Vue({
el:"#box",
data:{
myclass1:false, // 布尔值变量如果是false,则不会添加对象的属性名作为样式
myclass2:true, // 布尔值变量如果是true,则不会添加对象的属性名作为样式
myclass3:false,
},
})
</script> <!-- 上面的代码可以:class的值保存到data里面的一个变量,然后使用该变量作为:class的值 这种最常用-->
<style>
.box4{
background-color: red;
}
.box5{
color: green;
}
</style>
<div id="app">
<button @click="mycls.box4=!mycls.box4">改变背景</button>
<button @click="mycls.box5=!mycls.box5">改变字体颜色</button>
<p :class="mycls">第二个段落</p>
</div>
<script>
let vm2 = new Vue({
el:"#app",
data:{
mycls:{
box4:false,
box5:true
},
}
})
</script> <!-- 批量给元素增加多个class样式类 -->
<style>
.box6{
background-color: red;
}
.box7{
color: green;
}
.box8{
border: 1px solid yellow;
}
</style>
<div id="app2">
<p :class="[mycls1,mycls2]">第三个段落</p>
</div>
<script>
let vm3 = new Vue({
el:"#app2",
data:{
mycls1:{
box6:true,
box7:true,
},
mycls2:{
box8:true,
}
}
})
</script>
</body>
</html>

4、条件渲染指令(v-if, v-show)

v-if,v-show后跟的是布尔值,true则显示,false则隐藏

 标签元素:
<h1 v-if="num==1">num的值为1</h1>
<h1 v-else-if="num==2">num的值为2</h1>
<h1 v-else>num的值是{{num}}</h1>
data数据:
data:{
num:2
}
标签元素:
<h1 v-show="ok">Hello!</h1>
data数据:
data:{
ok:false // true则是显示,false是隐藏
}

v-show 和v-if的区别:

  #v-show后面不能有v-else

  #v-show隐藏元素时,使用的是display:none来隐藏的,而v-if是直接从HTML文档中移除元素

5、列表渲染指令

通过v-for指令可以将一组数据渲染到页面中,数据可以是数组或者对象

数据是数组:
<ul>
<!--i是列表的每一个元素-->
<li v-for="i in list">{{i}}</li>
</ul>

<ul>
<!--i是列表的每一个元素,j是每个元素的下标-->
<li v-for="(i, j) in list">{{ j+1}}、{{i}}</li>
</ul>

数据是对象:
<ul>
<!--i是每一个value值-->
<li v-for="i in obj1">{{i}}</li>
</ul>
<ul>
<!--i是每一个value值,j是每一个键名-->
<li v-for="(i, j) in obj1">{{j}}:{{i}}</li>
</ul>

v-for

数据是数组:
<ul>
<!--i是列表的每一个元素-->
<li v-for="i in list">{{i}}</li>
</ul> <ul>
<!--i是列表的每一个元素,j是每个元素的下标-->
<li v-for="(i, j) in list">{{ j+1}}、{{i}}</li>
</ul> 数据是对象:
<ul>
<!--i是每一个value值-->
<li v-for="i in obj1">{{i}}</li>
</ul>
<ul>
<!--i是每一个value值,j是每一个键名-->
<li v-for="(i, j) in obj1">{{j}}:{{i}}</li>
</ul>

vue对象提供的属性功能

1、过滤器

过滤器可以用来过滤数据或格式化文本

过滤器定义方式有两种:

var vm = new Vue({
el:"#app",
data:{},
filters:{
RMB2:function(value){
if(value==''){
return;
}else{
return '¥ '+value;
}
}
}
});

局部过滤器

var vm = new Vue({
el:"#app",
data:{},
filters:{
RMB2:function(value){
if(value==''){
return;
}else{
return '¥ '+value;
}
}
}
});

Vue.filter("RMB1", function(v){
//就是来格式化(处理)v这个数据的
if(v==0){
return v
}

return v+"元"
})

全局过滤器

Vue.filter("RMB1", function(v){
//就是来格式化(处理)v这个数据的
if(v==0){
return v
} return v+"元"
})

2、阻止事件冒泡和页面刷新

事件冒泡:在js的事件操作中,子元素的事件触发以后,会默认把事件传播给其父级元素,然后一层层往外传播,这种现象就是事件冒泡,添加.stop可以组织事件往外传播

阻止页面刷新:

  超链接\表单中的提交,希望阻止页面刷新,可以使用 @事件.prevent=""

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<script src="js/vue.js"></script>
<style>
.box1{
width: 200px;
height:200px;
background: #3c3c3c;
}
.box2{
width:100px;
height:100px;
background:deeppink;
}
</style>
<script>
window.onload=function(){

var vm =new Vue({
el:'#app',
data:{},
methods:{
alert:function(v){
alert(v)
}
}
})

}
</script>

</head>
<body>
<div id="app">
<div class="box1" @click="alert('box1')">
<div class="box2" @click.stop="alert('box2')">
啦啦啦德玛西亚
</div>
</div>

<form action="#">
<input type="text">
<input type="submit">
<input type="submit" value="提交2" @click.prevent="">

</form>
</div>

</body>
</html>

阻止冒泡和刷新

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<script src="js/vue.js"></script>
<style>
.box1{
width: 200px;
height:200px;
background: #3c3c3c;
}
.box2{
width:100px;
height:100px;
background:deeppink;
}
</style>
<script>
window.onload=function(){ var vm =new Vue({
el:'#app',
data:{},
methods:{
alert:function(v){
alert(v)
}
}
}) }
</script> </head>
<body>
<div id="app">
<div class="box1" @click="alert('box1')">
<div class="box2" @click.stop="alert('box2')">
啦啦啦德玛西亚
</div>
</div> <form action="#">
<input type="text">
<input type="submit">
<input type="submit" value="提交2" @click.prevent=""> </form>
</div> </body>
</html>

3、计算和监听属性

计算属性

将调整data数据的代码放在计算属性(computed)中,就是对数据调整的封装,便于阅读

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<script src="js/vue.min.js"></script>
<script>
window.onload = function(){
var vm = new Vue({
el:"#app",
data:{
str1: "abcdefgh"
},
computed:{ //计算属性:里面的函数都必须有返回值
strRevs: function(){
var ret = this.str1.split("").reverse().join("");
return ret
}
}
});
}
</script>
</head>
<body>
<div id="app">
<p>{{ str1 }}</p>
<p>{{ strRevs }}</p>
</div>
</body>
</html>

computed

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<script src="js/vue.min.js"></script>
<script>
window.onload = function(){
var vm = new Vue({
el:"#app",
data:{
str1: "abcdefgh"
},
computed:{ //计算属性:里面的函数都必须有返回值
strRevs: function(){
var ret = this.str1.split("").reverse().join("");
return ret
}
}
});
}
</script>
</head>
<body>
<div id="app">
<p>{{ str1 }}</p>
<p>{{ strRevs }}</p>
</div>
</body>
</html>

监听属性

可以监听一个数据,从而做出相应的自定义操作。

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<script src="js/vue.js"></script>
</head>
<body>

<div id="one">
<button @click="num-=1">-</button><span>{{num}}</span><button @click="num=num+1">+</button>

</div>

<script>
let vm =new Vue({
el:'#one',
data:{
num:2
},
watch:{
num:function(newval,oldval){
console.log(newval,oldval)
if (newval == 0){
alert('数值已经减到最小了')
}else if(newval<0){
alert('数据有误')
}
}
}

})
</script>

</body>
</html>

watch

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<script src="js/vue.js"></script>
</head>
<body> <div id="one">
<button @click="num-=1">-</button><span>{{num}}</span><button @click="num=num+1">+</button> </div> <script>
let vm =new Vue({
el:'#one',
data:{
num:2
},
watch:{
num:function(newval,oldval){
console.log(newval,oldval)
if (newval == 0){
alert('数值已经减到最小了')
}else if(newval<0){
alert('数据有误')
}
}
} })
</script> </body>
</html>

4、vue对象的生命周期

每个vue对象在创建时都要经过一系列的初始化过程,在这个过程中vue.js会自动运行一些叫做生命周期的钩子函数,我们可以使用这些函数,在对象创建的不同阶段加上我们需要的代码,实现特定的功能

部分钩子函数及作用:

  beforeCreate:function(){}   //实例刚被创建,data属性还未初始化

  created:function(){}  //初始化data,但未初始化dom

  beforeMount(){}    //初始化dom

  mounted(){}     //data显示到页面

  beforeUpdate(){}  // vm对象还未把更新的数据显示到页面

  update(){}    //vm对象把更新的数据显示到了页面

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<script src="js/vue.js"></script>
</head>
<body>

<div id="app">
<p>{{num}}</p>
<button @click="num++">按钮</button>
</div>

<script>
let vm = new Vue({
el:'#app',
data:{
num:0
},
beforeCreate:function () { //尚未初始化
console.log('beforeCreate:',this)
console.log('num:',this.num)
},
created:function () {
console.log('Created:',this)
console.log('num:',this.num) //初始化了data
console.log('el:',this.$el)
},
beforeMount:function () {
console.log('beforeMount:',this)
console.log('num:',this.num)
console.log('el:',this.$el.innerHTML) //初始化$el
},
mounted:function () {
console.log('mounted:',this)
console.log('num:',this.num)
console.log('mounted_el:',this.$el.innerHTML) //data 显示到页面

},
beforeUpdate:function () {
console.log('beforeUpdate_el:',this.$el.innerHTML) //vm对象还未把更新的数据显示到页面
},
updated:function(){
console.log('updated_el:',this.$el.innerHTML) //vm对象把更新的数据显示到了页面
}

})
</script>

</body>
</html>

钩子函数

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<script src="js/vue.js"></script>
</head>
<body> <div id="app">
<p>{{num}}</p>
<button @click="num++">按钮</button>
</div> <script>
let vm = new Vue({
el:'#app',
data:{
num:0
},
beforeCreate:function () { //尚未初始化
console.log('beforeCreate:',this)
console.log('num:',this.num)
},
created:function () {
console.log('Created:',this)
console.log('num:',this.num) //初始化了data
console.log('el:',this.$el)
},
beforeMount:function () {
console.log('beforeMount:',this)
console.log('num:',this.num)
console.log('el:',this.$el.innerHTML) //初始化$el
},
mounted:function () {
console.log('mounted:',this)
console.log('num:',this.num)
console.log('mounted_el:',this.$el.innerHTML) //data 显示到页面 },
beforeUpdate:function () {
console.log('beforeUpdate_el:',this.$el.innerHTML) //vm对象还未把更新的数据显示到页面
},
updated:function(){
console.log('updated_el:',this.$el.innerHTML) //vm对象把更新的数据显示到了页面
} })
</script> </body>
</html>

  

  

  

 
 

vue学习(转载)的更多相关文章

  1. Vue学习心得----新手如何学习Vue(转载)

    ps:本文并非原著,转载自:https://www.cnblogs.com/buzhiqianduan/p/7620102.html,请悉知 前言 使用vue框架有一段时间了,这里总结一下心得,主要为 ...

  2. Vue学习笔记-2

    前言 本文非vue教程,仅为学习vue过程中的个人理解与笔记,有说的不正确的地方欢迎指正讨论 1.computed计算属性函数中不能使用vm变量 在计算属性的函数中,不能使用Vue构造函数返回的vm变 ...

  3. Vue学习笔记-1

    前言 本文不是Vue.js的教程,只是一边看官网Vue的教程文档一边记录并总结学习过程中遇到的一些问题和思考的笔记. 1.vue和avalon一样,都不支持VM初始时不存在的属性 而在Angular里 ...

  4. Java多线程学习(转载)

    Java多线程学习(转载) 时间:2015-03-14 13:53:14      阅读:137413      评论:4      收藏:3      [点我收藏+] 转载 :http://blog ...

  5. Vue学习记录第一篇——Vue入门基础

    前面的话 Vue中文文档写得很好,界面清爽,内容翔实.但文档毕竟不是教程,文档一上来出现了大量的新概念,对于新手而言,并不友好.个人还是比较喜欢类似于<JS高级程序设计>的风格,从浅入深, ...

  6. Vue学习-01

    1.vue 学习 v-bind:title 数据绑定 v-if 判断显示或者隐藏 <div id="app-3"> <p v-if="seen" ...

  7. vue学习之vue基本功能初探

    vue学习之vue基本功能初探: 采用简洁的模板语法将声明式的将数据渲染进 DOM: <div id="app"> {{ message }} </div> ...

  8. vue学习第一篇 hello world

    计划近期开始学习vue.js.先敲一个hello wolrd作为开始. <!DOCTYPE html> <html lang="en"> <head& ...

  9. vue学习心得

    前言 使用vue框架有一段时间了,这里总结一下心得,主要为新人提供学习vue一些经验方法和项目中一些解决思路. 文中谨代表个人观点,如有错误,欢迎指正. 环境搭建 假设你已经通读vue官方文档(文档都 ...

  10. vue学习笔记(二)——简单的介绍以及安装

    学习编程需要的是 API+不断地练习^_^ Vue官网:https://cn.vuejs.org/ 菜鸟教程:http://www.runoob.com/vue2/vue-tutorial.html ...

随机推荐

  1. Redis 数据库学习

    安装(mac) 使用homebrew安装,命令是:brew install redis. 安装完成后启动命令:brew services start redis. 使用命令redis-cli进入red ...

  2. 一个java多线程面试题

    线程a 打印 数字 0--12: 线程b 打印 字母 a--z; 打印结果:0ab1cd2ef3gh4ij5kl6mn7op8qr9st10uv11wx12yz 要求用到 线程间传值: 分析:线程a打 ...

  3. 【转载】如何选择MySQL存储引擎

    一.MySQL的存储引擎 完整的引擎说明还是看官方文档:http://dev.mysql.com/doc/refman/5.6/en/storage-engines.html 这里介绍一些主要的引擎 ...

  4. 在iOS中使用百度地图

    就如同在百度地图的文档中所说的一样,这么来.但是,有一个小疏忽. 到添加完所需要的framework之后,一定要记得把你的(Class-Prefix)AppDelegate的后缀改成mm. 估计百度的 ...

  5. Linux删除(清空)正在运行的应用日志文件内容

    在测试环境定位问题时,如果发现日志文件内容太多或太大,有时需要删除该日志,如Tomcat,Nginx日志.以前每次都是先rm -rf ***.log,然后重启应用.直到后来发现了以下命令,原来可以不用 ...

  6. Java 理论与实践: 修复 Java 内存模型,第 2 部分(转载)

    在 JSR 133 中 JMM 会有什么改变? 活跃了将近三年的 JSR 133,近期发布了关于如何修复 Java 内存模型(Java Memory Model, JMM)的公开建议.在本系列文章的 ...

  7. Middleware / 中间件

    中间件格式 module.exports = options => { return (ctx, next) => { // do something } } 中间件格式为一个高阶函数,外 ...

  8. ibatis源码学习1_整体设计和核心流程

    背景介绍ibatis实现之前,先来看一段jdbc代码: Class.forName("com.mysql.jdbc.Driver"); String url = "jdb ...

  9. log4net 入门使用

    log4net 是dotnet平台下的一个日记记录组件. 一  NuGet中安装log4net包: 二 配置log4net.config文件 配置文件内容: <?xml version=&quo ...

  10. nutch2.1+mysql+elasticsearch整合linux单机部署

    这次主要介绍下nutch2.1和mysql和elasticsearch的整合,是在单机上运行,并不是分布式部署.1.下载nutch2.1 nutch下载地址:http://labs.mop.com/a ...