一、vue原始代码
<!DOCTYPE html>
< html lang = " en" >
< head>
< meta charset = " UTF-8" >
< title> Title</ title>
</ head>
< body>
< div id = " app" >
< h1> {{ msg }}</ h1>
</ div>
< script src = " ../js/vue-development.js" > </ script>
< script>
let vm = new Vue ( {
el: "#app" ,
data ( ) {
return {
msg: "大家一起玩vue~"
}
}
} ) ;
</ script>
</ body>
</ html>
vue的双向数据绑定(v-model)
< body>
< div id = " app" >
< h2> {{ msg }}</ h2>
< input type = " text" v-model = " msg" >
</ div>
< script src = " ../js/vue-development.js" > </ script>
< script>
let vm = new Vue ( {
el: "#app" ,
data ( ) {
return {
msg: "hello vue"
}
}
} )
</ script>
</ body>
插值表达式(小胡子语法)
就叫它小胡子语法,说白了,就是 {{ }} 在{{ }}中可以放data中的数据
在{{ }}中可以对数据进行简单地运算,在小胡子,只能放表达式(任何有值的内容都是表达式)
小胡子中,只能放data中定义好的数据
小胡子中,可以放三元运算符
小胡子中,还可以去调用一个函数
小胡子中,不能放语句
数据单向绑定:
把数据作为文本结点:
方式一:通过小胡子就可以把M中的数据绑定到V上的。 小胡子就是v-text的语法糖
方式二:v-text也可以绑定数据到标签中,用的不多 v-text是一个指令 在vue中指令都是以v-打头
v-text指令绑定数据时,数据如果是一片html代码,v-text并不会解析
方式三:v-html 用的时候的要慎重 ??? 基本上也用不到
也可以把data中的数据绑定到模板上的,如果是数据是是一片html代码,v-html会解析
把数据作为属性结点:
v-bind: 可以把data中的数据,绑定到模板中的属性上,作为属性节点
作用:v-bind:id="item"
v-bind可以简写: :id="item"
style绑定:
只需要记住
1):style后面绑定一个对象
2)css属性如果是中划线,需要变成小驼峰
< body>
< div id = " app" >
< div style =" width : 100px; height : 100px; background : red; " > </ div>
< div v-bind: style =" { width : w, height : h, background : c} " > </ div>
< h1 v-bind: style =" { fontSize : fs} " > {{ msg }}</ h1>
</ div>
< script src = " ../../js/vue-development.js" > </ script>
< script>
let vm = new Vue ( {
el: "#app" ,
data ( ) {
return {
msg: "大家一起玩转vue~" ,
w: "110px" ,
h: "110px" ,
c: "yellow" ,
fs: "50px"
}
}
} ) ;
</ script>
</ body>
class绑定:
写法1::class="o" o是data中的数据(状态) 目的:状态在后面可以动态发生改变
写法2:控制一个类没或者没有 class后面绑定一个三元运算符,控制此标签有没有这个类
写法3:一个标签可以绑定多个类 :class后面跟上一个对象 :class="{box:flag,box3:flag2}"
写法4:在:class后面跟一个数组 <p :class="['box','box3']">vue</p>
总结:
1):class 后面跟一个data中的状态 <div :class="o"></div>
2):class 后面可以跟一个三目运算符 <p :class="flag ? 'box3': ''">{{ msg }}</p>
3):class 后面可以跟一个对象 是对象,意味着,我要绑定多个css类
4):class 后面可以跟一个数组 是数组,意味着,我要绑定多个css类, 数组中也可以状态
< head>
< meta charset = " UTF-8" >
< title> Title</ title>
< style>
.box {
width : 100px;
height : 100px;
background-color : skyblue;
}
.box2 {
width : 200px;
height : 200px;
background-color : gold;
}
.box3 {
font-size : 40px;
color : red;
}
</ style>
</ head>
< body>
< div id = " app" >
< div class = " box" > </ div>
< div v-bind: class= " o" > </ div>
< p :class = " flag ? ' box3' : ' ' " > {{ msg }}</ p>
< p class = " box box3" > hello</ p>
< p :class = " {box:flag,box3:flag2}" > hello</ p>
< p :class = " [' box' ,' box3' ]" > vue</ p>
</ div>
< script src = " ../../js/vue-development.js" > </ script>
< script>
let vm = new Vue ( {
el: "#app" ,
data ( ) {
return {
msg: "大家一起玩转vue~" ,
o: "box" ,
flag: true ,
flag2: true
}
}
} ) ;
</ script>
</ body>
条件相关的指令:
v-if 控制是否创建和销毁
v-if后面普通也是跟状态 控制一个元素是否渲染出来,是否销毁掉
v-if可以控制一个盒子创建和销毁
和v-if配对的,还有v-else 和 v-else-if
v-show 控制样式实现显示和隐藏
它是控制盒子的样式,来实现盒子的隐藏和显示
< head>
< meta charset = " UTF-8" >
< title> Title</ title>
< style>
.box {
width : 200px;
height : 200px;
background-color : purple;
}
</ style>
</ head>
< body>
< div id = " app" >
< h1> {{ msg }}</ h1>
< div v-show = " flag" > 今天休息</ div>
< div v-show = " !flag" > 明天休息</ div>
</ div>
< script src = " ../../js/vue-development.js" > </ script>
< script>
let vm = new Vue ( {
el: "#app" ,
data ( ) {
return {
msg: "大家一起玩转vue~" ,
flag: true
}
}
} ) ;
</ script>
</ body>
v-for指令:
v-for循环数组:<li v-for="(item,index) in news"> item是数组中每一项数据 index是索引
v-for循环对象:<td v-for="(value,key) in wangcai">{{ value }}</td>
v-for循环整数:
<!DOCTYPE html>
< html lang = " en" >
< head>
< meta charset = " UTF-8" >
< title> Title</ title>
</ head>
< body>
< div id = " app" >
< ul>
< li v-for = " (item,index) in news" >
{{ item }} 索引:{{ index }}
</ li>
</ ul>
< hr>
< ul>
< li v-for = " (item,index) in movies" >
电影名字:< strong> {{ item.name }}</ strong> ----> 电影的链接: < a :href = " item.link" > {{item.name}}</ a>
</ li>
</ ul>
< hr>
< table border = " 1" >
< tr>
< th> 姓名</ th>
< th> 年龄</ th>
< th> 地址</ th>
< th> 成绩</ th>
</ tr>
< tr>
< td v-for = " (value,key) in wangcai" > {{ value }}</ td>
</ tr>
< tr>
< td v-for = " (value,key) in wangcai" > {{ key }}</ td>
</ tr>
</ table>
< hr>
< p v-for = " (item,index) in 10" >
item:{{ item }} --------> index:{{ index }}
</ p>
</ div>
< script src = " ../../js/vue-development.js" > </ script>
< script>
let vm = new Vue ( {
el: "#app" ,
data ( ) {
return {
news: [ "新闻1" , "新闻2" , "新闻3" , "新闻4" , "新闻5" , "新闻6" , "新闻7" ] ,
movies: [
{ name: "a" , link: "www.baidu.com" } ,
{ name: "b" , link: "www.baidu.com" } ,
{ name: "c" , link: "www.baidu.com" } ,
{ name: "d" , link: "www.baidu.com" } ,
{ name: "e" , link: "www.baidu.com" } ,
] ,
wangcai: { name: "wc" , age: 100 , address: "bj" , score: 10 }
}
}
} ) ;
</ script>
</ body>
</ html>
v-for嵌套:
<!DOCTYPE html>
< html lang = " en" >
< head>
< meta charset = " UTF-8" >
< title> Title</ title>
</ head>
< body>
< div id = " app" >
< table border = " 1" >
< tr>
< th> 姓名</ th>
< th v-for = " (item,index) in subjects" > {{ item }}</ th>
</ tr>
< tr v-for = " (item,index) in scores" >
< td> {{item.name}}</ td>
< td v-for = " (score,idx) in item.score" > {{score}}</ td>
</ tr>
</ table>
</ div>
< script src = " ../../js/vue-development.js" > </ script>
< script>
let vm = new Vue ( {
el: "#app" ,
data ( ) {
return {
subjects: [ "语文" , "数学" , "英语" ] ,
scores: [
{ name: "wangcai" , score: [ 80 , 90 , 50 ] } ,
{ name: "xiaoqiang" , score: [ 20 , 70 , 50 ] } ,
{ name: "lihua" , score: [ 50 , 80 , 20 ] } ,
{ name: "limei" , score: [ 70 , 40 , 80 ] } ,
{ name: "qiqi" , score: [ 80 , 60 , 70 ] } ,
]
}
}
} ) ;
</ script>
</ body>
</ html>
事件绑定:
在vue中给标签绑定事件,使用v-on指令。<button v-on:click="f1">点我</button>
v-on可以简写,简写成@,<button @click="f1">点我</button>
事件绑定传参:<button @click="f2(1,2)">点我3</button>
如果不传参:
<button @click="f1">点我2</button>
<button @click="f1()">f1()</button>
在vue中绑定事件,如果不传参数,()可以写,可以不写。
要获取数据事件:
1) 如果在事件绑定时,不写(),那么监听器的第1个参数就是事件对象 <button @click="f3">f3</button>
f3(e){
console.log(e)
}
2) 如果在事件绑定时,写了(),那么监听器的第1个参数就不是事件对象,第1个参数就变成普通的形参
如果想传参,又想获取事件对象: 需要手动地写$event,$event就代表事件对象
<button @click="f3(1,$event)">f3(1,$event)</button>
<!DOCTYPE html>
< html lang = " en" >
< head>
< meta charset = " UTF-8" >
< title> Title</ title>
</ head>
< body>
< div id = " app" >
< button v-on: click= " f1" > v-on:click=f1</ button>
< button @click = " f1" > f1</ button>
< button @click = " f1()" > f1()</ button>
< button @click = " f2(1,2)" > f2(1,2)</ button>
< hr>
< h2> 事件对象</ h2>
< button @click = " f3" > f3</ button>
< button @click = " f3()" > f3()</ button>
< button @click = " f3(1)" > f3(1)</ button>
< button @click = " f3(1,$event)" > f3(1,$event)</ button>
</ div>
< script src = " ../js/vue-development.js" > </ script>
< script>
let vm = new Vue ( {
el: "#app" ,
data ( ) {
return {
}
} ,
methods: {
f1 ( ) {
alert ( "f1" )
} ,
f2 ( a, b) {
alert ( a+ b)
} ,
f3 ( a, e) {
console. log ( a)
console. log ( e)
}
}
} ) ;
</ script>
</ body>
</ html>
事件修饰符:
.prevent 阻止默认事件
.stop 阻止事件冒泡
....
按键修饰符:
每一个按键都有特殊的符号。
<!DOCTYPE html>
< html lang = " en" >
< head>
< meta charset = " UTF-8" >
< title> Title</ title>
</ head>
< body>
< div id = " app" >
< button @click = " one" > one</ button>
< button @click = " two(' wangcai' )" > two("wangcai")</ button>
< button @click = " three(18,$event)" > three(18,$event)</ button>
< hr>
< div style =" width : 200px; height : 200px; background-color : red; " @click = " five" >
< button @click.stop = " four" > son</ button>
</ div>
< hr>
< a href = " http://wwww.xxx.com" @click.prevent = " six" > xxx</ a>
< hr>
< input type = " text" @keyup.enter = " seven" >
</ div>
< script src = " ../js/vue-development.js" > </ script>
< script>
let vm = new Vue ( {
el: "#app" ,
data ( ) {
return {
}
} ,
methods: {
one ( e) {
console. log ( e)
console. log ( e. target. innerHTML)
} ,
two ( name) {
console. log ( name)
} ,
three ( age, e) {
console. log ( age)
console. log ( e)
} ,
four ( e) {
console. log ( "button four" )
} ,
five ( ) {
console. log ( "div five" )
} ,
six ( e) {
console. log ( "a标签的点击事件" )
} ,
seven ( ) {
console. log ( "按键抬起来" )
}
}
} ) ;
</ script>
</ body>
</ html>