Vue的学习(一)

news2024/11/14 20:03:14

目录

一、Vue的介绍

二、指令

1.v-text

2.v-html

3.v-show

4.v-if

1)v-if与v-show的区别

5.v-else

6.v-else-if

7.v-for

1)v-for 与v-if的优先级

8.v-on:click

9.v-bind

10.v-model

 三、表单修饰符

1.    .lazy 修饰符

2.  .number修饰符 

3.  .trim修饰符

四、MVVM的介绍

1. View(视图):

2. ViewModel(视图模型):

3. Model(模型):

五、结束语


一、Vue的介绍

Vue是一款用于构建用户界面的开源JavaScript框架。它由尤雨溪开发并于2014年首次发布。Vue被设计成渐进式的框架,可以逐步应用到现有项目中,或者作为一个单独的工具进行开发。

Vue使用了虚拟DOM来进行高效的DOM操作,并采用了MVVM(Model-View-ViewModel)的架构模式,使得开发者可以更轻松地管理和更新界面的状态。

Vue具有一系列的特性和功能,包括响应式数据绑定、组件化开发、路由管理、状态管理等。开发者可以通过使用Vue的指令和插件来简化开发过程,并且可以构建可复用的组件来提高代码的可维护性和复用性。

Vue有着广泛的社区支持和文档资源,并且得到了许多开发者和公司的认可和使用。它在性能、灵活性和易用性方面都表现出色,因此成为了众多开发者的首选框架之一。

二、指令

1.v-text

<!DOCTYPE html>
<html lang="zh-CN">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>v-text</title>
    <!-- 首先我们需要引入vue文件,大家可以在vue官方下载一下 -->
    <script src="./js/vue.js"></script>
</head>

<body>
    <!-- 1.然后我们新建一个id为app的外层盒子 -->
    <div id="app">
        <!-- 3.加上span标签 并使用v-text指令 然后自定义一个msg的键名  -->
        <span v-text="msg"></span>
        <span>{{msg}}</span>
    </div>

    <script>
        //2.创建vue实例
        const app = new Vue({
            el: "#app",
            data: {
                //4.给msg进行赋值
                msg: "李华爱写信"
            }
        })
    </script>
</body>

</html>

运行结果如下

2.v-html

注意:此方法不可以用插值表达式渲染到页面

<!DOCTYPE html>
<html lang="zh-CN">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>v-html</title>
    <script src="./js/vue.js"></script>
</head>

<body>
    <div id="app">
        <div v-html="txt"></div>
    </div>
    <script>
        const app = new Vue({
            el: "#app",
            data: {
                txt: `<h1>我爱吃西瓜</h1>`
            }
        })
    </script>
</body>

</html>

 运行结果

3.v-show

 v-show来控制元素的显示与隐藏 如果条件为真 则显示该元素,如果条件为假 则通过display:none 让当前元素隐藏是css样式 display:none与display:block之间的切换

<!DOCTYPE html>
<html lang="zh-CN">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>v-show</title>
    <script src="./js/vue.js"></script>
</head>

<body>
    <div id="app">
        <div v-show="ok">hello world</div>
    </div>
    <script>
        const app = new Vue({
            el: "#app",
            data: {
                ok: true
            }
        })
    </script>
</body>

</html>

 运行结果

4.v-if

1)v-if与v-show的区别

v-if来控制元素的显示与隐藏,真正的条件渲染,如果条件为真 则创建当前节点 如果条件为假则销毁该节点(这也是v-show与v-if的区别)

 v-show来控制元素的显示与隐藏 如果条件为真 则显示该元素,如果条件为假 则通过display:none 让当前元素隐藏是css样式 display:none与display:block之间的切换

<!DOCTYPE html>
<html lang="zh-CN">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>v-if</title>
    <script src="./js/vue.js"></script>
</head>

