前言
vue基础知识整理
- 内容渲染指令
-
v-text—— 缺点:覆盖元素中默认的内容
-
{{ }}——插值只能用在元素的内容节点,无法用在属性节点
-
v-html ——用处:把带有HTML标签的字符串,渲染为真正的DOM元素
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
<script src="./lib/vue-2.6.12.js"></script>
</head>
<body>
<div id="app">
<p v-text = 'username'>名字:</p>
<p v-text = "sex">性别:</p>
<hr>
<p>名字:{{username}}</p>
<p>性别:{{sex}}</p>
<div v-text = 'info'></div>
<div>{{info}}</div>
<div v-html = 'info'></div>
</div>
<script>
const vm = new Vue({
el:'#app',
data:{
username:'张三',
sex:'boy',
info:'<h4 style = "color : red ;font-weight :bold "> 欢迎大家</h4>'
}
})
</script>
</body>
</html>
- 属性绑定指令
- v-bind 简写为
:
- 为元素的属性动态绑定值
- 在使用时,如果绑定内容需要进行动态拼接,则字符串外面应该包裹单引号
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
<script src="./lib/vue-2.6.12.js"></script>
</head>
<body>
<div id="app">
<input type="text" v-bind:placeholder="tips">
</div>
<script>
const vm = new Vue({
el:'#app',
data:{
tips:'张三',
}
})
</script>
</body>
</html>
- 事件绑定指令
- v-on
- 简写为
@
- @click="show"和@click=“show(传参)”
- 简写为
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
<script src="./lib/vue-2.6.12.js"></script>
</head>
<body>
<div id="app">
<p>count的值是:{{count}}</p>
<!-- <button v-on:click= 'add(2)'>+</button>
<button v-on:click= 'sub'>-</button> -->
<button @click= 'add(2)'>+</button>
<button @click= 'sub'>-</button>
</div>
<script>
const vm = new Vue({
el:'#app',
data:{
count : 0,
},
methods:{
add(n){
this.count +=n
},
sub(){
this.count--
}
}
})
</script>
</body>
</html>
- 内置的变量 $event——@click=“show(3 , $event)”
- 应用场景:如果默认的事件对象e被覆盖了,则可以手动传递一个 $event。
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
<script src="./lib/vue-2.6.12.js"></script>
</head>
<body>
<div id="app">
<p>count的值是:{{count}}</p>
<button @click= 'add(2,$event)'>+n </button>
<button @click= 'sub'>-</button>
</div>
<script>
const vm = new Vue({
el:'#app',
data:{
count : 0,
},
methods:{
add(n,e){
this.count +=n
console.log(e)
if(this.count %2 === 0){
e.target.style.backgroundColor ='red'
}else{
e.target.style.backgroundColor =''
}
},
sub(){
this.count--
}
}
})
</script>
</body>
</html>
- 事件修饰符
- .prevent——阻止a链接跳转
- .stop——阻止绑定的事件
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
<script src="./lib/vue-2.6.12.js"></script>
</head>
<body>
<div id="app">
<a href="http://www.baidu.com" @click.prevent="show">这是a链接</a>
<hr>
<div style="width: 200px; height: 200px; background-color: red; text-align: center; line-height: 150px;" @click="divHandle">
<button @click.stop = "bntHandle">按钮</button>
</div>
</div>
<script>
const vm = new Vue({
el:'#app',
data:{
},
methods:{
show(){
console.log('a被点击了')
},
divHandle(){
console.log('div被点击了')
},
bntHandle(){
console.log('btn被点击了')
}
}
})
</script>
</body>
</html>
- 按键修饰符
- .esc
- .enter
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
<script src="./lib/vue-2.6.12.js"></script>
</head>
<body>
<div id="app">
<input type="text" @keyup.esc = "clearInput" @keyup.enter = "commitAjax">
</div>
<script>
const vm = new Vue({
el:'#app',
data:{
},
methods:{
clearInput(e){
console.log('按下了esc键')
e.target.value = ''
},
commitAjax(){
console.log('出发了enter')
}
}
})
</script>
</body>
</html>
- 双向数据绑定指令
- v-model ——只能用在表单元素上
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
<script src = "./lib/vue-2.6.12.js"></script>
</head>
<body>
<div id="app">
<p>双向绑定的</p>
<p>用户输入的名是{{username}}</p>
<input type="text" v-model = "username">
<p>动态绑定的</p>
<input type="text" :value="username">
<hr>
<select v-model="city">
<option >请选择城市</option>
<option value="0">北京</option>
<option value="1">上海</option>
<option value="2">天津</option>
<option value="3">深圳</option>
<option value="4">南京</option>
</select>
</div>
<script>
const vm =new Vue({
el:"#app",
data:{
username:'张三',
city:'3'
}
})
</script>
</body>
</html>
- 修饰符
- .number 自动将用户的输入值转换为数值类型
- .trim 自动过滤用户输入的首位空白字符
- .lazy 在"change"而非"input"时更新
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
<script src="lib/vue-2.6.12.js"></script>
</head>
<body>
<div id="app">
<form>
<input type="text" v-model.number= "num1"> +
<input type="text" v-model.number= "num2"> =
<span>{{num1 + num2}}</span>
<hr>
<input type="text" v-model.trim = "username">
<input type="text" :value=" username">
<input type="button" @click = "show" value="提交信息">
<hr>
<input type="text" v-model.lazy = 'username'>
</form>
</div>
<script>
const vm = new Vue({
el:'#app',
data:{
username:'aa',
num1:1,
num2:2,
},
methods:{
show(){
console.log(this.username)
}
}
})
</script>
</body>
</html>
- 循环渲染指令
- v-for="(item,index) in 数组 "
- :key=“item.id”
- 拿索引当key没有意义(index的值不具有唯一性)
- 条件渲染指令
- v-if
- 动态创建和移除元素,实现元素的实现和隐藏
- v-else-if
- v-else
- v-show
* 动态添加和移除 display:none样式,来实现元素的实现和隐藏
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
<script src="lib/vue-2.6.12.js"></script>
</head>
<body>
<div id="app">
<div v-if = 'flag'>这是被v-if控制的</div>
<div v-show= 'flag'>这是被v-show控制的</div>
<hr>
<div v-if ="type === 'A'">优秀</div>
<div v-else-if ="type === 'B'">良好</div>
<div v-else-if ="type === 'C'">及格</div>
<div v-else>差</div>
</div>
<script>
const vm = new Vue({
el:'#app',
data:{
flag:true,
type:'A'
}
})
</script>
</body>
</html>
- 过滤器
- 全局过滤器
Vue.filter(‘名字’,function(过滤器前面的值){return结果}) - 私有过滤器
定义到组件的filters节点之下 - 调用——{{ message | deteFoemat }}
- 如果全局过滤器和私有过滤器名字一致,此时按照“就近原则”,调用的是”私有过滤器“