1 vue介绍
1.1 前端发展历史
1.2 vue介绍
Vue ( 读音 / vjuː/ ,类似于 view) 是一套用于构建用户界面的渐进式框架
与其它大型框架不同的是,Vue 被设计为可以自底向上逐层应用
Vue 的核心库只关注视图层,不仅易于上手,还便于与第三方库或既有项目整合
可以一点一点地使用它,只用一部分,也可以整个工程都使用它
版本:vue2 vue3
官网:https: // cn. vuejs. org/
文档3 :https: // cn. vuejs. org/
文档2 :https: // v2. cn. vuejs. org/
易用
通过 HTML、CSS、JavaScript构建应用
灵活
不断繁荣的生态系统,可以在一个库和一套完整框架之间自如伸缩。
高效
20kB min + gzip 运行大小
超快虚拟 DOM
最省心的优化
1.3 M-V-VM架构
M:model 数据层
V:view 用户视图层
VM:viewmodel 连接数据和视图的中间层
1.4 单页面应用-组件化开发
可以把公用的 样式html,写成组件
后期可以共用
- vue项目- - - 》整个vue项目只有一个 页面 index. html
1.5 开发前端-编辑器选择
webstorm :跟pycharm是一家 jetbrains公司的
vscode: 免费,微软
sublimetext:收费
pycharm :跟webstorm是一个东西
可以直接在pycharm上装个插件,可以开发vue
- 装完后要重启
1.5 vue快速使用
DOCTYPE html >
< html lang = " en" >
< head>
< meta charset = " UTF-8" >
< title> Title title>
< script src = " ./js/vue.js" > script>
head>
< body>
< div id = " app" >
{{name}}
div>
body>
< script>
var vm= new Vue ( {
el : '#app' ,
data : {
name : '彭于晏'
}
} )
script>
html>
2 插值语法
{ { } } - - - { { 变量、js语法、三目表达式,函数加括号 } }
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> 姓名:{{name}} p>
< p> 年龄:{{age}} p>
< p> 数组显示:{{list1}} p>
< p> 数组取值:{{list1[1]}} p>
< p> 对象显示:{{obj1}} p>
< p> 对象取值:{{obj1.name}} p>
< p> 对象取值:{{obj1['age']}} p>
< p> 显示标签:{{link1}} p>
< p> 简单js:{{4 + 5 + age}} p>
< p> 三目运算符:{{score > 90 ? '优秀' : '不优秀'}} p>
div>
body>
< script>
var vm = new Vue ( {
el : '#app' ,
data : {
name : 'lqz' ,
age : 18 ,
list1 : [ 1 , 2 , 3 , 4 ] ,
obj1 : { name : '彭于晏' , age : 19 } ,
link1 : '百度一下 你就知道 ' ,
score : 99
}
} )
script>
html>
3 文本指令
- 1 写在标签上
- 2 以 v- 开头 都称之为vue的指令,有特殊含义
v- text: 把文字渲染到标签内
v- html: 把文字渲染到标签内,如果是标签会渲染标签
v- show:控制标签显示与否,隐藏
v- if :控制标签显示与否,真的删除
DOCTYPE html >
< html lang = " en" >
< head>
< meta charset = " UTF-8" >
< title> Title title>
< script src = " ./js/vue.js" > script>
head>
< body>
< div id = " app" >
< h3> v-text:引号中放的跟之前插值放的一样 h3>
< p v-text = " name" > p>
< div v-text = " name" > div>
< h3> v-html:引号中放的跟之前插值放的一样,能把标签渲染 h3>
< div v-html = " s" > div>
< h3> v-show :控制标签显示与否 没有删除标签,只是隐藏 display: none; h3>
< img src = " ./img/1.jpg" v-show = " show" height = " 300px" width = " 200px" >
< h3> v-if :控制标签显示与否 直接把标签删除 h3>
< img src = " ./img/2.png" v-if = " if_show" height = " 300px" width = " 200px" >
div>
body>
< script>
var vm = new Vue ( {
el : '#app' ,
data : {
name : '彭于晏' ,
s : '点我看美女 ' ,
show : true ,
if_show : true
}
} )
script>
html>
4 事件指令
v- on: 事件名= 'handleChange'
v- on: click = 'handleChange'
简写成(用的多)
@click = 'handleChange'
方法必须放在methods中
methods: {
handleChange: function ( ) {
this. show = !this. show // ! 取反
}
}
DOCTYPE html >
< html lang = " en" >
< head>
< meta charset = " UTF-8" >
< title> Title title>
< script src = " ./js/vue.js" > script>
head>
< body>
< div id = " app" >
< button @click = " handleChange" > 点我显示隐藏美女 button>
< hr>
< img src = " ./img/1.jpg" alt = " " v-show = " show" width = " 200px" height = " 300px" >
< hr>
< h2> 事件指令之参数问题:正常有几个参数就传几个参数即可 h2>
< p @click = " handleP(name)" > 点我带参数 p>
< hr>
< p @click = " handleP" > 点我(如果方法要参数但没传,会自动把当前事件对象传入) p>
< hr>
< p @click = " handleP('lqz',19)" > 点我(有几个参数传几个参数) p>
< hr>
< p @click = " handleP('lqz')" > 点我(少传参数) p>
< hr>
< p @click = " handleP('lqz',19,'asdfa','asdfa')" > 点我(多传参数) p>
div>
body>
< script>
var vm = new Vue ( {
el : '#app' ,
data : {
show : true ,
name : 'lqz'
} ,
methods : {
handleChange : function ( ) {
this . show = ! this . show
} ,
handleP : function ( name, age ) {
console. log ( name)
alert ( '你的名字是:' + name + "你的年龄是:" + age)
}
}
} )
script>
html>
5 属性指令
v- bind: 属性名= '值'
: 属性= '值'
DOCTYPE html >
< html lang = " en" >
< head>
< meta charset = " UTF-8" >
< title> Title title>
< script src = " ./js/vue.js" > script>
head>
< body>
< div id = " app" >
< img :src = " img" alt = " " height = " 300px" width = " 200px" >
< p :id = " p_id" > 我是p p>
< hr>
< h1> 换美女案例 h1>
< button @click = " handleChange" > 换一张 button>
< br>
< img :src = " img_change" alt = " " height = " 300px" width = " 200px" >
div>
body>
< script>
var vm = new Vue ( {
el : '#app' ,
data : {
img : './img/1.jpg' ,
p_id : 'xx' ,
img_change : './img/1.png' ,
} ,
methods : {
handleChange : function ( ) {
var c = Math. ceil ( Math. random ( ) * 6 )
this . img_change = ` ./img/ ${ c} .png `
}
}
} )
script>
html>
6 style和class
6.1 属性指令控制class
DOCTYPE html >
< html lang = " en" >
< head>
< meta charset = " UTF-8" >
< title> Title title>
< script src = " ./js/vue.js" > script>
< style>
.red {
background-color : red;
}
.green {
background-color : green;
}
style>
head>
< body>
< div id = " app" >
< button @click = " handleChangeBack" > 点我切换背景色 button>
< div :class = " back" >
我是div
div>
div>
body>
< script>
var vm = new Vue ( {
el : '#app' ,
data : {
back : 'green' ,
} ,
methods : {
handleChangeBack : function ( ) {
this . back = this . back == 'red' ? 'green' : 'red'
}
}
} )
script>
html>
6.2 style和class可以绑定的数据类型
DOCTYPE html >
< html lang = " en" >
< head>
< meta charset = " UTF-8" >
< title> Title title>
< script src = " ./js/vue.js" > script>
< style>
.background {
background-color : pink;
}
.fontsize {
font-size : 60px;
}
.back {
color : green;
}
style>
head>
< body>
< div id = " app" >
< h1> class可以绑定的类型 h1>
< button @click = " hancleCilck1" > 点我字符串形式 button>
< div :class = " str_class" >
我是div
div>
< hr>
< button @click = " hancleCilck2" > 点我数组形式 button>
< div :class = " list_class" >
我是div
div>
< button @click = " hancleCilck3" > 点我对象形式 button>
< div :class = " obj_class" >
我是div
div>
< hr>
< h1> style可以绑定的类型 h1>
< button @click = " hancleCilck4" > 字符串形式 button>
< div :style = " str_style" >
我是div
div>
< button @click = " hancleCilck5" > 数组形式 button>
< div :style = " list_style" >
我是div
div>
< button @click = " hancleCilck6" > 对象形式 button>
< div :style = " obj_style" >
我是div
div>
div>
body>
< script>
var vm = new Vue ( {
el : '#app' ,
data : {
str_class : 'background' ,
list_class : [ 'background' ] ,
obj_class : { 'background' : true , 'fontsize' : false } ,
str_style : 'background-color: yellow' ,
list_style : [ { 'background-color' : 'yellow' } ] ,
obj_style : { backgroundColor : 'pink' , color : 'red' }
} ,
methods : {
hancleCilck1 : function ( ) {
this . str_class = this . str_class + ' fontsize'
} ,
hancleCilck2 : function ( ) {
this . list_class. push ( 'fontsize' )
} ,
hancleCilck3 : function ( ) {
this . obj_class. fontsize = true
} ,
hancleCilck4 : function ( ) {
this . str_style = this . str_style + ';font-size: 60px'
} ,
hancleCilck5 : function ( ) {
this . list_style. push ( { 'font-size' : '40px' } )
} ,
hancleCilck6 : function ( ) {
this . obj_style[ 'color' ] = 'green'
}
}
} )
script>
html>
7 条件渲染
就是判断,符合哪个条件,就显示哪个标签
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 v-if = " score>=90&&score<=100" > 优秀 p>
< p v-else-if = " score>=70&&score<90" > 良好 p>
< p v-else-if = " score>=60&&score<70" > 及格 p>
< p v-else > 不及格 p>
div>
body>
< script>
var vm = new Vue ( {
el : '#app' ,
data : {
score : 91
} ,
} )
script>
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" >
< h1> 用户信息 h1>
< p> 用户名:{{userinfo.username}} p>
< p> 年龄:{{userinfo.age}} p>
< p> 用户类型:
< span v-if = " userinfo.userType==1" > 超级管理员 span>
< span v-else-if = " userinfo.userType==2" > 普通管理员 span>
< span v-else > 普通用户 span>
p>
div>
body>
< script>
var vm = new Vue ( {
el : '#app' ,
data : {
userinfo : { username : 'lqz' , age : 19 , userType : 1 }
} ,
} )
script>
html>