一,Vue
1,概述
是一个轻量级的前端框架.封装了HTML CSS JS的代码.
特点:
1, 是一个轻量级的 渐进式的框架, 按需配置
2, 实现了数据驱动/双向绑定 和 组件化的思想(高内聚)
3, vue框架可以避免了DOM的API
4, 遵循了MVVM设计模式,实现前端代码的松耦合
M是Model,是指数据
V是View,是指视图
VM是ViewModel,是指在指定视图里渲染指定数据
2,案例
把vue.js导入到你的项目中
创建HTML文件,并引入vue.js
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>测试 vue框架</title>
<!-- 1.引入vue.js来用vue框架的核心功能
src用来指定js文件的位置
-->
<script src="vue.js"></script>
</head>
<body>
<!-- 2.准备解析vue的数据
{{message}}是插值表达式,用来获取message的值
-->
<div id="app"> {{message}} </div>
<!-- 3.给第二步准备数据 -->
<script>
var a={
message:"hello vue~"
}
//1,创建Vue对象
new Vue({
//el挂载点,意思是,把数据挂载到指定位置
el:"#app",//利用CSS的id选择,选中了网页中的元素
//data是vue为挂载点准备好的数据
data:a
})
</script>
</body>
</html>
测试
总结
3,练习
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>练习 vue开发步骤</title>
<!-- 1.引入vue.js -->
<script src="vue.js"></script>
</head>
<body>
<!-- 2.准备数据渲染区,插值表达式获取属性的值-->
<div id="app">
姓名:{{name}}
年龄:{{age}}
</div>
<!-- 3.创建Vue对象 -->
<script>
new Vue({
el:"#app" , //挂载点
data:{ //给挂载点准备数据
name:"jack" ,
age:20
}
})
</script>
</body>
</html>
二,Vue的基础语法
1,运算符&函数
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>测试 vue的运算符</title>
<!-- 1.引入vue.js -->
<script src="vue.js"></script>
</head>
<body>
<!-- 2.准备数据渲染区 创建Vue对象 -->
<div id="app">
加减乘除运算: {{3+2}} {{3-2}} {{3*2}} {{3/2}} {{3%2}}
三元运算符: {{ age > 18 ? "成年人" : "未成年" }}
字符串的常见操作:{{str}} {{str.length}} {{str.concat(100)}}
调用函数: {{ show() }} {{ print(100) }} {{add(1,2)}}
</div>
<!-- 3.创建Vue对象 -->
<script>
new Vue({
//指定挂载点的位置,每个Vue对象必须有这个el属性!!!
el:"#app",
data:{ //给数据渲染区准备数据
age:10,
str:"hello"
},
methods:{ //准备函数
//函数名:函数的声明
show:function(){
console.log("show()调用成功!");
},
print:function(a){
console.log("print()调用成功"+a);
},
add:function(a,b){
console.log(a+b);
}
}
})
</script>
</body>
</html>
1,解析类型丰富的data
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>测试 vue解析复杂的数据</title>
<script src="vue.js"></script>
</head>
<body>
<div id="app">
{{name}}
<h1>解析vue对象的数据:</h1>
<h1>姓名:{{person.name}} 年龄:{{person.age}} </h1>
<h1>解析vue数组的数据:</h1>
<h2>{{hobby}} {{hobby[0]}} {{hobby[1]}} </h2>
<!-- 数组名[下标].属性名 目的是来获取每个对象中属性对应的值 -->
<h2>{{persons[0].name}} {{persons[1].age}}</h2>
</div>
<script>
var vm = new Vue({
el:"#app",
data:{
name:"jack",
//对象名:对象的多个特征
person:{
name:"rose",
age:20
},
//数组
hobby:["篮球","足球"],
//数组
persons:[
{ name:"jack" , age:20 },
{ name:"rose" , age:10 }
]
}
})
</script>
</body>
</html>
2,data的三种写法
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>vue里data的三种写法</title>
<script src="vue.js"></script>
</head>
<body>
<div id="a">
{{msg}} {{hobby[0]}}
</div>
<script>
new Vue({
el:"#a",
//通过函数,设置返回值--vue项目中组件化的使用
// data:function(){
data(){//效果同上,是上面代码的简写形式
//必须返回js对象
return {
msg:"hello vue",
hobby:[1,2,3]
}
}
})
</script>
</body>
</html>
三,Vue的指令
1,概述
就是Vue框架提供的一些有特殊意义的代码,都有v-的前缀
常见的指令: v-if v-for v-on …
使用方式: 在开始标签处,添加新的属性,有v-的前缀的标识
2,v-model & v-cloak
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>测试 vue指令</title>
<script src="vue.js"></script>
<style>
/* 语法: 选择器{样式1;样式2;...} */
[v-cloak]{/* 选中有指定属性的元素 */
display: none; /* 隐藏 */
}
</style>
</head>
<body>
<!-- 2.v-cloak指令:解决插值表达式的闪现问题 -->
<div class="a" v-cloak>
{{address}} {{address}} {{address}}
<!-- 1.v-model指令:双向绑定,是指V和M的数据可以实时同步
address值是指你的数据要和哪个属性进行绑定.
可以获取也可设置属性的值
-->
<input type="text" v-model="address"/>
</div>
{{address}}
<script>
new Vue({
el:".a",
data(){
return{
address:"北京"
}
}
})
</script>
</body>
</html>
3,v-if & v-show & v-for
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>测试 vue指令</title>
<script src="vue.js"></script>
</head>
<body>
<div id="app">
<h1>{{name}}</h1>
<!-- 3.v-text和v-html 指令 都是用来获取属性值的,
区别是:前者无法解析HTML标签只能当做一个普通文本展示
后者可以解析数据中出现的HTML标签
-->
<h1 v-text="name"></h1>
<h1 v-html="name"></h1>
<!--4.v-if指令,判断条件满足时就展示元素,不满足就不展示
了解:v-if和v-show区别?都可以判断,不满足时前者干脆不会解析元素
后者会解析这个元素但是结合css代码来隐藏style="display: none;"
-->
<div v-if="age>18">年成人</div>
<div v-show="age>18">年成人</div>
<!--5.v-if指令的复杂使用 if...else if...else语法同java-->
<div v-if="salary>20000">金领</div>
<div v-else-if="salary>10000">白领</div>
<div v-else>屌丝</div>
<!--6.v-for指令用来循环遍历,通常用来遍历数组,语法类似forin,
i是获取遍历得到的数据,in是固定语法,hobby是数组名,index是下标
-->
<div v-for="i in hobby">{{i}}</div>
<div v-for="i,index in hobby">{{i}}--{{index}}</div>
</div>
<script>
new Vue({
el:"#app",
data(){
return{
name:"<p>tony</p>",
age:10,
person:{
salary:10000
},
hobby:["吃","喝","王者","Anglelababa"]
}
}
})
</script>
</body>
</html>
4,v-on & v-bind
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>测 vue指令</title>
<script src="vue.js"></script>
</head>
<body>
<!-- 0.是HTML的元素 -->
<button onclick="alert(1)">按钮1</button>
<a href="https://www.baidu.com/">百度一下</a>
<div id="app">
<!-- 1.v-on指令:给元素绑定不同的事件,可以简写成@ -->
<button v-on:click="show()">按钮2</button>
<button v-on:dblclick="print(100)">按钮3</button>
<button @click="add(1,2,3)">按钮4</button>
<!-- 问题:跳转时404,没有把url当变量,而是直接把整体当做跳转路径 -->
<a href="{{url}}">百度一下1</a>
<!-- 2.v-bind指令:把url当变量,去获取了变量的值进行跳转
v-bind:href可以简写成:href,意思是后面出现的url是变量不是字符串
-->
<a v-bind:href="url">百度一下2</a>
<a :href="url">百度一下3</a>
</div>
<script>
new Vue({
el:"#app",
data:{
url:"http://www.baidu.com/"
},
methods:{
//函数名:函数声明(参数列表){函数体}
show:function(){
console.log(100)
} ,
print:function(a){
console.log(a);
},
//函数名(参数列表){函数体},是上面函数的简写方式
add(a,b,c){
console.log(a+b+c);
}
}
})
</script>
</body>
</html>
四,Vue组件Component
1,概述
好处:可以提高前端代码的复用性.
使用步骤:
1,定义组件: 全局组件 + 局部组件
2,使用组件: 就像使用HTML的标签一样
2,全局组件
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>测试 Component组件</title>
<!-- 1.组件是vue.js的核心功能,先导入vue.js -->
<script src="vue.js"></script>
</head>
<body>
<!-- 2.在数据渲染区 -->
<div id="app">
<!-- 3.2,使用组件,就像使用HTML的标签一样 -->
<Person></Person>
</div>
<div id="a">
<Person></Person>
</div>
<!-- 3.创建Vue对象 -->
<script>
//全局组件:作用范围是可多个Vue对象使用,可以在所有的渲染区使用
//3.1,创建全局组件--1是组件名2是组件内容
// Vue.component(1,2)
Vue.component('Person',{
// template:组件具体要啥内容
template:"<h1>姓名:jack,年龄:20</h1>"
})
new Vue({
el:"#app"
})
new Vue({
el:"#a"
})
</script>
</body>
</html>
3,局部组件
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>测试 局部组件</title>
<script src="vue.js"></script>
</head>
<body>
<div id="app">
<Car></Car><!-- 2.使用了局部组件 -->
<Student></Student><!--使用了全局组件-->
</div>
<div id="a">
<Student></Student><!--使用了全局组件-->
</div>
<script>
//全局组件
Vue.component('Student',{
template:'<h1>这是一个全局组件</h1>'
})
//局部组件:只能当前对象(在指定的数据渲染区)使用
new Vue({
el:"#a"
})
new Vue({
el:"#app",
//1.创建局部组件
components:{
//组件名:组件的内容
Car:{
template:"<p>这就是Car组件!</p>"
}
}
})
</script>
</body>
</html>