一、概述
Vue.js 使用了基于 HTML 的模版语法,允许开发者声明式地将 DOM 绑定至底层 Vue 实例的数据。
Vue.js 的核心是一个允许你采用简洁的模板语法来声明式的将数据渲染进 DOM 的系统。
结合响应系统,在应用状态改变时, Vue 能够智能地计算出重新渲染组件的最小代价并应用到 DOM 操作上。
二、插值
1.文本
数据绑定最常见的形式就是使用 “Mustache” 语法(双大括号)的文本插值:
<div id="app">
<!--方法1-->
<h3>昵称:{{ username }}</h3>
<!--方法2-->
<h3>大区:<span v-text="area"></span></h3>
<!--方法3-->
<template>
<h3>段位:{{ rank }}</h3>
<h3>擅长英雄:{{ heros }}</h3>
</template>
</div>
var app = new Vue({
el: "#app",
data: {
username: "蓉城丶木子李",
area:"微信1区 绚烂刀锋",
rank:"荣耀王者",
heros:"露娜、李白、诸葛亮、狄仁杰"
}
});
2、Html
使用 v-html 指令用于输出 html 代码:
<div id="app">
<div v-html="message">
</div>
new Vue({
el: "#app",
data: {
message: "<h1>Hello, world!</h1>"
}
})
3、属性
使用 v-bind 指令用于绑定属性:
代码1:
<div id="app">
<h1 v-bind:id="className"></h1>
</div>
new Vue({
el: "#app",
data: {
className: "title"
}
})
<!-- 显示结果 -->
<div id="app">
<h1 id="title"></h1>
</div>
代码2:
<!DOCTYPE html>
<html lang="en" xmlns:v-bind="http://www.w3.org/1999/xhtml" xmlns:v-on="http://www.w3.org/1999/xhtml">
<head>
<meta charset="UTF-8">
<title>Title</title>
<script src="vue-2.4.0.js"></script>
<style>
.test1{
background-color: #9acfea;
}
.test2{
color: orange;
}
</style>
</head>
<body>
<div id="app">
<!--v-bind 可以简写为冒号:-->
<p v-bind:id="id" :title="title">你好,box</p>
<!--v-bind指令支持js代码-->
<p :title="title + '嘿嘿'">hello </p>
<p :titlt="title.substr(0,2)">hello2</p>
<hr>
<p style="color: red">你好,小红</p>
<!--一定要记住的点: v-bind中要么调用data里的属性名,要么自己写正确的js代码-->
<p :style="{color:'red'}">你好,小红2</p>
<p :style="style">你好,小红3</p>
<p :style="style" :title="'vue 中控制属性'">你好,小红4</p>
<!--true和false是表示布尔类型的关键字加了单引号则变成普通的字符串-->
<input type="checkbox" :checked="true">
<!--一次处理多个样式,用数组-->
<p :style="[style,style2]">你好,小红5</p>
<p class="test1 test2" id="pc"> 你好,小张</p>
<p :class="['test1 test2']"> 你好,小张</p>
<p :class="['test1',{'test2':false}]">你好,小张</p>
<p :class="['test1',{'test2':flag}]">你好,小张</p>
<p :class="classObj">你好,小张</p>
<button type="button" v-on:click="toggle">切换样式</button>
</div>
</body>
<script>
new Vue({
el:"#app",
data:{
id:"username",
title:"你好世界",
style:{
color:'pink',
'font-size':'30px',
},
style2:{
'font-weight':'900',
},
flag:false,
classObj:{
'test1':false,
test2:true,
},
},
methods:{
toggle(){
// if (this.flag){
// this.flag = false;
// }else {
// this.flag = true;
// }
this.flag=!this.flag; //只有布尔类型可以怎样写
}
},
created(){
let pc = document.querySelector("#pc");
console.log(pc.className);
pc.classList.add('test3');
}
});
</script>
</html>
4、表达式
Vue.js 提供了完全的 JavaScript 表达式支持。
<div id="app">
<template>
<p>{{num + 5}}</p>
<p>{{isRain ? "下雨了,出门记得带雨伞!" : "今天天气不错!"}}</p>
<p>{{str.split("").reverse().join("")}}</p>
<p v-text="'Hello, ' + name + ' !'"></p>
</template>
</div>
new Vue({
el: '#app',
data: {
num: 5,
isRain: true,
str:"HELLO",
name: "木子李"
}
})
三、指令、参数、修饰符
\1. 指令:指令是带有 v- 前缀的特殊属性。
\2. 参数:在指令后以冒号指明。
\3. 修饰符:是以 . 指明的特殊后缀,用于指出特殊何种方式定
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<script src="vue-2.4.0.js"></script>
</head>
<body>
<div id="app">
<div style="height: 200px;width: 200px;background-color: pink" @click="divClick">
<p style="height: 100px;width: 100px;background-color: orange" @click="pClick">
<!--.stop修饰符表示事件的冒泡到此为止(阻止事件冒泡)-->
<button type="button" @click.stop="btnClick">阻止冒泡</button>
</p>
</div>
<!--.capture 秀是否有表示事件捕获-->
<div style="height: 200px;width: 200px;background-color: pink" @click.capture="divClick">
<p style="height: 100px;width: 100px;background-color: orange" @click.capture="pClick">
<!--.stop修饰符表示事件的冒泡到此为止(阻止事件冒泡)-->
<button type="button" @click.capture="btnClick">捕获</button>
</p>
</div>
<!--.prevent 修饰符默认默认行为-->
<a href="https://baidu.com" target="_blank" @click.prevent="aClick">百度</a>
<!--.self 修饰符表示只在自身触发-->
<div style="height: 200px;width: 200px;background-color: pink" @click="divClick">
<p style="height: 100px;width: 100px;background-color: orange" @click.self="pClick">
<!--.stop修饰符表示事件的冒泡到此为止(阻止事件冒泡)-->
<button type="button" @click="btnClick">.self</button>
</p>
</div>
<!--.once 修饰符表示该事件只生效一次-->
<!--修饰符可以组合使用-->
<a href="https://baidu.com" target="_self" @click.prevent.once="aClick">百度</a>
</div>
</body>
<script>
new Vue({
el:"#app",
data:{
},
methods:{
aClick(){
console.log("你点击了a标签");
},
divClick(){
console.log("你点击的是div");
},
pClick(){
console.log("你点击的是p");
},
btnClick(){
console.log("你点击的是btn");
}
},
})
</script>
</html>
四、用户输入
在 input 输入框中我们可以使用 v-model 指令来实现双向数据绑定:
<!DOCTYPE html>
<html lang="en" xmlns:v-bind="http://www.w3.org/1999/xhtml" xmlns:v-on="http://www.w3.org/1999/xhtml">
<head>
<meta charset="UTF-8">
<title>Title</title>
<script src="vue-2.4.0.js"></script>
</head>
<body>
<!--使用Vue外层一定要有一个包裹元素-->
<div id="app">
<!--v-model表示数据双向绑定,v到M的双向绑定-->
<!--v-model只能用在表单元素中-->
<input type="text" id="username" name="username" v-model="msg" placeholder="请输入用户名">
<!--vue取值法,双大括号,会自动从data中获取对应的值,取不到会none-->
<!--属性中使用data中的值必须使用v-bind指令,无需双大括号-->
<p id="text" v-on:click="show" v-bind:title="info">{{msg}}</p>
</div>
</body>
<script>
/*1.创建一个Vue实例*/
let vm = new Vue({
el:"#app", //指定数据绑定容器
data:{ //设置Vue可操作的数据内容
msg:"今天学习Vue",
info:"别看我",
},
methods:{
show:function (){
alert("vue绑定的单击事件 ");
this.msg="vue控制data的值";
}
}
});
</script>
</html>
五、绑定事件
<!DOCTYPE html>
<html lang="en" xmlns:v-on="http://www.w3.org/1999/xhtml">
<head>
<meta charset="UTF-8">
<title>Title</title>
<script src="vue-2.4.0.js"></script>
</head>
<body>
<div id="app">
<button type="button" v-on:click="getCount">{{count}}</button>
<button type="button" @click="getCount2">{{count2}}</button>
</div>
</body>
<script>
new Vue({
el:"#app",
data:{
count:0,
count2:99,
},
methods:{
getCount(){
this.count=++this.count;
},
getCount2(){
this.count2=--this.count2;
},
}
});
</script>
</html>