<body>
    <div id="app">
        <div v-if="score>=90">v-if来控制元素的显示与隐藏,真正的条件渲染,如果条件为真 则创建当前节点 如果条件为假则销毁该节点</div>
    </div>
    <script>
        const app = new Vue({
            el: "#app",
            data: {
                score: 95
            }
        })
    </script>
</body>

</html>

 运行结果

5.v-else

限制:前一兄弟元素必须有 v-if 或 v-else-if

<!DOCTYPE html>
<html lang="zh-CN">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>v-if</title>
    <script src="./js/vue.js"></script>
</head>

<body>
    <div id="app">
        <div v-if="score>=90">v-if来控制元素的显示与隐藏,真正的条件渲染,如果条件为真 则创建当前节点 如果条件为假则销毁该节点</div>
        <div v-else>v-else指令</div>
    </div>
    <script>
        const app = new Vue({
            el: "#app",
            data: {
                score: 80
            }
        })
    </script>
</body>

</html>

 运行结果

此时只运行出v-else这个div中的内容,因为下面的score赋值为80 不满足第一个v-if的条件所以并没有渲染出来。

6.v-else-if

限制:前一兄弟元素必须有 v-if 或 v-else-if

<!DOCTYPE html>
<html lang="zh-CN">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>v-if</title>
    <script src="./js/vue.js"></script>
</head>

<body>
    <div id="app">
        <div v-if="score>=90">v-if来控制元素的显示与隐藏,真正的条件渲染,如果条件为真 则创建当前节点 如果条件为假则销毁该节点</div>
        <div v-else-if="score<90&&score>=80">v-else-if指令</div>
        <div v-else>v-else指令</div>
    </div>
    <script>
        const app = new Vue({
            el: "#app",
            data: {
                score: 80
            }
        })
    </script>
</body>

</html>

 运行结果

如果score大于等于九十那么显示第一个div中的内容,如果小于90并且大于等于80则显示第二个div中的内容,否则显示最后一个。

此时我们在data数据中score为80 ,那么就显示为v-else-if指令的内容。

7.v-for

v-for指令是Vue.js中常用的指令之一,用于循环渲染数组或对象的元素。

1)v-for 与v-if的优先级

v-if和v-for指令都可以用于Vue模板中进行条件渲染。然而,当它们同时存在时,v-for具有比v-if更高的优先级。

具体来说,当v-for和v-if同时存在于同一个元素上时,v-for会先被解析和执行,而v-if会应用于每个v-for的项。换句话说,v-if的条件会在循环中的每个项上被检查,并决定是否渲染该项。

<!DOCTYPE html>
<html lang="zh-CN">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <script src="./js/vue.js"></script>
</head>

<body>
    <div id="app">
        <div v-for="item in obj">{{item.name}}----{{item.age}}----{{item.sex}}</div>
    </div>
    <script>
        const app = new Vue({
            el: "#app",
            data: {
                obj: [
                    { name: "李华1", age: 12, sex: "男" },
                    { name: "李华2", age: 13, sex: "女" },
                    { name: "李华3", age: 13, sex: "男" },
                    { name: "李华4", age: 15, sex: "女" },
                ]
            }
        })
    </script>
</body>

</html>

运行结果

8.v-on:click

这里我么做一个点击然后让数量加一,先写一个按钮,加上v-on的指令。

v-on:click可以简写为@click

<!DOCTYPE html>
<html lang="zh-CN">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <script src="./js/vue.js"></script>
</head>

<body>
    <div id="app">
        <button v-on:click="fn">点我</button>
        <p>数量:{{count}}</p>


    </div>
    <script>
        const app = new Vue({
            el: "#app",
            data: {
                count: 0,
                pirce: 20
            },
            methods: {
                fn() {
                    console.log("this", this)
                    console.log("app", app)
                    app.count++
                }
            }
        })

    </script>
</body>

</html>

运行结果

点击数量加1

9.v-bind

v-bind指令 用来绑定属性 简写为:

