Vue基础(一)

news2024/10/7 10:22:26

前言
Vue (读音 /vjuː/,类似于 view) 是一套用于构建用户界面的渐进式框架。与其它大型框架不同的是,Vue 被设计为可以自底向上逐层应用。Vue 的核心库只关注视图层,不仅易于上手,还便于与第三方库或既有项目整合。
更多的学习请查看Vue官网:Vue官网教程

Vue基础(一)

1、Mustache语法

将data数据插入进html中

<body>
<div id="app">
    {{ message }}
    <!--响应式数据-->
    <p>{{count + 1}}</p>
</div>
</body>
<script>
    var app = new Vue({
        el: '#app',
        data: {
            message: 'Hello Vue!',
            count : 1
        }
    })
</script>

2、v-once

v-once表示该元素和组件只渲染一次,不会随着数据的改变而改变。

<body>
<div id="app">
    {{ message }}
    <!--响应式数据-->
    <p>{{count + 1}}</p>
    <p v-once>{{message2}}</p>
</div>
</body>
<script>
    var app = new Vue({
        el: '#app',
        data: {
            message: 'Hello Vue!',
            message2 : 'hello world',
            count : 1
        }
    })
</script>

在浏览器控制台修改message和message2的值,预期结果,没有被v-once控制message则重新渲染,message2则不会渲染。如下图:
在这里插入图片描述

3、v-html

在某些情况下,我们从服务器请求的数据可能是html代码,那么如何解析并展示在页面,可以使用v-html
我们看看一段相同html代码字符串,使用v-html和不使用的区别在哪:

<body>
<div id="app">
   <p>{{link}}</p>
   <p v-html="link"></p>
</div>
</body>
<script>
    var app = new Vue({
        el: '#app',
        data: {
            link : '<a href="http://www.baidu.com">百度一下</a>'
        }
    })
</script>

在这里插入图片描述

4、v-text

v-text和Mustache类似,是将data中的数据展示在页面上,v-text一般接收string类型

<div id="app">
   {{message}}
    <p v-text="message"></p>
</div>
</body>
<script>
    var app = new Vue({
        el: '#app',
        data: {
            message : 'hello world'
        }
    })
</script>

效果如下图:
在这里插入图片描述

5、v-cloak

v-cloak也称斗篷指令,v-cloak指令解决了插值表达式闪烁问题
插值表达式闪烁问题:指html页面加载时先构建dom,再加载vue。在vue初始化完成前,dom将{{}}代码解析为文本,在vue初始化后 才会把{{}}解析成vue的语法。此时列表渲染会有短暂的一闪的情况。

<div id="app">
   {{message}}
    <p v-cloak>hello {{message}}</p>
</div>
</body>
<script>
    var app = new Vue({
        el: '#app',
        data: {
            message : 'hello world'
        }
    })
</script>

6、v-pre

v-pre用于跳过该元素以及其子元素的编译过程

<body>
<div id="app">
   {{message}}
    <p v-pre>{{message}}</p>
</div>
</body>
<script>
    var app = new Vue({
        el: '#app',
        data: {
            message : 'hello world'
        }
    })
</script>

效果如下图:
在这里插入图片描述

7、v-bind

动态绑定元素属性
常见场景:动态绑定图片地址、网址

<body>
<div id="app">
   <a v-bind:href="link">百度一下</a><br>
   <img v-bind:src="img"/>
</div>
</body>
<script>
    var app = new Vue({
        el: '#app',
        data: {
            link : 'http://www.baidu.com',
            img : 'https://gimg2.baidu.com/image_search/src=http%3A%2F%2Fimg.zcool.cn%2Fcommunity%2F011a5357b64c620000018c1b9e7e67.png%401280w_1l_2o_100sh.png&refer=http%3A%2F%2Fimg.zcool.cn&app=2002&size=f9999,10000&q=a80&n=0&g=0n&fmt=jpeg?sec=1633940980&t=df19327e66e6b9f7e4d7dffd64efa101'
        }
    })
</script>

在这里插入图片描述

v-bind语法糖

v-bind的简写模式如下:

<body>
<div id="app">
   <a :href="link">百度一下</a><br>
</div>
</body>
<script>
    var app = new Vue({
        el: '#app',
        data: {
            link : 'http://www.baidu.com',
        }
    })
</script>

v-bind绑定class

在许多场景下,我们需要动态的切换class,因此可以使用v-bind来进行动态绑定,绑定class有两种方式:1、对象语法 2、数组语法

对象语法:

<style>
    .color {
        color: red;
    }

    .size {
        font-size: 50px;
    }

    .margin-left {
        margin-left: 100px;
    }
