Vue常用指令(一)

简介: Vue常用指令(一)

.常用指令


v-cloak


**作用:**解决浏览器在加载页面时因存在时间差而产生的闪动问题

**原理:**先隐藏元素挂载位置,处理好渲染后再显示最终的结果

**注意:**需要与CSS规则一起使用

**文档地址:**https://cn.vuejs.org/v2/api/#v-cloak

示例:

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


如果后期有多个元素需要解决闪动问题,可以将v-cloak写在根元素上(id="app"顶级的div上)。


数据绑定指令


  • v-text 填充纯文本
  • 相比插值表达式更加简洁
  • 不存在插值表达式的闪动问题
<div id='app'>
  <span v-text="msg"></span>
  <!-- 和下面的一样 -->
  <span>{{msg}}</span>
</div>
<script src="./js/vue.js"></script>
<script>
  new Vue({
    el: '#app',
    data: {
      msg:'<a href="http://www.baidu.com/">百度一下</a>'
    }
  })
</script>


  • v-html 填充HTML片段
  • 存在安全问题
  • 本网站内部数据可以使用,来自第三方的数据不可使用
  • 只有一个场景会使用:后台会用,比如有一个企业站,会发不企业的动态的新闻,这个时候会使用富文本编辑器,由于内容是自己人加的,所以可以放心使用。 自己攻击自己(自攻)
<div id='app'>
    <div v-html="html"></div>
</div>
<script src="./js/vue.js"></script>
<script>
  new Vue({
    el: '#app',
    data: {
      html:'<a href="http://www.baidu.com/">百度一下</a>'
    }
  })
</script>


  • v-pre 填充原始信息(对应的是以前html中的标签“

”)【凑数】


 

 

  • 跳过表达式的编译过程(先编译,后渲染),显示原始信息
<span v-pre>{{ this will not be compiled }}</span>


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

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


针对后续想让指令属性值不解析的操作都可以这么去做。


v-once


作用:只渲染元素或组件一次**,之后元素或组件将失去**响应式(数据层面)功能(对于数据的一锤子买卖)


**Q & A:**如何理解响应式?

  • 布局响应式:布局会随着设备尺寸的大小变化而变化的布局方式
  • 数据响应式:双向数据绑定


示例:

<div id="app">
  <h3>{{message}}</h3>
  <!-- 动态修改message值,此绑定将不会发生改变 -->
  <div v-once>{{message}}</div>
</div>
<script src="./js/vue.js"></script>
<script type='javascript'>
  const vm = new Vue({
      el: '#app',
      data: {
          message: '你好世界'
      }
  })
</script>


v-bind


**作用:**动态地绑定一个或多个attribute【实现可以允许我们在html内置的属性值中使用变量,主要是给非指令的属性去使用绑定动态可变的数据的】


场景:复用某个数据的时候会使用。例如:飞猪官网

<!-- v-bind:给非指令的属性使用变量 -->
<a v-bind:href="url" v-bind:target="target">{{alt}}</a>
<!-- v-bind的简写形式,实际使用这样的写法 -->
<a :href="url" :target="target">{{alt}}</a>


示例代码

<body>
    <div id="app">
        <a :href="url" :target="type" :alt="alt">{{alt}}</a>
        <a :href="url">{{alt}}</a>
    </div>
</body>
<script src="./js/vue.js"></script>
<script>
    new Vue({
        el: '#app',
        data: {
            url: 'https://www.fliggy.com/',
            type: '_blank',
            alt: '飞猪官网'
        }
    })
</script>


v-on


基本使用


**作用:**绑定事件监听器(事件绑定)

示例:

<!-- 直接执行操作 -->
<!-- 常规写法 -->
<button v-on:click="num++"></button>
<!-- 缩写 -->
<button @click="num++"></button>
<!-- 事件处理函数调用:直接写函数名 -->
<button @click="say"></button>
<!-- 事件处理函数调用:常规调用 -->
<button @click="say('sth')"></button>


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

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


注意:事件绑定v-on属性表达式中切记不能直接写业务逻辑,例如@click="alert('123')"。换言之,就咋行内上是不允许使用内置函数的,必须要调用自己定义的函数,然后你可以在自定义的函数内使用内置函数。


事件处理函数传参

