Vue的基本指令和Vue过滤器

v-bind


v-bind 可简写成冒号 ”:“,单向绑定 ,


<!-- 绑定一个 attribute -->

<img v-bind:src="imageSrc">



<!-- 动态 attribute 名 (2.6.0+) -->

<button v-bind:[key]="value"></button>



<!-- 缩写 -->

<img :src="imageSrc">



<!-- 动态 attribute 名缩写 (2.6.0+) -->

<button :[key]="value"></button>



<!-- 内联字符串拼接 -->

<img :src="'/path/to/images/' + fileName">



<!-- class 绑定 -->

<div :class="{ red: isRed }"></div>

<div :class="[classA, classB]"></div>

<div :class="[classA, { classB: isB, classC: isC }]">



<!-- style 绑定 -->

<div :style="{ fontSize: size + 'px' }"></div>

<div :style="[styleObjectA, styleObjectB]"></div>



<!-- 绑定一个全是 attribute 的对象 -->

<div v-bind="{ id: someProp, 'other-attr': otherProp }"></div>



<!-- 通过 prop 修饰符绑定 DOM attribute -->

<div v-bind:text-content.prop="text"></div>



<!-- prop 绑定。“prop”必须在 my-component 中声明。-->

<my-component :prop="someThing"></my-component>



<!-- 通过 $props 将父组件的 props 一起传给子组件 -->

<child-component v-bind="$props"></child-component>



<!-- XLink -->

<svg><a :xlink:special="foo"></a></svg>



v-model:


双向绑定 只能应用于表单元素

v-model双向数据绑定实现原理是什么?

v-model 实现双向数据绑定的原理底层就是用到了 object.defineproperty

Object.defineProperty(obj, prop, descriptor)

obj

要定义属性的对象。

prop

要定义或修改的属性的名称或 Symbol 。

descriptor

要定义或修改的属性描述符。


有三个修饰符:


.lazy - 取代 input 监听 change 事件

.number - 输入字符串转为有效的数字

.trim - 输入首尾空格过滤




<div id="add">

  <!-- 普通文本输入框和p标签实现双向绑定 -->

  <input v-model="message" placeholder="edit me">

  <br>

 文本同时输出: <input v-model="message" placeholder="edit me">

  <p>文本输出: {{ message }}</p>

</div>



v-on


可简写成 @ 符号 属于事件绑定,

常见用法:

1. @click 点击事件 v-on:mouseover 输入移入事件 等鼠标监听事件

2. 2.@keyup 监听键盘事件(监听回车键 @keyup.enter = ‘方法名’)

自定义键盘码方法:Vue.config.keyCodes.按键名 = 按键名对应的键盘码

修饰符:

.stop - 调用 event.stopPropagation()。

.prevent - 调用 event.preventDefault()。

.capture - 添加事件侦听器时使用 capture 模式。

.self - 只当事件是从侦听器绑定的元素本身触发时才触发回调。

.{keyCode | keyAlias} - 只当事件是从特定键触发时才触发回调。

.native - 监听组件根元素的原生事件。

.once - 只触发一次回调。

.left - (2.2.0) 只当点击鼠标左键时触发。

.right - (2.2.0) 只当点击鼠标右键时触发。

.middle - (2.2.0) 只当点击鼠标中键时触发。

.passive - (2.3.0) 以 { passive: true } 模式添加侦听器


<!-- 方法处理器 -->

<button v-on:click="doThis"></button>



<!-- 动态事件 (2.6.0+) -->

<button v-on:[event]="doThis"></button>



<!-- 内联语句 -->

<button v-on:click="doThat('hello', $event)"></button>



<!-- 缩写 -->

<button @click="doThis"></button>



<!-- 动态事件缩写 (2.6.0+) -->

<button @[event]="doThis"></button>



<!-- 停止冒泡 -->

<button @click.stop="doThis"></button>



<!-- 阻止默认行为 -->

<button @click.prevent="doThis"></button>



<!-- 阻止默认行为,没有表达式 -->

<form @submit.prevent></form>



<!--  串联修饰符 -->

<button @click.stop.prevent="doThis"></button>



<!-- 键修饰符,键别名 -->

<input @keyup.enter="onEnter">



<!-- 键修饰符,键代码 -->

<input @keyup.13="onEnter">