<!DOCTYPE html>
<html lang="zh-CN">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <script src="./js/vue.js"></script>
    <style>
        .box {
            padding: 10px;
            margin: 10px 0;
            border: 1px solid red;
        }
    </style>

</head>

<body>
    <div id="app">
       
        <div class="box">
            <div v-bind:title="msg">v-bind指令 用来绑定属性 简写为:</div>
            <div :style="obj">v-bind指令 绑定style</div>
        </div>
    iv>
    </div>
    <script>
        const app = new Vue({
            el: "#app",
            data: {
                

                msg: "鼠标悬停显示当前内容",
                obj: {
                    background: "red"
                },
              
            },
           
        })
    </script>
</body>

</html>

运行结果

10.v-model

我们使用v-model绑定input中输入的值,然后在p标签中使用插值表达式释放出来,这样在input中输入的内容就展示到p标签中了,实现了数据的双向绑定。

<!DOCTYPE html>
<html lang="zh-CN">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <script src="./js/vue.js"></script>
    <style>
        .box {
            padding: 10px;
            margin: 10px 0;
            border: 1px solid red;
        }
    </style>

</head>

<body>
    <div id="app">
      
      
        <div class="box">
            <div>v_model 绑定表单 双向数据绑定</div>
            <input type="text" v-model="ipt">
            <p>input输入值:{{ipt}}</p>
        </div>
       
       
    </div>
    <script>
        const app = new Vue({
            el: "#app",
          
            data: {
               
                ipt: '',
            },
               
            },
           
        })
    </script>
</body>

</html>

运行结果

 三、表单修饰符

1.    .lazy 修饰符

介绍:当输入框失去焦点时 同步输入框的数据

  • @input在输入框内容发生变化后触发(在界面加载数据以前)

  • @change在输入框发生变化且失去焦点后触发;

<!DOCTYPE html>
<html lang="zh-CN">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <script src="./../day_01/js/vue.js"></script>
    <style>
        .box {
            margin: 10px 0;
            padding: 10px;
            border: 1px solid red;
        }
    </style>
</head>

<body>
    <div id="app">
        <div class="box">
            <div>1 .lazy 修饰符 当输入框失去焦点时 同步输入框的数据</div>
            msg: <input type="text" v-model="msg" @input="ipts" @change="changes">
            <br>
            msg2: <input type="text" v-model.lazy="msg2" @input="ipts" @change="changes">
        </div>
        

    </div>
    <script>
        const app = new Vue({
            el: "#app",
            data: {
                msg: "",
                msg2: "",
               
            },
            methods: {
                ipts() {
                    console.log("input事件触发msg:", this.msg);
                    console.log("input事件触发msg2:", this.msg2);
                },
                changes() {
                    console.log("change事件触发msg:", this.msg);
                    console.log("change事件触发msg:", this.msg);

                },
               
            }
        })
    </script>
</body>

</html>

运行结果

我们在第一个input框中输入内容可以看到input事件在输入内容以后触发

与前面做对比发现,当第一个input失焦之后才触发change事件,也就是说与input事件不同的是change事件是在输入框发生变化且失去焦点后才触发;

 当我们给第二个input框添加.lazy修饰符时,那么input效果与change事件相同,当我们添加上.lazy修饰符在扩展程序Vue.js devtools中可以看到没有失焦时数据不显示,当input框失焦以后数据才会显示,这就是.lazy修饰符。

2.  .number修饰符 

<!DOCTYPE html>
<html lang="zh-CN">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <script src="./../day_01/js/vue.js"></script>
    <style>
        .box {
            margin: 10px 0;
            padding: 10px;
            border: 1px solid red;
        }
    </style>
</head>

<body>
    <div id="app">
       
        <div class="box">
            <div>2 .number 修饰符</div>

            <input type="text" v-model="msg3">
            <br>
            <input type="text" v-model.number="msg4">
            <br>
            <button @click="fn">点我</button>
        </div>
      

    </div>
    <script>
        const app = new Vue({
            el: "#app",
            data: {
             
                msg3: "",
                msg4: ""
            },
            methods: {
            
                fn() {
                    console.log("this.msg:", this.msg3, typeof this.msg3)
                    console.log("this.msg2:", this.msg4, typeof this.msg4)
                },
               
            }
        })
    </script>