<!-- 事件处理函数调用:直接写函数名 -->
<button @click="say"></button>
<!-- 事件处理函数调用:常规调用 -->
<button @click="say('hi',$event)"></button>


在不传递自定义参数的时候,上述两种用法均可以使用;但是如果需要传递自定义参数的话,则需要使用第2种方式。


事件对象的传递与接收注意点

  • 如果事件直接使用函数名并且不写小括号,那么默认会将事件对象作为唯一参数进行传递,可以在定义函数的位置直接定义一个形参,并且在函数内可以使用该形参
  • 如果使用常规的自定义函数调用(只要写了小括号),那么如果需要使用事件对象则必须作为最后一个参数进行传递,且事件对象的名称必须是“$event”


示例代码

<style>
    #big {
        width: 300px;
        height: 300px;
        background-color: red;
    }
    #mid {
        width: 200px;
        height: 200px;
        background-color: green;
    }
    #sma {
        width: 100px;
        height: 100px;
        background-color: pink;
    }
</style>
<body>
    <div id="app">
        <div id="big" @click="say('大娃',$event)">
            <div id="mid" @click="say('二娃',$event)">
                <div id="sma" @click="say('三娃',$event)"></div>
            </div>
        </div>
    </div>
</body>
<script src="./js/vue.js"></script>
<script>
    new Vue({
        el: '#app',
        data: {
        },
        methods:{
            say: function(name,event){
                console.log('你点了' + name);
            }
        }
    })
</script>


事件修饰符


含义:用来处理事件的特定行为(也是vue提供一些语法糖)

使用示例:

<!-- 停止冒泡 -->
<button @click.stop="doThis"></button>
<!-- 阻止默认行为 -->
<button @click.prevent="doThis"></button>
<!--  串联修饰符(连贯操作) -->
<button @click.stop.prevent="doThis"></button>


更多事件修饰符请参考官方文档:https://cn.vuejs.org/v2/api/#v-on


实例代码

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <style>
        .dawa {
            background: red;
            width: 400px;
            height: 400px;
        }
        .erwa {
            background: orange;
            height: 300px;
            width: 300px;
        }
        .sanwa {
            background: yellow;
            height: 200px;
            width: 200px;
        }
    </style>
</head>
<body>
    <div id="app">
        <!-- 套娃行为 -->
        <div class="dawa" @click="call_dawa">
            <div class="erwa" @click.stop="call_erwa">
                <div class="sanwa" @click.stop="call_sanwa">
                </div>
            </div>
        </div>
    </div>
    <script src="./js/vue.js"></script>
    <script>
        new Vue({
            el: "#app",
            data: {
            },
            methods:{
                call_dawa(){
                    console.log('大娃:收到');
                },
                call_erwa(){
                    console.log('二娃:收到');
                },
                call_sanwa(){
                    console.log('三娃:你说啥');
                }
            }
        })
    </script>
</body>
</html>


按键修饰符


按键修饰符:按键事件

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

<!-- 只有在 `key` 是 `Enter` 回车键的时候调用 -->
<input @keyup.enter="submit">
<!-- 只有在 `key` 是 `Delete` 回车键的时候调用 -->
<input v-on:keyup.delete="handle">


更多按键修饰符请参考官方文档:https://cn.vuejs.org/v2/guide/events.html#%E6%8C%89%E9%94%AE%E4%BF%AE%E9%A5%B0%E7%AC%A6


循环分支指令


循环指令


作用:根据一组数组或对象的选项列表进行渲染

**指令:**v-for

  • 数组遍历使用示例:
<!-- 模板部分 -->
<ul>
    <!-- 直接取值 -->
    <li v-for='item in fruits'>{{item}}</li>
    <!-- 带索引 -->
    <li v-for='(item,index) in fruits'>{{item}}{{index}}</li>
</ul>
<!-- JavaScript部分 -->
......
data: {
  fruits: ['apple','pear','banana','orange']
}
......


细节:key的作用,提高性能,不影响显示效果(如果没有id,可以考虑使用索引替代),切记key的值不能重复,只要遵循不重复的原则即可,值是什么无所谓。

key的作用就是更新组件时判断两个节点是否相同。相同就复用,不相同就删除旧的创建新的。

<ul>
    <li :key='item.id' v-for='(item,index) in fruits'>{{item}}</li>
