Vue前端开发学习之——Vue常见指令①

Vue指令

  • 问:什么是指令?

    • 指令的本质就是标签中的vue自定义属性。
    • 指令格式以“v-”开始,例如:v-cloak,v-text,v-html等
      [注意]:v-html尽量少用甚至不用,因为可能引发XSS攻击。
  • 问:指令有什么作用?

    • 当表达式的值改变时,将其产生的连带影响,响应式地作用于DOM。(简化操作)

常用指令

1. v-cloak

  • 作用:解决浏览器在加载页面时因存在时间差而产生的闪动问题
  • 原理:先隐藏元素挂载位置,处理好渲染后再显示最终的结果
  • 注意:需要与css规则一起使用
  • 如果后期有多个元素需要解决闪动问题,可以将v-cloak写在跟元素上

示例

<style>
    [v-cloak]{
     
     
      display: none;
    }
</style>
<body>
	<!-- v-cloak -->
	<div v-cloak>
	  {
   
   {str1}}
	</div>
</body>

2.数据绑定属性

  • v-text 填充纯文本
    • 相比插值表达式更简洁
    • 不存在插值表达式的闪动问题
  • v-html 填充HTML片段
    • 存在安全问题
    • 本网站内部数据可以使用,来自第三房的数据不可用

示例代码

<body>
  <div id="app">
    <!-- 插值表达式形式 -->
    <div>{
   
   {str1}}</div>
    <div>{
   
   {str2}}</div>
    <!-- 上面直接原样渲染出来 -->

    <!-- v-text 与 插值表达式形式一样 -->
    <div v-text='str1'></div>
    <div v-text='str2'></div>

    <!-- v-html 会解析字符串中的标签 -->
    <div v-html='str1'></div>
    <div v-html='str2'></div>

  </div>
</body>
<script src="./node_modules/vue/dist/vue.js"></script>
<script>
  new Vue({
     
     
    el: "#app",
    data: {
     
     
      str1: '迫使vue示例重新渲染。注意它仅仅影响示例本身和插入插槽内容的子组件,而不是所有子组件',
      str2: '<a href="http://www.baidu.com">百度</a>',
    }
  })
</script>
  • v-pre 填充原始信息

  • 跳过表达式的编译过程,显示原始信息

<span v-pre>{
   
   {这里不会被编译}}</span>

有时候我们不想指令中的表达式进行运行,只需要给表达式加个引号,例如:

<div v-html='"msg"'></div>

3.v-once

  • 作用:只渲染元素和组件一次,之后元素和组件将失去响应式(数据层面)功能
  • 如何理解响应式
    • 布局响应式:随着终端设备的屏幕尺寸的变化而改变布局
    • 数据响应式:数据变化后页面随之变化,页面中的数据变化代码中的数据也跟着变化(双向数据绑定)
<!-- 动态修改msg值,此绑定将不会发生改变 -->
    <div v-once>{
   
   {msg}}</div>

4.v-bind

  • 作用:动态的绑定一个或多个attribute [组件内:一次声明,多次使用]
  • 场景:服用某个数据的时候会使用
<!-- v-bind 绑定href属性值 -->
<a v-bind:href="url" v-bind:target="type">跳转</a>
<!-- v-bind 绑定href属性值 简写形式 -->
<a :href="url" :target="type">跳转</a>

示例代码

<!-- #app中的 v-bind -->
    <a :href="url" :target="type" :alt="alt">{
   
   {alt}}</a>
<!-- script vue实例中的data -->
data: {
      url:'https://baidu.com',
      type:'_blank',
      alt:'百度'
    }

5.v-on

5.1 基本使用

  • 作用:绑定事件监听器 (事件绑定)
  • 场景:服用某个数据的时候会使用
  • 示例
<!-- 常规写法 -->
<button v-on:click="num++">点击</button>
<!-- 缩写 -->
<button @click="num++">点击</button>

<!-- 事件处理函数调用:直接写函数名 -->
<button @click="say">点击</button>
<!-- 事件处理函数调用:常规调用 -->
<button @click="alert('123')">点击</button>

如果事件处理函数为自定义函数,则需要先进行定义,定义的方式如下:

...
data: {
      ...
},
methods:{
functionName:function(arg1,arg2...){
		//something to do
	}
}

注意:事件绑定 v-on 属性表达式中切记不能直接写业务逻辑,例如 @click=“alert(‘123’)”

事件处理函数传参

<button @click="say('hi',$event)">点击</button>
  • 事件对象的传递与接收注意点
    • 如果事件对象直接使用函数名并且不写小括号,那么默认会将事件对象所谓唯一参数进行传递。
    • 如果使用常规的自定义函数调用(只要写了小括号),那么如果需要使用事件对象则必须作为最后一个参数进行传递,且事件对象的名称必须是"$event"

5.2 事件修饰符

  • 含义:用来处理事件的特定行为

示例

<!-- 停止冒泡 -->
<button @click.stop="say">点击</button>
<!-- 阻止默认行为 -->
<button @click.prevent="say">点击</button>
<!-- 串联修饰符 -->
<button @click.stop.prevent="say">点击</button>

5.3 按键修饰符

  • 含义:在监听键盘事件时,我们经常需要检查详细的按键。Vue允许为v-on在监听键盘事件时添加按键修饰符

示例

<!-- 只有在 key 是 enter 回车键的时候调用 -->
<button v-on:keyup.enter="submit">点击</button>
<!-- 只有在 key 是 delete 键的时候调用 -->
<button v-on:keyup.delete="handle">点击</button>

6.循环分支指令

6.1 循环指令

  • 作用:根据一组数据或对象的选项列表进行渲染
  • 指令:v-for
  • 示例1 数组遍历使用
<!-- 模板部分 -->
<ul>
	<!-- 直接取值 -->
	<li v-for='item in fruits'>{
   
   {item}}</li>
	<!-- 带索引 -->
	<li v-for='(item ,index)in fruits'>{
   
   {item}}{
   
   {index}}</li>
</ul>
<!-- js部分 -->
data:{
fruits:['apple','pear','banana']
}

细节:key的作用,提高性能,不影响显示效果(如果没有id,可以考虑使用索引替代)

  • 示例2 对象遍历使用
<!-- 模板部分 -->
<ul>
	<li v-for='(value,key,index)in obj'>{
   
   {value +'-'+key+'-'+'index}}</li>
</ul>
<!-- js部分 -->
...
data:{
	obj:{
		username:'lucy',
		age:20,
		gender:'male'
	}
}
...

6.2 分支指令

作用 :根据表达式的布尔值进行判断是否渲染该元素

  • v-if
  • v-else-if
  • v-else
  • v-show 根据表达式真假值,切换元素的display css属性

示例

<!-- 模板部分 -->
<div v-if="score >= 90"> 优秀 </div>
<div v-else-if="score >= 80 && score < 90"> 良好 </div>
<div v-else-if="score >= 70 && score < 80"> 一般 </div>
<div v-else> 不及格 </div> 
<!-- v-show -->
<div v-show='flag'>测试v-show</div> 
<!-- JavaScript部分 --> 
...... 
data: { score: 88, flag:false }
......

思考:v-if系列与v-show的区别是什么??
v-if : 控制元素是否渲染
v-show : 控制元素是否显示(已经渲染,display:none)

猜你喜欢

转载自blog.csdn.net/weixin_53985543/article/details/115007904