Vue常用指令+用法举例 详解

vue的常用指令有:vue常用指令有:v-on指令、v-model指令、v-once指令、v-show指令、v-if指令、v-else指令、v-else-if指令、v-for指令、v-text指令、v-html指令、v-bind指令等等。

1.v-on

v-on 事件绑定指令,用来辅助程序员为DOM 元素绑定事件监听

语法: v-on:<事件类型>="<函数名>"由于v-on 指令在开发中使用频率非常高,因此,vue 官方为其提供了简写形式(简写为英文的@)

复制代码
<body>
    <div id="app">
        <!-- 完整写法 v-on: -->
        <div v-on:click="clickfunc">点击事件</div>
        <!-- 缩写 @ -->
        <div @click="clickfunc">点击事件</div>
    </div>
</body>
<script>
    new Vue({
        el:"#app",
        data:{
        },
        methods:{
         // 定义一个 点击函数   
            clickfunc:function(){
                console.dir('click event')
            }    
        },
    })
</script>

2.v-model

vue中双向绑定是一个指令v-model,可以绑定一个动态值到视图,同时视图中变化能改变该值。v-model是语法糖,默认情况下相于:value和@input。

使用v-model可以减少大量繁琐的事件处理代码,提高开发效率,代码可读性也更好

通常在表单项上使用v-model

原生的表单项可以直接使用v-model,自定义组件上如果要使用它需要在组件内绑定value并处理输入事件。语法: v-model="<变量名>"

复制代码
<body>
    <div id="app">
        <div>val的值:{{val}}</div>
        <div>val的值:{{val}}</div>
        <input v-model="val">
    </div>
</body>
<script>
    new Vue({
        el:"#app",
        data:{
            val:'success'
        }
    })
</script>

3.v-once

v-once只会执行一次渲染,当数据发生改变时,不会再变化

复制代码
<div id="app">
    <p v-once>{{msg}}</p>
    <input v-model="msg" type="text" />
</div>
<script>
    let vue = new Vue({
        el:"#app",
        data:{
            msg:'今天气温'
        }
    })
</script>

4.v-show

v-show接受一个表达式或一个布尔值。相当于给元素添加一个display属性

复制代码
<div id="app">
    <div v-show="conditional ==  'ok' ">{{msg}}</div>
    <input v-model="msg" type="text" />
</div>
<script>
    let vue = new Vue({
        el:"#app",
        data:{
            msg:'今天气温',
            conditional:'ok'
        }
    })
</script>

5.v-if、v-else、v-else-if

v-if 指令用于条件性地渲染一块内容。这块内容只会在指令的表达式返回 true 值的时候被渲染。

v-if和v-show有同样的效果,不同在于v-if是重新渲染,而v-show使用display属性来控制显示隐藏。频繁切换的话使用v-show减少渲染带来的开销。

说明一下:v-if可以单独使用,v-else 元素必须紧跟在带 v-if 或者 v-else-if 的元素的后面,否则它将不会被识别

v-if、v-else-if都是接受一个条件或布尔值,v-else不需要参数。比较简单,看看案例:
复制代码
<div id="app">
   	<div>
       小明评级为:<span v-if="score >= 90">优秀</span>
       <span v-else-if="score >= 80">良好</span>
       <span v-else-if="score >= 60">及格</span>
       <span v-else>不及格</span>
    </div>
</div>
<script>
     new Vue({
        el:"#app",
        data:{
            msg:'message',
            score:59,  
        },
    })
</script>

6.v-for

v-for可用来遍历数组、对象、字符串。

复制代码
<div id="app">
    <!-- obj -->
    <div v-for="(att,val) in obj">
        {{att}}:{{val}}
    </div>
    <!-- arr -->
    <div v-for="(val, index) in arr">
        {{index}}:{{val}}
    </div>
    <!-- string -->
    <div v-for="astr in str">
        {{astr}}
    </div>
</div>
<script>
    new Vue({
        el:"#app",
        data:{
            obj:{
                name:'kk',
                age:'18',
                hobby:'pingpong'
            },
            arr:[
                1,2,3,4,4,5,6,7
            ],
            str:'str hello world'
        },
    })
</script>

7.v-text和v-html

v-text是渲染字符串,会覆盖原先的字符串

v-html是渲染为html。{``{}}双大括号和v-text都是输出为文本。那如果想输出为html。使用v-html,如下例子

复制代码
<div id="app">
    <div>{{innerHtml}}</div>
    <div v-text="innerHtml"></div>
    <div v-html="innerHtml"></div>
</div>
<script>
    new Vue({
        el:"#app",
        data:{
            innerHtml:'<button>一个按钮</button>'
        }
    })
</script>

8.v-bind

可以将标签内的属性值解析成js代码,在标签的属性中使用v-bind,双引号里的内容会被当作js解析(只能解析变量或三元表达式),如下:

如果给属性值设置为一个变量,那么可以使用v-bind

可以缩写为**:<属性>="<变量>"**

复制代码
 <div id="app">
     <!-- 完整写法 v-bind: -->
     <div v-bind:class="className">"{{innerHtml}}"</div>
     <!-- 缩写 : -->
     <div :class="className">"{{innerHtml}}"</div>
     <div v-text="innerHtml"></div>
     <div v-html="innerHtml"></div>
</div>
<script>
    new Vue({
        el:"#app",
        data:{
            innerHtml:'<button>一个按钮</button>',
            className:'box'
        }
    })
</script>
相关推荐
kyriewen6 小时前
折腾了半年 AI 编程工作流,最后发现效率瓶颈是桌上那块屏幕
前端·javascript·ai编程
蜗牛前端6 小时前
codex 全流程开发上线的高颜值礼簿小程序
前端·微信小程序
大龄秃头程序员7 小时前
我在图文流 App 里落地双层缓存、弱网降级与 OOM 治理
前端
老王以为7 小时前
React Renderer 分离的多平台架构
前端·react native·react.js
hunterandroid7 小时前
Kotlin Coroutines 与 Flow:让异步任务更清晰
前端
Bigger8 小时前
从零搭建 AI 代码审查服务:一份前端也能看懂的 Python 学习笔记
前端·ci/cd·ai编程
lichenyang4538 小时前
JSAPI、NAPI、Biz、Imp:ASCF Demo 如何真正调用系统能力和 C++ 能力
前端
lichenyang4538 小时前
IPC、JSVM、UIThread、libuv:ASCF 架构图里最容易混的几个词
前端
用户059540174468 小时前
Redis记忆存储故障恢复测试踩坑实录:手动测试让我漏掉了2个一致性Bug
前端·css
用户2136610035728 小时前
Vue2脚手架工程化与Axios集成
前端·vue.js