</body>

</html>

运行结果

我们可以看到第一个input没有添加.number修饰符,数据类型是字符串类型,添加以后,是number类型 。

我们点击按钮在控制台打印一下,检测一下他们各自的数据类型,来看一下 ,可以看到检测出来的数据类型一个是字符串一个是数字类型。

3.  .trim修饰符

.trim修饰符是减去字符两侧的空白的

<!DOCTYPE html>
<html lang="zh-CN">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <script src="./../day_01/js/vue.js"></script>
    <style>
        .box {
            margin: 10px 0;
            padding: 10px;
            border: 1px solid red;
        }
    </style>
</head>

<body>
    <div id="app">
        <div class="box">
            <input type="text" v-model="msg5">
            <br>
            <input type="text" v-model.trim="msg6">
            <br>
            <button @click="fn2">点我2</button>
        </div>

    </div>
    <script>
        const app = new Vue({
            el: "#app",
            data: {
              
                msg5: "",
                msg6: ""
            },
            methods: {
               
                fn2() {
                    console.log("this.msg5:", this.msg5, this.msg5.length)
                    console.log("this.msg6:", this.msg6, this.msg6.length)
                }
            }
        })
    </script>
</body>

</html>

 运行结果,我们分别在两个input框中输入了四个空格,然后我们点击按钮打印一下各自的字符长度,来看一下。

我们可以看到第一个input框是7个长度,而第二个只有三个长度,减去了前方的4个空格长度,这就是trim的作用。 

四、MVVM的介绍

 MVVM分为三个部分M(Model数据模型)、V(View视口)、VM(ViewModel   Vue实例),简单来说VM就是View与Model建立联系的桥梁。

MVVM是一种软件架构模式,它将用户界面(View)、业务逻辑(ViewModel)和数据(Model)进行了分离,以实现更好的代码组织、降低耦合性和增加可测试性。

MVVM的核心思想是数据绑定,通过数据绑定,View和ViewModel之间可以相互通信和同步状态。当ViewModel中的数据发生变化时,View会自动更新,而当用户在View上进行操作时,ViewModel会被通知,从而可以执行相应的逻辑。

具体来说,MVVM有以下几个主要的组成部分:

1. View(视图):

负责展示界面给用户,并接收用户的输入。View通过数据绑定将数据与ViewModel进行关联,当ViewModel中的数据发生变化时,View会自动更新。

2. ViewModel(视图模型):

负责处理业务逻辑,并与View进行交互。ViewModel包含了View所需的所有数据和命令,并通过数据绑定将数据与View进行绑定。ViewModel还可以包含与数据相关的服务和操作,例如数据获取、数据转换等。

3. Model(模型):

负责存储应用程序的数据和业务逻辑。Model可以是数据库、网络接口、文件等。ViewModel通过调用Model中的方法或者数据访问层获取数据,并将数据转换为View可以使用的形式。

除了这些核心组成部分外,MVVM还常常包括数据绑定框架(如WPF中的DataBinding、AngularJS中的双向数据绑定)和命令模式(将用户的操作封装为命令,以方便在ViewModel中处理)等技术。

总的来说,MVVM是一种通过数据绑定实现View和ViewModel之间通信的架构模式,将界面逻辑与业务逻辑进行分离,提高代码的可维护性、可测试性和可重用性。它能够帮助开发人员更好地组织代码,降低耦合性,并提供更好的用户体验。

五、结束语

那么这一节的内容先到这里,我们主要学习了vue指令以及表单修饰符,简单了解了MVVM,这只是一个vue的开始,如果大家喜欢可以订阅专栏,后续会继续更新vue的新知识,还不赶紧三连??期待大家评论留言哦~。本篇文章为原创作品。

