Vue的小白之旅-简单指令(二)

引言

在上一篇文章中,我们讲了一些简单的指令,Vue小白之旅-简单指令(一),本文将继续为大家讲解Vue的一些重要的指令和他们的使用方法。

一、bind&on

1.v-bind

动态的绑定一个或多个 attribute,也可以是组件的 prop

在处理绑定时,Vue 默认会利用 in 操作符来检查该元素上是否定义了和绑定的 key 同名的 DOM property。如果存在同名的 property,则 Vue 会将它作为 DOM property 赋值,而不是作为 attribute 设置。这个行为在大多数情况都符合期望的绑定值类型,但是你也可以显式用 .prop.attr 修饰符来强制绑定方式。有时这是必要的,特别是在和自定义元素打交道时。

光看文档有点难以理解,简单的说就是在Vue中处理绑定时,默认会检查元素上是否有与绑定的属性同名的DOM属性。如果存在同名属性,Vue会将其作为DOM属性赋值,而不是作为属性设置。我们用实例来为大家展示。

  • v-bind 绑定class
html 复制代码
<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <style>
        .active{
            color: red;
        }
    </style>
</head>

<body>
    <div id="app"></div>
    <template id="my-app">
       <!-- <div :class="className">盖亚</div> -->
       <!-- isActive为true则添加类名 -->
       <!-- <div :class="{'active':isActive}">波比大王</div>
       <button @click="change">切换</button> -->
       <div :class="{'active':isActive,'title':true}">赛博朋克</div>
       <div class="lang" :class="className">鱼缸套装</div>
       <div class="baobao" :class="classObj">旭旭宝宝</div>
       <div class="baby" :class="getClass()">🐂( ఠൠఠ )</div>
       <div :class="['yu','baby',className]">🐟🐟🐟</div>
       <div :class="['long',isActive?'active':' ']">🐉🐉</div>
       <div :class="['niaoniao',{'active':isActive}]">🐥</div>
    </template>
    <script src="https://unpkg.com/vue@3/dist/vue.global.js"></script>
    <script>
        const App = {
            template: '#my-app',
            data() {
                return {
                    className:'username',
                    isActive:true,
                    classObj:{
                        active:true,
                        title:true
                    }
                }
            },
            methods:{
                change(){
                    this.isActive = !this.isActive
                },
                getClass(){
                    return 'niuniu'
                }
            }
        }
        Vue.createApp(App).mount('#app')
    </script>
</body>

</html>

我们在这里可以使用V-bind来绑定在数据源data中的属性,将效果添加到绑定的div中。v-bind可以省略为一个冒号:

例如:

html 复制代码
<div class="lang" :class="className">鱼缸套装</div>

在这段代码中,我们直接绑定了数据源中的className属性

html 复制代码
<div :class="{'active':isActive,'title':true}">赛博朋克</div>

在这段代码中,isActive为布尔值,如果true,则为div添加active

如果我们需要添加多个样式,可以使用数组的方式来实现这个效果

html 复制代码
<div :class="['yu','baby',className]">🐟🐟🐟</div>
  • v-bind 绑定style

style的绑定规则和class一样 ,可以通过这些方式绑定

html 复制代码
    <div :style="{color: fontColor,fontSize:fontSize}">凡凡真帅</div>
    <div :style="styleObj">易峰</div>
    <div :style="[styleObj,styleObj2]">蔡徐坤</div>
  1. v-on

v-on看似新鲜,其实我们早就只用过他,聪明的掘友们应该已经发现了...就是绑定点击事件时使用的@

html 复制代码
<button v-on:click="handle">按钮</button>
<button v-on:click="add">{{count}}</button>

二、条件渲染

1.v-if

假设有一个按钮,我点击他,任何页面上的内容或者数据随之改变,我们可以怎么做呢?在没有v-if以前,我们也许会声明一个函数,任何给按钮装上点击事件,设置默认值,如果改变,就在数据源中修改数据以达到想要的效果,那我们使用v-if也可以完成这样的操作,并且使得操作更加简单。

html 复制代码
<h2 v-if="count===1">hello CXK</h2>
<h2 v-else-if="count===2">こんにちは,kk</h2>
<h2 v-else>你好,坤坤</h2>
<button @click="change">切换</button>

和其他语言一样,我们这里如果要切换多个选项,可以使用v-else-if和v-else,我们绑定了change方法,我们来看看change()

js 复制代码
 change() {
this.count++
 if(this.count === 3){
this.count = 0
 }
}

每点击一次,让count++,加到3置为0,如果满足v-if中的条件,则div显示,反之则不显示,于是我们就实现了切换效果。掘友们,是不是很方便迅捷。

