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>