</style>
<body>
<div id="app">
    <!--绑定单一class-->
    <p :class="{'color':isActive}">{{message}}</p>
    <!--传入多个值-->
    <p :class="{'color':isActive,'size':isSizeChange}">{{message}}</p>
    <!--与普通类并存,当isActive为true时,相当于:  class="margin-left color"  -->
    <p class="margin-left" :class="{'color':isActive}">{{message}}</p>
    <!--通过计算属性-->
    <p :class=activeClass>{{message}}</p>
</div>
</body>
<script>
    var app = new Vue({
        el: '#app',
        data: {
            message: 'hello world',
            isActive: true,
            isSizeChange: true,
            classes: {}
        },
        computed: {
            activeClass: function () {
                return {
                    color: this.isActive,
                    size: this.isSizeChange
                }
            }
        }

    })
</script>

如下图:
在这里插入图片描述

数组语法:

<style>
    .color {
        color: red;
    }

    .size {
        font-size: 50px;
    }

    .margin-left {
        margin-left: 100px;
    }
</style>
<body>
<div id="app">
    <!--一个或多个值-->
    <p :class="['color','size']">{{message}}</p>
    <!--与普通类叠加-->
    <p class="margin-left" :class="['color','size']">{{message}}</p>
    <!--通过计算属性绑定-->
    <p class="margin-left" :class="activeClass">{{message}}</p>
</div>
</body>
<script>
    var app = new Vue({
        el: '#app',
        data: {
            message: 'hello world',
            classes: []
        },
        computed: {
            activeClass: function () {
                return ['color', 'size']
            }
        }
    })
</script>

如下图:
在这里插入图片描述

v-bind绑定style

<body>
<div id="app">
    <!--1、内联式-->
    <p :style="{fontSize:fontSize+'px',color: color}">内联式</p>
    <!--2、绑定样式对象-->
    <p :style="styleObj">绑定样式对象</p>
    <!--3、多样式绑定-->
    <p :style="[styleObj,styleObj1]">多样式绑定</p>
</div>
</body>
<script>
    var app = new Vue({
        el: '#app',
        data: {
            message: 'hello world',
            fontSize: 20,
            color: 'red',
            styleObj:{
                fontSize : '20px',
                color : 'blue'
            },
            styleObj1:{
                'margin-left' : '20px'
            },
        },
        computed: {
            activeClass: function () {
                return ['color', 'size']
            }
        }
    })
</script>

如下图:
在这里插入图片描述

8、computed计算属性

计算属性的作用:通常来说我们使用插值语法后是直接在页面上显示我们的数据,但是在某些场景下我们需要对数据进行转换后显示,或者多个数据结合在一起
这时我们就可以使用计算属性computed

<body>
<div id="app">
    <p>{{fullWord}}</p>
</div>
</body>
<script>
    var app = new Vue({
        el: '#app',
        data: {
            firstWord: 'hello',
            secondWord: ' world'
        },
        computed: {
            fullWord: function () {
                return this.firstWord + this.secondWord
            }
        }
    })
</script>

如下图:
在这里插入图片描述

computed计算属性的优点–缓存

上述例子中,this.firstWord + this.secondWord字符串拼接得到想要的结果字符串,computed和method也可以实现这个效果,但是如果处理的次数多了,两者效率也是有很大区别的

<body>
<div id="app">
    <p>{{fullWord}}</p>
    <p>{{fullWord}}</p>
    <p>{{fullWord}}</p>
    <div>{{getFullWord()}}</div>
    <div>{{getFullWord()}}</div>
    <div>{{getFullWord()}}</div>
</div>
</body>
<script>
    var app = new Vue({
        el: '#app',
        data: {
            firstWord: 'hello',
            secondWord: ' world'
        },
        methods: {
            getFullWord() {
                console.log('调用了getFullWord')
                return this.firstWord + this.secondWord
            }
        },
        computed: {
            fullWord: function () {
                console.log('调用了fullWord')
                return this.firstWord + this.secondWord
            }
        }
    })
</script>

通过查看浏览器控制台,发现使用computed仅调用了一次,而method则调用了三次,即可验证了computed在执行相同的操作时是会先从缓存中取数据如下图:
在这里插入图片描述

9、v-on

v-on作用是绑定事件监听器,譬如说可以绑定一个点击事件,当点击时会触发点击事件

<body>
<div id="app">
    <div>
        <p>{{count}}</p><br/>
        <button v-on:click="add">+</button>
        <button v-on:click="del">-</button>
    </div>