<!-- 点击回调只会触发一次 -->

<button v-on:click.once="doThis"></button>



<!-- 对象语法 (2.4.0+) -->

<button v-on="{ mousedown: doThis, mouseup: doThat }"></button>



v-cloak


这个指令保持在元素上直到关联实例结束编译。和 CSS 规则如 [v-cloak] { display: none } 一起用时,这个指令可以隐藏未编译的 Mustache 标签直到实例准备完毕。


<style>

[v-cloak] {

  display: none;

}

</style>

<div v-cloak>

  {{ message }}

</div>



v-for


可用于在DOM中遍历数组或者是对象


<div v-for="item in items">

  {{ item.text }}

</div>



<div v-for="(item, index) in items"></div>

<div v-for="(val, key) in object"></div>

<div v-for="(val, name, index) in object"></div>



<!-->  遍历数字 <p  v-for = "num in 10"> 这是第{{ num }}次循环</p>  注意: 这里的num是从1开始遍历的<-->



v-for 的默认行为会尝试原地修改元素而不是移动它们。要强制其重新排序元素,你需要用特殊 attribute key 来提供一个排序提示:


<div v-for="item in items" :key="item.id">

  {{ item.text }}

</div>



v-pre


跳过这个元素和它的子元素的编译过程。可以用来显示原始 Mustache 标签。跳过大量没有指令的节点会加快编译。说白了就是对插值表达式等不进行编译,在网页中进行原样显示


<span v-pre>{{ this will not be compiled }}</span>



v-slot


可放置在函数参数位置的 JavaScript 表达式 (在支持的环境下可使用解构)。可选,即只需要在为插槽传入 prop 的时候使用。


<!-- 具名插槽 -->

<base-layout>

  <template v-slot:header>

    Header content

  </template>



  Default slot content



  <template v-slot:footer>

    Footer content

  </template>

</base-layout>



<!-- 接收 prop 的具名插槽 -->

<infinite-scroll>

  <template v-slot:item="slotProps">

    <div class="item">

      {{ slotProps.item.text }}

    </div>

  </template>

</infinite-scroll>



<!-- 接收 prop 的默认插槽,使用了解构 -->

<mouse-position v-slot="{ x, y }">

  Mouse position: {{ x }}, {{ y }}

</mouse-position>



v-once


只渲染元素和组件一次。随后的重新渲染,元素/组件及其所有的子节点将被视为静态内容并跳过。这可以用于优化更新性能。


<!-- 单个元素 -->

<span v-once>This will never change: {{msg}}</span>

<!-- 有子元素 -->

<div v-once>

  <h1>comment</h1>

  <p>{{msg}}</p>

</div>

#  最后

**自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。**

**深知大多数初中级Android工程师,想要提升技能,往往是自己摸索成长,自己不成体系的自学效果低效漫长且无助。**

**因此收集整理了一份《2024年Web前端开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。**

![img](https://img-blog.csdnimg.cn/img_convert/4220abd5d3566b7a80f820427083dac8.jpeg)

![](https://img-blog.csdnimg.cn/img_convert/d61723a3fd3f78efc830848ede34e789.png)

![](https://img-blog.csdnimg.cn/img_convert/3224daa01fece9c8963dff002e548a29.png)

**既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Android开发知识点!不论你是刚入门Android开发的新手,还是希望在技术上不断提升的资深开发者,这些资料都将为你打开新的学习之门!**

[**如果你觉得这些内容对你有帮助,需要这份全套学习资料的朋友可以戳我获取!!**](https://bbs.csdn.net/topics/618191877)

**由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!**
,自己不成体系的自学效果低效漫长且无助。**

**因此收集整理了一份《2024年Web前端开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。**

[外链图片转存中...(img-eZBWYtIE-1715699513482)]

[外链图片转存中...(img-nzl0AMdl-1715699513482)]

[外链图片转存中...(img-iiN2KAkq-1715699513483)]

**既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Android开发知识点!不论你是刚入门Android开发的新手,还是希望在技术上不断提升的资深开发者,这些资料都将为你打开新的学习之门!**

[**如果你觉得这些内容对你有帮助,需要这份全套学习资料的朋友可以戳我获取!!**](https://bbs.csdn.net/topics/618191877)

**由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!**
  • 5
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值