style和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;
}
.size {
font-size: 50px;
}
</style>
</head>
<body>
<div id="app">
<h1>class使用</h1>
<div :class="classStr">我是classStr的div</div>
<div :class="classList">我是classList的div</div>
<div :class="classObj">我是classObj的div</div>
<h1>style使用</h1>
<div :style="styleStr">我是styleStr的div</div>
<div :style="styleList">我是styleList的div</div>
<div :style="styleObj">我是styleObj的div</div>
</div>
</body>
<script>
var vm = new Vue({
el: '#app',
data: {
// class的字符串用法
classStr: 'red',
// class的数组用法,类本身可以放多个,用数组最合适
classList: ['red'],
// class的对象用法
classObj: {red: true, size: false},
// style的字符串用法,不方便进行修改
styleStr: 'background-color: blue;font-size: 50px;',
// style的数组用法,样式如果是多个单词用'-'连接的形式可以改为驼峰体
styleList: [{backgroundColor: 'blue'},{fontSize: '50px'}],
//style的对象用法,
styleObj: {backgroundColor: 'blue',fontSize: '50px'},
},
})
</script>
</html>
条件渲染
1.要写在标签上,控制标签的显示与不显示
v-if=
-布尔值/运算完是布尔值
v-else-if=
-布尔值/运算完是布尔值
v-else
'&&是and的意思'
- 条件渲染使用
<!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>
<div v-if="score>=80">优秀</div>
<div v-else-if="score>= 60 && score<80">合格</div>
<div v-else>不及格</div>
</div>
</body>
<script>
var vm = new Vue({
el: '#app',
data: {
score: 82
},
})
</script>
</html>
列表渲染
# v-for :放在标签上,可以循环显示多个此标签
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/3.4.1/css/bootstrap.min.css">
<script src="js/vue.js"></script>
<style>
.top {
margin-top: 50px;
}
</style>
</head>
<body>
<div id="app">
<div class="container-fluid">
<div class="row top">
<div class="col-md-6 col-md-offset-3">
<div class="text-center" style="margin-bottom: 30px">
<button @click="handleClick" class="btn btn-danger">加载购物车</button>
</div>
<div v-if="goodList.length>0">
<table class="table table-bordered">
<thead>
<tr>
<th>商品id</th>
<th>商品名</th>
<th>商品价格</th>
<th>商品数量</th>
</tr>
</thead>
<tbody>
<tr v-for="i in goodList">
<th>{{i.id}}</th>
<th>{{i.name}}</th>
<th>{{i.price}}</th>
<th>{{i.count}}</th>
</tr>
</tbody>
</table>
</div>
<div v-else>
!<---->
什么都没有哦
</div>
</div>
</div>
</div>
</div>
</body>
<script>
var vm = new Vue({
el: '#app',
data: {
goodList: []
},
methods: {
handleClick(){
this.goodList = [
{id: 1, name: '老魔杖', price: '2000', count: 1},
{id: 2, name: '魔法石', price: '1000', count: 3},
{id: 3, name: '光轮2000', price: '200', count: 7},
{id: 4, name: '隐形斗篷', price: '700', count: 2},
]
}
}
})
</script>
</html>
v-for循环数组,循环字符串、数字、对象
v-for="(value, key) in obj"
-循环数字,value是从1开始的数字,key是索引值
-循环字符串,value是一个个字符,key是索引值
-循环对象,value是value对象,key是key
循环数组,value是数组的元素,key是索引值
- v-for循环使用
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/3.4.1/css/bootstrap.min.css">
<script src="js/vue.js"></script>
</head>
<body>
<div id="app">
<h1>循环数字</h1>
<ul>
<li v-for="(value, key) in num">key值为:{{key}} value值为:{{value}}</li>
</ul>
<h1>循环字符串</h1>
<ul>
<li v-for="(value, key) in str">key值为:{{key}} value值为:{{value}}</li>
</ul>
<h1>循环对象</h1>
<ul>
<li v-for="(value, key) in obj">key值为:{{key}} value值为:{{value}}</li>
</ul>
<h1>循环数组</h1>
<ul>
<li v-for="(value, key) in girls">key值为:{{key}} value值为:{{value}}</li>
</ul>
</div>
</body>
<script>
var vm = new Vue({
el: '#app',
data: {
// 循环数字,value是从1开始的数字,key是索引值
num: 4,
// value是一个个字符,key是索引值
str: 'barry18',
// value是value对象,key是key
obj: {name: 'barry', age: 18},
// value是数组的元素,key是索引值
girls: ['a1', 'b1', 'c1', 'd1'],
},
})
</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>
<button @click="handleClick">点击加成员</button>
<button @click="handleClick1">点击加一批成员</button>
<button @click="handleClick2">点击修改数组页面变化</button>
<p v-for="i in girls">{{i}}</p>
<button @click="handleClick3">点击修改对象页面变化</button>
<p v-for="(value,key) in obj">{{value}}---{{key}}</p>
</div>
</body>
<script>
var vm = new Vue({
el: '#app',
data: {
obj: {name: 'barry', age: 18},
girls: ['a1', 'b1', 'c1', 'd1'],
},
methods: {
handleClick() {
this.girls.push('1号')
},
handleClick1() {
// 页面没有变化
var a = this.girls.concat(['a号', 'b号', 'c号'])
console.log(a)
},
handleClick2() {
// 监控到数组变化
Vue.set(this.girls, 0, '0号')
},
handleClick3() {
// 监控到对象变化
Vue.set(this.obj, 'height', 175)
}
}
})
</script>
</html>
双向数据绑定
1.input标签,v-model:数据双向绑定
-属性指令绑定: value='变量' # 数据是单向绑定的
-属性指令绑定: v-model="name" # 数据是双向绑定的
2.使用
<!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>用户名:<input type="text" v-model="name"></p>
<p>密码:<input type="password" v-model="password"></p>
<button @click="handleClick">提交</button>{{err}}
</div>
</body>
<script>
var vm = new Vue({
el: '#app',
data: {
name: '',
password: '',
err: '',
},
methods: {
handleClick() {
console.log(this.name, this.password)
this.err='用户名密码错误'
},
}
})
</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>input的事件处理</h1>
<h2>blur事件</h2>
<p>用户名:<input type="text" v-model="name" @blur="handleBlur">{{name}}</p>
<h2>change事件</h2>
<p>用户名:<input type="text" v-model="name1" @change="handleChange">{{name1}}</p>
<h2>input事件</h2>
<p>用户名:<input type="text" v-model="name2" @input="handleInput">{{name2}}</p>
</div>
</body>
<script>
var vm = new Vue({
el: '#app',
data: {
name: '',
name1: '',
name2: '',
},
methods: {
handleBlur(){
console.log('失去焦点就触发', this.name)
},
handleChange(){
console.log('失去焦点后发生变化就触发', this.name1)
},
handleInput(){
console.log('发生变化就触发', this.name2)
},
}
})
</script>
</html>
过滤案例
1.filter数组过滤
var l = ['a', 'b', 'c', 'd', 'e', 'f', 'g']
// 数组内置的filter需要使用匿名函数,接收一个参数是循环的从数组中取出传入匿名函数
l.filter(function (i) {
// 返回true或false,如果返回true则该值保留,如果返回false则该值舍弃
return false
})
2.indexOf判断字符串是否在字符串中
var s='jwaipfdw'
var a ='a'
// 获取字符串在字符串中的位置
console.log(s.indexOf(a)>=0)
3.es6箭头函数
3.1正常的函数
var f=function (){
console.log('打印了')
}
3.2不带参数的箭头函数
var f = () => {
console.log('打印了')
}
3.3带一个参数,没有返回值得箭头函数
var f = name=>{
console.log('打印了', name)
}
3.4多个参数,没有返回值
var f = (name,age) => {
console.log('打印了', name,age)
}
3.5带一个参数,有返回值
var f = function (name) {
return name+'nb'
}
-简写为一行
var f = name=> name+'nb'
'''
对象内部的this就是对象自己
箭头函数没有自己的this,会用上一层的this
'''
- 过滤案例
<!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><input type="text" v-model="search" placeholder="输入搜索内容" @input="handleSearch"></p>
<ul>
<li v-for="i in dataList">{{i}}</li>
</ul>
</div>
</body>
<script>
var vm = new Vue({
el: '#app',
data: {
search: '',
dataList: ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'ab', 'abc'],
},
methods: {
handleSearch() {
console.log('搜索内容是:', this.search)
// 复杂写法
// this.dataList=this.dataList.filter(i=>{
// // 判断this.search是否在i中,如果在则返回true,不在则返回false
// if (i.indexOf(this.search)>=0){
// return true
// }else {
// return false
// }
// })
// 简单写法
this.dataList = this.dataList.filter(i => i.indexOf(this.search) >= 0)
},
}
})
</script>
</html>
事件修饰符
.stop
-只处理自己的事件,不向父控件冒泡
.self
-只处理自己的事件,子控件冒泡的事件不处理
.prevent
-阻止a链接的跳转
.once
-事件只会触发一次
- 修饰符使用
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<!-- <script src="https://cdn.bootcdn.net/ajax/libs/jquery/3.6.0/jquery.js"></script>-->
<!-- <link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/3.4.1/css/bootstrap.min.css">-->
<!-- <script src="https://stackpath.bootstrapcdn.com/bootstrap/3.4.1/js/bootstrap.min.js"></script>-->
<script src="js/vue.js"></script>
</head>
<body>
<div id="app">
<h1>事件修饰符</h1>
<h2>事件冒泡--通过事件修饰符stop,加在子控件上,阻止事件冒泡</h2>
<ul @click="handleUl">
<li @click.stop="handleStop">点击stop</li>
<li @click="handleClick">点击click</li>
</ul>
<h2>事件冒泡--通过事件修饰符stop,self加在父控件上,只处理自己的事件</h2>
<ul @click.self="handleUl">
<li @click="handleClick">点击click</li>
</ul>
<h2>事件冒泡--通过事件修饰符prevent,阻止a标签跳转</h2>
<a href="http://www.baidu.com" @click.prevent="handleA">点我去百度</a>
<h2>事件冒泡--通过事件修饰符once,只能点一次</h2>
<hutton @click.once="handleOnce">只能点一次</hutton>
</div>
</body>
<script>
var vm = new Vue({
el: '#app',
data: {},
methods: {
handleUl() {
console.log('点击了ul')
},
handleStop(){
console.log('点击了stop')
},
handleClick(){
console.log('点击了click')
},
handleA(){
console.log('点击了a')
},
handleOnce(){
console.log('只能点一次')
},
}
})
</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>
<input type="text" v-model="search" placeholder="输入搜索内容" @keyup.enter="handleUp">
</div>
</body>
<script>
var vm = new Vue({
el: '#app',
data: {
search: '',
},
methods: {
handleUp(event) {
if (event.code == 'Enter'){
console.log('按了回车键')
}
},
}
})
</script>
</html>
标签:绑定,console,name,修饰符,value,事件,key,var,log
From: https://www.cnblogs.com/riuqi/p/16826615.html