</div>
</body>
<script>
    var app = new Vue({
        el: '#app',
        data: {
            count: 0
        },
        methods: {
            add() {
                this.count ++
            },
            del(){
                this.count --
            }
        }
    })
</script>

如下图:
在这里插入图片描述

v-on语法糖

v-on:click="add"可以写成@click=“add”

<body>
<div id="app">
    <div>
        <p>{{count}}</p><br/>
        <button @click="add(2,$event)">+</button>
        <button @click="del(2,$event)">-</button>
    </div>
</div>
</body>
<script>
    var app = new Vue({
        el: '#app',
        data: {
            count: 0
        },
        methods: {
	    //带参数
            add(num,even) {
                console.log(even)
                this.count += num
            },
            del(num,even){
                console.log(even)
                this.count -= num
            }
        }
    })
</script>

如下图:
在这里插入图片描述

对于v-on修饰符等其他知识请到官网教程:Vue教程

10、v-if、v-else-if、v-else

这三条指令和我们学习的if,else if,else相似
Vue的条件指令可以根据表达式的值在DOM中渲染或销毁元素或组件

<body>
<div id="app">
    <div v-if="count > 90">显示{{count}}</div>
    <div v-else-if="count < 60">显示{{count}}</div>
    <div v-else>显示{{count}}</div>
</div>
</body>
<script>
    var app = new Vue({
        el: '#app',
        data: {
            count: 88
        }
    })
</script>

如下图:
在这里插入图片描述

11、v-show

v-show的用法和v-if非常相似,也用于决定一个元素是否渲染

v-if和v-show区别
元素显隐:
v-if是通过控制dom节点的存在与否来控制元素的显隐;
v-show是通过设置DOM元素的display样式,block为显示,none为隐藏;
编译过程:
v-if切换有一个局部编译/卸载的过程,切换过程中合适地销毁和重建内部的事件监听和子组件;v-show只是简单的基于css切换
性能消耗:v-if有更高的切换消耗;v-show有更高的初始渲染消耗

<body>
<div id="app">
    <div v-show="count < 90">显示{{count}}</div>
</div>
</body>
<script>
    var app = new Vue({
        el: '#app',
        data: {
            count: 88
        }
    })
</script>

12、v-for

当我们有一组数据需要进行渲染时,我们就可以使用v-for来完成

<body>
<div id="app">
    <!--数组-->
    <div v-for="(item,index) in movies">电影序号:{{index}} 电影名:{{item}}</div>
    <!--对象-->
    <div v-for="(value,key,index) in person">
        {{key}}--{{value}}--{{index}}
    </div>
</div>
</body>
<script>
    var app = new Vue({
        el: '#app',
        data: {
            movies : [
                '大话西游',
                '无间道',
                '美人鱼'
            ],
            person: {
                name : 'zhangsan',
                age : 12,
                sex : 'male'
            }
        }
    })
</script>

如下图:
在这里插入图片描述

注意:官方推荐我们在使用v-for时,给对应的元素或组件添加上一个:key属性。这与Vue的虚拟DOM的Diff算法有关系。key的作用主要是为了高效的更新虚拟DOM。

13、表单绑定v-model

表单控件在实际开发中是非常常见的。特别是对于用户信息的提交,需要大量的表单。Vue中使用v-model指令来实现表单元素和数据的双向绑定。

<body>
<div id="app">
    <input v-model="message"/><br/>
    <div>{{message}}</div>
</div>
</body>
<script>
    var app = new Vue({
        el: '#app',
        data: {
           message: 'hello world'
        }
    })
</script>

如下图:
在这里插入图片描述

v-model原理

v-model其实是一个语法糖,它的背后本质上是包含两个操作:
1.v-bind绑定一个value属性
2.v-on指令给当前元素绑定input事件

v-model:radio

<body>
<div id="app">
    <label>
        <input value="" type="radio" v-model="sex" id="male"></input>
    </label>
    <label>
        <input value="" type="radio" v-model="sex" id="female"></input>
    </label>
    <p v-model="sex">你的选择是:{{sex}}</p>
</div>
</body>
<script>
    var app = new Vue({
        el: '#app',
        data: {
           sex: ''
        }
    })
</script>

如下图:
在这里插入图片描述

v-model:checkbox

<body>
<div id="app">
    <input type="checkbox" v-model="checked" :value="哈哈哈">哈哈哈</input>
    {{checked}}</br>
    <input type="checkbox" v-model="hobbies" value="篮球">篮球</input>
    <input type="checkbox" v-model="hobbies" value="足球">足球</input>
    <input type="checkbox" v-model="hobbies" value="羽毛球">羽毛球</input>
    {{hobbies}}