注:若其中有侵权信息,请及时与博主联系,本人会撤回并及时更改。

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

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

相关文章

算法通关:014_2:用队列实现栈

文章目录 题目思路问题总结导包有问题&#xff0c;java提供的有关队列的方法不能调用。queue.add()和queue.offer(n)&#xff0c;这两个方法有什么区别什么叫用LinkedList实现队列 代码结果 题目 LeetCode 225. 用队列实现栈 思路 问题总结 导包有问题&#xff0c;java提供的…

银行业数据分析的关键应用场景探索

“ 随着数字经济的蓬勃发展&#xff0c;银行业正经历着前所未有的变革。从传统的存贷款业务到如今的数字化服务&#xff0c;数据分析在银行中扮演着核心角色。本文将探讨银行业数据分析的主要场景&#xff0c;以及选型适配银行业分析需求的数据库技术。” 国内的商业化银行大体…

二维码直达App,Xinstall为你打通运营任督二脉

在移动互联网时代&#xff0c;App的推广和运营显得尤为重要。然而&#xff0c;许多企业在投入大量资源进行App推广和运营时&#xff0c;总会遇到一些棘手的问题&#xff0c;如用户转化率低、数据分析困难等。今天&#xff0c;我们要为大家揭秘一个神奇的助手——Xinstall&#…

RocketMQ5.0 生产者

生产者消息类型&#xff1a; 延迟队列的生产者 package mainimport ("context""fmt""github.com/apache/rocketmq-clients/golang/v5""github.com/apache/rocketmq-clients/golang/v5/credentials"errgroup2 "golang.org/x/sync…

实现函数返回字符的种类

文章目录 一、题目二、思路三、代码实现 提示&#xff1a;以下是本篇文章正文内容&#xff0c;下面案例可供参考 一、题目 例如&#xff1a; 分别输入&#xff1a;a B 6分别输出&#xff1a;# * &#xff1f; 二、思路 第一步 获取键盘输入的字符&#xff0c;键盘输入的话…

服务器 Linux 的文件系统初探

好久没更新文章了&#xff0c;最近心血来潮&#xff0c;重新开始知识的累计&#xff0c;做出知识的沉淀~ 万事万物皆文件 文件系统&#xff1a;操作系统如何管理文件&#xff0c;内部定义了一些规则或者定义所以在 Linux 中所有的东西都是以文件的方式进行操作在 Linux 中&am…

Linux中yum、rpm、apt-get、wget的区别,yum、rpm、apt-get常用命令,CentOS、Ubuntu中安装wget

文章目录 一、常见Linux发行版本二、Linux中yum、rpm、apt-get、wget的区别2.1 yum2.2 rpm2.3 apt-get2.4 wget2.5 总结 三、CentOS中yum的作用3.1 yum清空缓存列表3.2 yum显示信息3.3 yum搜索、查看3.4 yum安装3.5 yum删除、卸载程序3.6 yum包的升级、降级 四、Ubuntu中apt-ge…

线段树、贪心与推销员

[NOIP 2015] 推销员 - 洛谷 核心&#xff1a;利用线段树处理贪心内容。建两个线段树维护两端。 #include<bits/stdc.h> using namespace std; int n; int d[100100]; int t[1000100]; int deep;//当前最深 int ans; struct node{int id,mx; }; struct sgt{int a[10001…

8.1-java+tomcat环境的配置+代理

一、回顾 1.安装nodejs&#xff0c;这是一个jdk一样的软件运行环境 yum -y list installed|grep epel yum -y install nodejs node -v 2.下载对应的nodejs软件npm yum -y install npm npm -v npm set config .....淘宝镜像 3.安装vue/cli command line interface 命令行…

技术详解:互联网医院系统源码与医保购药APP的整合开发策略