</ul>
  • 对象遍历使用示例
<!-- 模板部分 -->
<ul>
    <li v-for='(value,name,index) in obj'>{{value + '-' + name + '-' + index}}</li>
</ul>
<!-- JavaScript部分 -->
......
data: {
  obj: {
    username: 'zhangsan',
    age: 28,
    gender: 'male'
  }
}
......


示例代码:

<body>
    <div id="app">
        <div>
            <ul>
                <li :key="index" v-for="(item,index) in cars">{{item}}</li>
            </ul>
        </div>
        <div>
            <ul>
                <li :key="index" v-for="(item,key,index) in user">{{key}}:{{item}}</li>
            </ul>
        </div>
    </div>
</body>
<script src="./js/vue.js"></script>
<script>
    new Vue({
        el: '#app',
        data: {
            cars: ['bmw','aodi','benci','haima'],
            user: {
                username: 'zhangsan',
                gender: 'mele',//性别,sex
                age: 22
            }
        }
    })
</script>


分支指令


作用:根据表达式的布尔值(true/false)进行判断是否渲染/显示该元素

  • v-if
  • v-else
  • v-else-if

上述三个指令是分支中最常见的。根据需求,v-if可以单独使用,也可以配合v-else一起使用,也可以配合v-else-if和v-else一起使用。

  • v-show

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
}
......
目录
相关文章
|
25天前
|
JavaScript API 开发者
Vue是如何进行组件化的
Vue是如何进行组件化的
|
27天前
|
JavaScript 前端开发 开发者
vue 数据驱动视图
总之,Vue 数据驱动视图是一种先进的理念和技术,它为前端开发带来了巨大的便利和优势。通过理解和应用这一特性,开发者能够构建出更加动态、高效、用户体验良好的前端应用。在不断发展的前端领域中,数据驱动视图将继续发挥重要作用,推动着应用界面的不断创新和进化。
|
1天前
|
JavaScript 关系型数据库 MySQL
基于VUE的校园二手交易平台系统设计与实现毕业设计论文模板
基于Vue的校园二手交易平台是一款专为校园用户设计的在线交易系统,提供简洁高效、安全可靠的二手商品买卖环境。平台利用Vue框架的响应式数据绑定和组件化特性,实现用户友好的界面,方便商品浏览、发布与管理。该系统采用Node.js、MySQL及B/S架构,确保稳定性和多功能模块设计,涵盖管理员和用户功能模块,促进物品循环使用,降低开销,提升环保意识,助力绿色校园文化建设。
|
29天前
|
JavaScript 前端开发 开发者
vue学习第一章
欢迎来到我的博客!我是瑞雨溪,一名热爱前端的大一学生,专注于JavaScript与Vue,正向全栈进发。博客分享Vue学习心得、命令式与声明式编程对比、列表展示及计数器案例等。关注我,持续更新中!🎉🎉🎉
32 1
vue学习第一章
|
29天前
|
JavaScript 前端开发 索引
vue学习第三章
欢迎来到瑞雨溪的博客,一名热爱JavaScript与Vue的大一学生。本文介绍了Vue中的v-bind指令,包括基本使用、动态绑定class及style等,希望能为你的前端学习之路提供帮助。持续关注,更多精彩内容即将呈现!🎉🎉🎉
26 1
vue学习第三章
|
29天前
|
缓存 JavaScript 前端开发
vue学习第四章
欢迎来到我的博客!我是瑞雨溪,一名热爱JavaScript与Vue的大一学生。本文介绍了Vue中计算属性的基本与复杂使用、setter/getter、与methods的对比及与侦听器的总结。如果你觉得有用,请关注我,将持续更新更多优质内容!🎉🎉🎉
35 1
vue学习第四章
|
25天前
|
JavaScript 前端开发 开发者
Vue是如何劫持响应式对象的
Vue是如何劫持响应式对象的
23 1
|
25天前
|
JavaScript 前端开发 API
介绍一下Vue中的响应式原理
介绍一下Vue中的响应式原理
27 1
|
25天前
|
JavaScript 前端开发 开发者
Vue是如何进行组件化的
Vue是如何进行组件化的
|
25天前
|
存储 JavaScript 前端开发
介绍一下Vue的核心功能
介绍一下Vue的核心功能
下一篇
DataWorks