</div>
</body>
<script>
    var app = new Vue({
        el: '#app',
        data: {
           checked: '',
           hobbies: []
        }
    })
</script>

如下图:
在这里插入图片描述

v-select

<div id="app">
    <select v-model="hobby">
        <option value="篮球">篮球</option>
        <option value="足球">足球</option>
        <option value="羽毛球">羽毛球</option>
    </select>
    {{hobby}}
    <select v-model="hobbies" multiple>
        <option value="篮球">篮球</option>
        <option value="足球">足球</option>
        <option value="羽毛球">羽毛球</option>
    </select>
    {{hobbies}}
</div>
</body>
<script>
    var app = new Vue({
        el: '#app',
        data: {
           hobby: '篮球',
           hobbies: []
        }
    })
</script>

如下图:
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/679657.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【Vue2.0源码学习】内置组件篇-keep-alive

文章目录 1. 前言2 用法回顾3. 实现原理propscreateddestroyedmountedrender 4. 生命周期钩子5. 总结 1. 前言 <keep-alive> 是 Vue 实现的一个内置组件&#xff0c;也就是说 Vue 源码不仅实现了一套组件化的机制&#xff0c;也实现了一些内置组件&#xff0c;关于<k…

区块链系统探索之路:比特币核心的编译和探索

前几节我们研究了椭圆曲线&#xff0c;有限域等比特币和区块链所依赖的底层算法。问题在于这些算法不是独立存在&#xff0c;而是作为模块嵌入到整个区块链的体系之中。因此不了解区块链的体系组成或应用场景&#xff0c;那么我们就很难理解这些算法衍生出来的概念或者基于他们…

【硬件1】platform/i2c总线

文章目录 1.platform总线&#xff1a;相对于USB/PCI/I2C/SPI等物理总线来说&#xff0c;platform总线是一种虚拟的总线&#xff0c;实际并不存在&#xff0c;总线的工作就是就是完成总线下的设备和驱动之间的匹配。也就是在左手中找到与右手相匹配的设备驱动&#xff0c;并完成…

基于Java+Springboot的智能图书馆座位管理系统设计和实现

博主介绍&#xff1a;擅长Java、微信小程序、Python、Android等&#xff0c;专注于Java技术领域和毕业项目实战✌ &#x1f345;文末获取源码联系&#x1f345; &#x1f447;&#x1f3fb; 精彩专栏推荐订阅&#x1f447;&#x1f3fb; 不然下次找不到哟 Java项目精品实战案例…

MySQL实战解析底层---为什么只查一行的语句,也执行这么慢

目录 前言 第一类&#xff1a;查询长时间不返回 第二类&#xff1a;查询慢 前言 一般情况下&#xff0c;如果说查询性能优化&#xff0c;首先会想到一些复杂的语句&#xff0c;想到查询需要返回大量的数据但有些情况下&#xff0c;“查一行”&#xff0c;也会执行得特别慢这…

第11讲:BootService 核心实现解析,Agent 的“地基”原来是这样的

之前介绍了 ServiceManager 加载并初始化 BootService 实现的核心逻辑。下图展示了 BootService 接口的所有实现类&#xff0c;本课时将深入分析这些 BootService 实现类的具体逻辑&#xff1a; 网络连接管理 在前面的介绍中提到 SkyWalking Agent 会定期将收集到的 JVM 监控和…

基于Java+Swing实现雷电小游戏

基于JavaSwing实现雷电小游戏 一、系统介绍二、功能展示三、其他系统四、获取源码 一、系统介绍 基于java的雷电游戏基本功能包括&#xff1a;敌方飞机随机飞行、我方飞机手动控制飞行&#xff0c;射击比拼&#xff0c;游戏闯关等。本系统结构如下&#xff1a; &#xff08;1&…

Java中线程的创建与使用、Thread类的常用方法

1、什么是进程与线程 1.1 含义 1.1.1 进程 进程是指正在运行的程序的实例。在操作系统中&#xff0c;一个进程代表了一个正在执行的程序&#xff0c;它包括了程序的代码、数据以及程序执行时所需要的系统资源。 最直观的就是我们任务管理器&#xff1a; 任务管理器中的每一…

Centos7安装和配置Mysql5.7

第一步&#xff1a;获取mysql YUM源 进入mysql官网获取RPM包下载地址&#xff0c;下面就是mysql5.7的Yum仓库的rpm包&#xff1a; mysql5.7链接地址&#xff1a; https://dev.mysql.com/get/mysql57-community-release-el7-11.noarch.rpm 第二步&#xff1a;下载和安装mysql…

卷福的十年同学会