本篇文章&#xff0c;小编将从系统架构、数据安全、用户体验和技术实现等方面详细探讨互联网医院系统与医保购药APP的整合开发策略。 一、系统架构 1.模块化设计 互联网医院系统与医保购药APP的整合需要采用模块化设计。 2.微服务架构 每个功能模块作为一个独立的微服务&am…

AI大模型需要什么样的数据?

数据将是未来AI大模型竞争的关键要素 人工智能发展的突破得益于高质量数据的发展。例如&#xff0c;大型语言模型的最新进展依赖于更高质量、更丰富的训练数据集&#xff1a;与GPT-2相比&#xff0c;GPT-3对模型架构只进行了微小的修改&#xff0c;但花费精力收集更大的高质量…

【pyhton】Python中zip用法详细解析与应用实战

✨✨ 欢迎大家来到景天科技苑✨✨ &#x1f388;&#x1f388; 养成好习惯&#xff0c;先赞后看哦~&#x1f388;&#x1f388; &#x1f3c6; 作者简介&#xff1a;景天科技苑 &#x1f3c6;《头衔》&#xff1a;大厂架构师&#xff0c;华为云开发者社区专家博主&#xff0c;…

请你学习:前端布局1 - CSS盒模型(Box Model)是CSS布局的核心概念之一

CSS盒模型&#xff08;Box Model&#xff09;是CSS布局的核心概念之一&#xff0c;它描述了如何对文档中的元素进行布局和尺寸计算。每个元素都会生成一个矩形的盒子&#xff0c;这个盒子由几个部分组成&#xff0c;包括内容&#xff08;content&#xff09;、内边距&#xff0…

解决Tomcat控制台打印日志出现乱码

1.进入安装目录&#xff0c;找到conf这个文件夹并打开 2.找到logging.properties&#xff0c;用记事本打开 3.找到java.util.logging.ConsoleHandler.encoding&#xff0c;将UTF-8修改为GBK

红酒与时尚秀场:品味潮流与风尚

在光影交织的时尚秀场上&#xff0c;每一道流光溢彩都诠释着潮流与风尚的碰撞。当定制红酒洒派红酒&#xff08;Bold & Generous&#xff09;与时尚秀场相遇&#xff0c;两者交织出一段优雅而充满魅力的故事&#xff0c;领着我们品味潮流之巅的风尚。 一、红酒与时尚的初遇…

【MySQL进阶篇】管理

1、系统数据库 MySQL数据库安装完成之后&#xff0c;自带以下四个数据库&#xff0c;具体作用如下&#xff1a; 数据库含义mysql存储MySQL服务器正常运行所需要的各种信息&#xff08;时区、主从、用户、权限等&#xff09;information_schema提供了访问数据库元数据的各种表…

摄像头防抖中的IMU传感器是什么吗?

摄像头防抖中的IMU传感器是什么吗&#xff1f; 在现代摄影与摄像技术的飞速发展中&#xff0c;防抖功能作为提升画质与用户体验的关键技术之一&#xff0c;得到了广泛的应用与重视。IMU&#xff08;Inertial Measurement Unit&#xff0c;惯性测量单元&#xff09;传感器作为防…

豆包大模型视觉、语音能力升级!文生图更懂“国风”,TTS“拿捏”情绪

2024 火山引擎 AI 创新巡展・成都站于近日正式举办。活动现场发布了豆包・图生图模型&#xff0c;以及升级版的豆包・文生图模型、豆包・语音合成模型、豆包・声音复刻模型。 本文介绍了升级版文生图、语音合成、声音复刻模型特征&#xff0c;包括图像生成方面更深刻理解主客体…

3千米以上音视频键鼠延长解决方案:KVM光纤延长器

KVM光纤延长器​​​​​​​是什么&#xff1f; KVM光纤延长器是一种使用光纤来传输键盘、视频和鼠标&#xff08;KVM&#xff09;信号的设备&#xff0c;由发送端和接收端组成&#xff0c;一般成对使用。它可以让用户在远离电脑的地方如同在本地一样方便快捷的操作电脑。 KV…