4-2key设置-性能的保障
不能修改原数组的方法,如果想要修改原数组,就进行重新赋值
this.items = this.items.filter((item) => item.message.match(/Foo/))
keyCode键的值
**key设置-性能的保障**
提高性能,可以对比老的虚拟dom,一样的就留着,不一样就补上
Vue默认按照"就地更新"策略来更新通过v-for渲染的元素列表.当数据项的顺序发生改变时候,vue不会随着移动Dom元素的顺序,而是就地更新每个元素,确保他们在原本指定的索引位置上渲染
为了给vue一个提示,通常给他一个key值,作为唯一的key标识符(通常给的是id作为唯一的标识符),从而重用和重新排序现有的元素.
:key="item.id"唯一标识符
<div v-for="item in data" :key="item.id">
</div>
虚拟Dom
{
type: 'div',
props: {
id: 'container'
},
children: [
{
type: 'span',
props: {
class: 'text1'
},
children: 'hello '
},
{
type: 'span',
props: {
class: 'text2'
},
children: 'kerwin'
},
]
}
真实dom
<div id="container">
<span class="text1">hello </span>
<span class="text2">kerwin</span>
</div>
4-3数组的监听
vue能够侦听响应式的数组的变更方法,并且在他们被调用时触发相关的更新.这些变更的方法包括:
- pop()
- push()
- unshift()
- shift()
- splice()
- sort()
- reverse()
对于一些不可变的数组,比如filter,concat,slice,map,这些都不会改变原数组,但是会返回一个新数组
当遇到的是非变更方法时,我们需要将旧的数组替换为新的:
this.items = this.items.filter((item) => item.message.match(/Foo/))
4-4模糊搜索
方法一
<!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="../vue.js"></script>
</head>
<body>
<div id="box">
<input type="text" v-model="search">
<ul>
<template v-for="data in list">
<li v-if="data.includes(search)">
{{data}}
</li>
</template>
</ul>
</div>
<script>
var obj={
data() {
return {
search:'',
list:["a","b","c","d","ad","ac","dd","fds","cf","da","vv","bb","vc","cv"]
}
},
}
var app=Vue.createApp(obj).mount('#box')
</script>
</body>
</html>
方法二
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>模糊搜索</title>
<script src="../vue.js"></script>
</head>
<body>
<div id="box">
<input type="text" v-model="val" >
<ul>
<li v-for="data in test()">
{{data}}
</li>
</ul>
{{test()}}
</div>
<script>
var obj={
data() {
return {
val:"",
list:["a","b","c","d","ad","ac","dd","fds","cf","da","vv","bb","vc","cv"]
}
},
methods: {
test(){
return this.list.filter(item=>{
return item.includes(this.val)
})
}
},
}
var app=Vue.createApp(obj).mount("#box")
</script>
</body>
</html>
5.事件处理器
5-1事件处理器
内联事件处理器
<!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="./vue.js"></script>
</head>
<body>
<div id="box">
{{count}}
<button @click="Add(1,2,$event)">add1</button>
<button @click="add2">add2</button>
<button @click="count++">add3</button>
<!-- 改变状态 -->
<div v-if="isShow">111111</div>
<button @click="isShow=!isShow">show/hidden</button>
</div>
<script>
var obj={
data() {
return {
count:1 ,
isShow:true
}
},
methods: {
Add(a,b,event){
console.log(a,b,event.target);
},
add2(event){
console.log(event);
}
},
}
var app=Vue.createApp(obj).mount('#box')
</script>
</body>
方法事件处理器
<button @click="test">test</button>
5-2事件修饰符-事件偷懒符
- .stop(阻止冒泡)
- .self(只有事件源是自己的时候,才会触发)
- .prevent(阻止默认行为)
- .once(就执行一次,就不执行了)
- .capture
- .passive
按键修饰符
- .enter
- .tab
- .delete
- .esc
- .space
- .up
- .down
- .left
- .right
6.表单控件
6-1表单输入绑定
普通文本与多行文本
{{myText}}
<input type="text" v-model="myText">
<textarea v-model="myText"></textarea>
记住用户名:使用布尔值
<h1>checkbox演示---记住用户名</h1>
<div>
用户名:<input type="text" v-model="username">
<div>记住用户名:<input type="checkbox" v-model="isRem"></div>
<button @click="login()">登录</button>
</div>
复选框:使用数组存储
<h1>checkbox-----多选框</h1>
<div>
vue<input type="checkbox" value="vue" v-model="selectList">
react<input type="checkbox" value="react" v-model="selectList">
小程序<input type="checkbox" value="app" v-model="selectList">
Java<input type="checkbox" value="java" v-model="selectList">
<button>注册</button>
</div>
单选框:使用字符串
<h1>radio-----最喜欢</h1>
<div>
vue<input type="radio" value="vue" v-model="fav">
react<input type="radio" value="react" v-model="fav">
小程序<input type="radio" value="app" v-model="fav">
<div>
<button>注册</button>
</div>
下拉列表:使用value值
<h1>select -----下拉列表</h1>
<select v-model="select">
<option :value="1">已完成</option>
<option :value="2">已取消</option>
<option :value="3">已付款</option>
</select>
6-2表单修饰符
input事件,每次value改变,都会触发
change事件,失去焦点,并且内容发生改变
- lazy:相当于变成了change事件
<input type="text" v-model.lazy="myText">
2…number用户输入自动转换为数字,你可以在 v-model
后添加 .number
修饰符来管理输入:
<input v-model.number="age" />
number
修饰符会在输入框有 type="number"
时自动启用。
3.trim默认自动去除用户输入内容中两端的空格,你可以在 v-model
后添加 .trim
修饰符:
<input v-model.trim="msg" />