vue指令总结

vue指令总结

指令的职责是,当表达式的值改变时,将其产生的连带影响,响应式地作用于DOM.

一 文本指令

数据绑定最常见的形式就是使用“Mustache”语法(双大括号)的文本插值,Mustache标签将会被替代为对应数据对象上的值.

1. v-text
  • {{}}会将数据解释为普通文本,而非HTML代码
2. v-html
  • {{}}会将数据解释为HTML代码

⚠️ 站点上动态渲染的HTML很容易导致XSS攻击.一般只对可信内容使用HTML插值,绝不要对用户提供的内容使用插值

二 流程控制指令

1. v-show
  • 值为Boolean/表达式/变量,带有v-show的元素始终会被渲染并保存在DOM中,通过display样式控制元素的显示与隐藏.有更高的初始渲染开销,如果需要非常频繁地切换,使用v-show较好
2. v-if
  • 通过销毁和重建来实现元素的显示与隐藏.有更高的切换开销,如果在运行时条件很少改变,使用v-if较好
3. v-for
  • 遍历数组、对象并渲染列表.使用item in items形式,items是原数据数组,item则是被迭代的数组元素的别名.类似于for in循环遍历。
    v-for还支持一个可选的第二个参数,即当前项的索引.
数组
<ul id="food">
  <li v-for="item in items" :key="item.name">
    {{ item.name}}
  </li>
</ul>
var example1 = new Vue({
  el: '#food',
  data: {
    items: [
      {name: '苹果' },
      {name: '香蕉' },
      {name: '葡萄' }
    ]
  }
})

结果:

· 苹果
· 香蕉
· 葡萄
对象
<ul id=""demo">
  <li v-for="(value, name, index) in object">
    {{index}}. {{name}}: {{ value }}
  </li>
</ul>
new Vue({
  el: '#demo',
  data: {
    object: {
      name: '小红',
      age: '17',
      sex: '女'
    }
  }
})

结果:

0. name: 小红
1. age: 17
2. sex: 女

⚠️ v-for渲染列表时,如果列表数据发生了变化,它默认使用“就地更新”的策略,即Vue 会使用一种最大限度减少动态元素并且尽可能的尝试就地修改/复用相同类型元素的算法。也就是说默认的情况下Vue会尽量使用已经存在的DOM元素,直接在已有的DOM上进行复用修改,这样可以带来一定性能上的提升。给每项提供一个唯一的keyattribute.这样Vue就会根据最新的数据对DOM进行调整,而它会基于key的变化重新排列元素顺序,并且会移除key不存在的元素。 可以简单认为key是给每一个DOM节点一个唯一标识,这样Vue就不会启用就地更新了。

<div v-for="(item, index) in items" :key="index">
   <!-- 内容 -->
</div>

三 事件指令

1. v-on(缩写“@”)
  • 事件监听器
修饰符:
  • 事件修饰符

.stop: 调用event.stopPropagation()阻止事件冒泡
.prevent: 调用event.preventDefault()阻止默认事件
.capture: 事件捕获
.self: 只有在event.target是当前元素自身时触发函数,如果是事件传递不执行
.once: 只触发一次回调
.passive: 滚动事件的默认行为(滚动行为)立即触发,对应addEventListener中的passive选项,可以提高移动端的性能

  • 按键修饰符

.enter: 按回车键时回调
.tab:
.delete: 按删除和退格键时回调
.esc
.space
.up
.down
.left
.right

  • 鼠标按键修饰符

.left
.right
.middle

四 属性绑定指令

1. v-bind(缩写“:”)
  • 动态地绑定一个或多个attribute,或一个组件prop到表达式
绑定HTML Class
  • 对象语法: 给:class传入一个对象,以动态的切换class
<div :class="{"blue":isBlue, "pink":isPink}"></div>
data:{
	isBlue: true,
	isPink: false
}

结果渲染为<div class="blue"></div>当isBlue或isPink变化时,class相应的更新.
绑定的数据对象不必放在内联定义的模版里:

<div :class="colorObject"></div>
data: {
	colorObject: {
		"blue": true,
		"pink": false
	}
}

渲染结果和上面一样

  • 数组语法: 给class传入一个数组
<div :class="[color, activeClass]"></div>
data:{
	color: "blue",
	activeClass: "active"
}

结果渲染为<div class="blue active"></div>
也可以使用三元表达式:

<div :class="[color, isActive ? activeClass : ""]"></div>

当有多个class条件时略显繁琐,可以在数组语法中使用对象语法

<div :class="[color, {active: isActive}]"></div>
绑定内联样式
  • 对象语法: 看着像css但其实是一个JavaScript对象
<div v-bind:style="{ color: activeColor, fontSize: fontSize + 'px' }"></div>
data: {
  activeColor: 'red',
  fontSize: 30
}

直接绑定到一个样式对象上:

<div v-bind:style="styleObject"></div>
data: {
  styleObject: {
    color: 'red',
    fontSize: '13px'
  }
}
  • 数组语法
<div v-bind:style="[color, fontSize]"></div>

五 双向绑定指令

1. v-model
  • 在表单<input><textarea><select>元素上创建双向数据绑定

修饰符

  • .lazy
  • .number 将输入的字符串转为有效数字
  • .trim 去掉首位空格

六 编译指令

1. v-pre
  • 跳过这个元素及其子元素的编译过程
2. v-cloak
  • 这个指令保持在元素上直到关联实例结束编译
3. v-once
  • 只编译一次, 只渲染元素和组件一次,随后的重新渲染,元素/组件及其所有的子节点将被视为静态内容并跳过.优化更新性能
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Vue自定义指令失效的原因可能有很多种情况。根据引用和引用的内容,可以推测一些可能的原因和解决方法。 1. 指令未正确注册:在Vue中,自定义指令需要先进行注册,然后才能在模板中使用。请确保自定义指令已经正确地注册到Vue实例中。你可以使用全局注册或局部注册的方式进行注册。全局注册可以通过Vue.directive方法全局注册所有的指令,如引用所示。局部注册可以在组件内部使用directives选项进行指令的注册。 2. 指令名称不正确:请确保你在模板中正确地使用了自定义指令的名称。指令名称应该是以v-开头的,比如v-imgerror。 3. 指令绑定值错误:自定义指令可以通过绑定值来传递参数。请确保你正确地传入了绑定值,并且在指令定义中正确地使用了这些值。 4. 指令逻辑错误:自定义指令的逻辑代码可能有问题,导致指令无法正常工作。请检查指令的代码逻辑,确保代码没有错误。 5. 图片加载问题:自定义指令在处理图片加载问题时可能会出现失效的情况。请检查你的指令逻辑,确认图片加载错误时是否正确地触发了相关的处理逻辑。 总结来说,如果Vue自定义指令失效,首先要检查指令是否正确注册、名称是否正确、绑定值是否正确、代码逻辑是否正确,以及是否正确处理了图片加载问题。通过排查这些可能的原因,你应该能够找到并解决问题。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值