2.v-show

v-show实现的效果和v-if差不多

html 复制代码
<!-- show为css结构添加display:none,而if直接干掉 -->
        <!-- 权限问题用if -->
        <h2 v-show="isShow">hello CXK</h2>
        
        <button @click="change">切换</button>

当v-show后面的isShowfalse时不显示。

3.if和show的区别

既然if和show都可以让我们的内容展示或者消失,那他们之间到底有什么区别呢?

v-show让div消失的手段是让display为none,但if是直接将div干掉。

当涉及到权限操作的时候,我们要使用v-if,若使用v-show,则可以直接在浏览器上修改dispaly,将内容展示出来。

三、列表渲染

1.v-for

想必大家都写过将数据动态添加li再添加到ul中的例子

html 复制代码
<ul id="myList"> </ul> 
<button onclick="addItem()">添加</button> 
<script> function addItem() { 
var ul = document.getElementById("myList"); 
for (var i = 1; i <= 5; i++) { 
var li = document.createElement("li");
li.innerText = "Item " + i; ul.appendChild(li); 
} 
} 
</script>

我们要先获取DoM结构,再遍历循环添加。v-for可以更快的实现这个效果。

html 复制代码
<body>
    <div id="app"></div>
    <template id="my-app">
        <h2>歌曲列表</h2>
        <ul>
            <li v-for="(item,index) in songs" :key="index">{{index+1}}--{{item}} 
                <a href="#" @click="del(index)">X</a></li>
        </ul>
    </template>
    <script>
        const App = {
            template: '#my-app',
            data(){
                return {
                    songs:[
                        '夜曲',
                        '依然范小勤',
                        '等你下课',
                        '说好不哭'
                    ]
                }
            },
            methods:{
                del(i){
                    console.log('删除',i);
                    this.songs.splice(i,1)
                }
            }
        }
        Vue.createApp(App).mount('#app')
    </script>
</body>

在下面这段代码中,v-for后面接(item,index) in songs,item代表遍历到的每一个元素,index代表他们的下标,有了下标以后我们可以更加方便的去进行更多的操作。:key是用来给每个列表项指定一个唯一的标识符。它的作用是为 Vue 提供一个依据,用于追踪和管理每个列表项的状态。通过设置 :key,Vue 可以根据这个值来高效地更新和重新排序列表项,而不需要重新渲染整个列表。

html 复制代码
<li v-for="(item,index) in songs" :key="index">{{index+1}}--{{item}}

同时在进行删除操作的时候,可以传入index的实参来实现删除操作。

结尾

在本文中,我们介绍了 Vue 中的简单指令,并学习了如何使用 v-bindv-onv-if 等指令来操作 DOM、响应事件和条件渲染。

Vue 的指令为我们提供了一种简洁而强大的方式来处理视图层的交互和渲染逻辑。通过灵活运用这些指令,我们可以轻松地实现各种复杂的功能,提升用户体验。

希望通过本文的介绍,你对 Vue 的指令有了初步的了解,并能够开始尝试在自己的项目中使用它们。如果你还有任何疑问或需要进一步了解,请查阅 Vue 官方文档,那里有更详细的指令说明和示例。

祝你在 Vue 的学习和开发过程中取得成功!

相关推荐
冯宝宝^几秒前
基于mongodb+flask(Python)+vue的实验室器材管理系统
vue.js·python·flask
dot.Net安全矩阵7 分钟前
.NET内网实战:通过命令行解密Web.config
前端·学习·安全·web安全·矩阵·.net
叫我:松哥12 分钟前
基于Python flask的医院管理学院,医生能够增加/删除/修改/删除病人的数据信息,有可视化分析
javascript·后端·python·mysql·信息可视化·flask·bootstrap
Hellc00719 分钟前
MacOS升级ruby版本
前端·macos·ruby
前端西瓜哥28 分钟前
贝塞尔曲线算法:求贝塞尔曲线和直线的交点
前端·算法
又写了一天BUG28 分钟前
npm install安装缓慢及npm更换源
前端·npm·node.js
cc蒲公英42 分钟前
Vue2+vue-office/excel 实现在线加载Excel文件预览
前端·vue.js·excel
Java开发追求者42 分钟前
在CSS中换行word-break: break-word和 word-break: break-all区别
前端·css·word
好名字08211 小时前
monorepo基础搭建教程(从0到1 pnpm+monorepo+vue)
前端·javascript
森叶1 小时前
Electron-vue asar 局部打包优化处理方案——绕开每次npm run build 超级慢的打包问题
vue.js·electron·npm