v-xxx 表示有特定功能,用来操作 dom 元素
**
- v-text 默认渲染成文本
- v-html 渲染成html
- v-once 只渲染一次,再更改时直接从缓存中获取
- v-for 遍历 数组、字符串、对象 key : 唯一的值,增加唯一性,避免同一父元素下相同元素复用
- v-if / v-else / v-else-if 操作 dom 元素 显示/隐藏(一旦条件不成立 dom 元素是不存在的)
- v-show 更改样式 显示/隐藏
- v-on 绑定事件 简写 @xxx
- .stop - 调用 event.stopPropagation()。 阻止冒泡
- .prevent - 调用 event.preventDefault()。阻止默认行为
- .capture - 添加事件侦听器时使用 capture 模式。采取捕获方式
- .self - 只当事件是从侦听器绑定的元素本身触发时才触发回调。 操作是自己才会触发
- .once - 只触发一次回调。
- .passive - 模式添加侦听器 处理事件函数中不会调用 preventDefault 函数 ,减少额外的监听,不能与 prevent 同时使用
- v-bind 绑定动态属性 简写 :
- v-model 双向绑定
- .lazy - 取代 input 监听 change 事件,失去焦点 数据更新
- .number - 输入字符串转为有效的数字
- .trim - 输入首尾空格过滤
- 自定义指令
不要把 v-if 和 v-for 同时用在一个元素上,v-for 的优先级比 v-if 更高
[ 指令 ]
<div id="app" v-show="isShow">
<!-- <span v-text></span> 等同于 {{ msg }} -->
<span v-text="msg"></span>
{{ msg }}
<div v-html="h"></div>
{{ h }}
<p v-once>{{ str }}</p>
<ul v-if="isShow">
<li v-for="(item,index) in arr" key=`${index}_a`>{{ item }}</li>
</ul>
<div v-else> 2333333</div>
<div v-show="isShow">3333333</div>
</div>
<script>
let vm = new Vue({
el: '#app',
data: {
arr: [1, 2, 3, 4, 5],
msg: '我不喜欢这个世界,我只喜欢你!',
h: '<h1>Serendipity</h1>',
str: '时光静好 岁月安然',
isShow: false,
age: 10,
radioVal: "0",
checkVal: false,
},
})
</script>
[ 表单双向绑定 ]
<div class="Ipt" id="app">
<p>
<!-- <input type="text" :value="age" @input="fn"> -->
<!-- 下面这种是上面这种写法的语法糖 -->
<input type="text" v-model.lazy="age">
{{ age }}
</p>
<p>
<!-- 单选按钮 切换按钮时 radioVal 会切换为对应 value 的值 -->
<input type="radio" name="" id="" v-model="radioVal" value="0">男
<input type="radio" name="" id="" v-model="radioVal" value="1">女
{{ radioVal }}
</p>
<p>
<!-- 单选框 checkVal 根据 true 和 false 判断是否选中 -->
<input type="checkbox" name="" id="" v-model="checkVal">
{{ checkVal }}
</p>
<p>
<!-- 复选框 会把 选中的 value 值 放入到 v-model 绑定的数据中 -->
<input type="checkbox" name="" id="" v-model="checkArr" value="吃饭">吃饭
<input type="checkbox" name="" id="" v-model="checkArr" value="睡觉">睡觉
<input type="checkbox" name="" id="" v-model="checkArr" value="打豆豆">打豆豆
{{ checkArr }}
</p>
<p>
<!-- selectVal 值的获取方式 若 option 有 value 值,则获取 否则 option 里的内容 -->
<select name="" id="" v-model="selectVal">
<option value="0">杭州</option>
<option>厦门</option>
</select>
{{ selectVal }}
</p>
<p>
<!-- 多选下拉菜单 -->
<select name="" id="" v-model="selectArr" multiple>
<option value="0">杭州</option>
<option value="1">合肥</option>
<option value="3">厦门</option>
</select>
{{ selectArr }}
</p>
</div>
<script>
let vm = new Vue({
el: '#app',
data: {
age: 10,
radioVal: "0",
checkVal: false,
checkArr:[],
selectVal: 0,
selectArr: [],
},
})
</script>
[ 事件绑定 ]
<div id="app">
<!-- 冒泡: 由内到外 捕获 : 由外到内 -->
<!-- 采用捕获 ,其他元素还是采用冒泡的方式 -->
<!-- <div @click.capture="parent"> -->
<div @click="parent">
parent
<!-- @click.stop 阻止冒泡 -->
<div @click.stop="son">
son
<!-- prevent 阻止默认行为 self 点击自己的时候才会触发 once 只触发一次 passive 表示阻止默认行为 不能与 prevent 同时使用 -->
<div @click.self="grandSon">
grandSon
</div>
</div>
</div>
</div>
<script>
let vm = new Vue({
el: '#app',
data: {
},
methods: {
// 绑定事件 事件名不要和属性名相同
parent() {
alert('parent')
},
son() {
alert('son')
},
grandSon() {
alert('grandSon')
}
}
})
</script>
[ 自定义指令 ]
<!-- 自定义指令 -->
<div class="custom">
<p>
<input type="text" v-focus.color="col">
</p>
</div>
<script>
// `v-focus` 全局自定义指令
Vue.directive('focus', {
// 指令初始化时调用
bind() {
console.log('初始化');
},
// 当被绑定的元素插入到 DOM 中时……
inserted: function (el, bindings, vnode) { // el 绑定的元素,bindings 指令的参数,vnode 虚拟节点
console.log(bindings);
// 判断有无修饰符 如果有 进行操作
if (bindings.modifiers.color) {
el.style.background = bindings.value
}
Vue.nextTick(() => {
// 聚焦元素
el.focus()
})
},
updata() {
console.log('更新时触发');
},
unbind() {
console.log('指令销毁 指令和绑定元素解绑时');
}
})
let vm = new Vue({
el: '#app',
data: {
col: 'red'
},
methods: {
// 局部自定义指令 只在当前 实例起作用
directives: {
focus: {
// 指令初始化时调用
bind() {
console.log('初始化');
},
// 当被绑定的元素插入到 DOM 中时……
inserted: function (el, bindings, vnode) { // el 绑定的元素,bindings 指令的参数,vnode 虚拟节点
console.log(bindings);
// 判断有无修饰符 如果有 进行操作
if (bindings.modifiers.color) {
el.style.background = bindings.value
}
Vue.nextTick(() => {
// 聚焦元素
el.focus()
})
},
updata() {
console.log('更新时触发');
},
unbind() {
console.log('指令销毁 指令和绑定元素解绑时');
}
}
}
}
})
</script>