1.一通电话 某个上班日的午休时间里&#xff0c;小卷正趴在办公桌玩着手机准备睡一会&#xff0c;“叮咚”&#xff0c;一条微信消息弹出来&#xff0c;是大学的班群消息。 “五一期间大家来学校聚一下吧&#xff0c;今年是我们成为同学的十年了&#xff0c;大家提前报名哦&a…

Qt设置软件启动动画(支持图片和视频俩种方式)

目录 软件启动动画效果静态背景动态背景 程序启动动画QSplashScreen启动时加载静态图片启动时加载视频动画将启动动画置于所有窗口顶层 软件启动动画效果 先来看效果。下面录制了加载图片和gif动图的俩种效果。 静态背景 动态背景 这里我加载了一个gif的动图&#xff0c;你也…

AMBA AHB的burst termination

前言 在AMBA AHB协议中&#xff0c;AHB master可以用burst传输连续取多笔数据。AHB定义了4、8和16拍的burst传输、未定义长度的burst传输和单次传输。Burst传输中支持incrementing和wrapping。 Incrementing burst用于访问顺序的memory地址&#xff0c;burst中每个拍的地址都…

数据压缩的常用手段以及方法

0. 简介 之前我们在《经典文献阅读之–R-PCC(基于距离图像的点云压缩方法)》中提到了&#xff0c;我们可以通过一些算法层面来完成数据的压缩&#xff0c;而其实更简单或者说更直接的方法就是使用half这种形式来完成数据压缩。 1. half和float Half是用16位表示浮点数的一种…

什么是 FL Studio?2023年最新版 FL Studio21.0.3.3517中文版图文安装教程

什么是 FL Studio&#xff1f; FL Studio 是一个数字音频工作站 (DAW)。该软件借助各种编辑工具、插件和效果&#xff0c;让您可以录制、混音和掌握高度复杂的音乐作品。FL Studio 还允许您注册和编辑 MIDI 文件&#xff0c;您可以在众多可用乐器之一上演奏这些文件。FL Studi…

树莓派 python3.9降级为python3.7

今天烧录了一个官方烧录器中的最新的镜像&#xff0c;打开之后python的版本是3.9的&#xff0c;之前做的一些东西都是基于python3.7的&#xff0c;再重新架构十分麻烦&#xff0c;于是干脆就把python3.9进行降级&#xff0c;降为python3.7. 这个镜像不像之前的一些镜像&#x…

通用商城项目(上)

通用型产品&#xff08;电商&#xff09;发布解决方案落地实现&#xff08;基于分布式微服务技术栈&#xff1a; SpringBootSpring CloudSpring Cloud Alibaba VueElementUl MyBatis-Plus MySQL Git Maven Linux Nginx Docker 前后端分离&#xff09; 项目技术栈和前置技术 项…

【软件设计师暴击考点】操作系统知识高频考点暴击系列【一】

&#x1f468;‍&#x1f4bb;个人主页&#xff1a;元宇宙-秩沅 &#x1f468;‍&#x1f4bb; hallo 欢迎 点赞&#x1f44d; 收藏⭐ 留言&#x1f4dd; 加关注✅! &#x1f468;‍&#x1f4bb; 本文由 秩沅 原创 &#x1f468;‍&#x1f4bb; 收录于专栏&#xff1a;软件…

Web网页制作-知识点(1)——HTML5介绍、HTML5的DOCTYPE声明、HTML基本骨架、标题标签、段落 换行、水平线图片图片路径、超链接

目录 HTML5介绍 HTML5的DOCTYPE声明 HTML基本骨架 标题标签 段落、换行、水平线 图片 图片路径* 超链接 HTML5介绍 HTML5是用来描述网页的一种语言&#xff0c;被称为超文本标记语言。用HTML5编写的文件&#xff0c;后缀以.html结尾 HTML是一种标记语言&#xff0c;标…

自动化神器AutoIt,告别重复劳动

概要 计算机已经进入大众家庭多年&#xff0c;它给我们带来了便利&#xff0c;却也带来了枯燥、重复、机械的重复工作。今天&#xff0c;我要和大家分享一款自动化工具AutoIt&#xff0c;它能够帮助你告别这些烦恼&#xff0c;并提高工作效率。 AutoIt 是一款完全免费的Windows…

leetcode82. 删除排序链表中的重复元素 II(java)

删除排序链表中的重复元素 leetcode82. 删除排序链表中的重复元素 II题目描述一次遍历代码演示 链表专题 leetcode82. 删除排序链表中的重复元素 II 来源&#xff1a;力扣&#xff08;LeetCode&#xff09; 链接&#xff1a;https://leetcode.cn/problems/remove-duplicates-fr…