第十八章Vue的学习

news2024/12/28 5:16:10

文章目录

  • 什么是Vue
      • Vue.js的官网介绍
  • 环境配置
  • 基本语法
    • 声明式渲染
    • 绑定元素属性
    • 双向数据绑定
    • 条件渲染
    • 列表渲染
    • 事件驱动
    • 侦听属性
  • Vue对象生命周期

什么是Vue

对于Java程序来说,我们使用框架就是导入那些封装了**『固定解决方案』的jar包,然后通过『配置文件』**告诉框架做什么,就能够大大简化编码,提高开发效率。我们使用过的junit其实就是一款单元测试框架。

而对于JavaScript程序来说,我们使用框架就是导入那些封装了**『固定解决方案』『js文件』**,然后在框架的基础上编码。

  • 我们的Vue.js就是我们的JavaScript的框架

Vue.js的官网介绍

Vue (读音 /vjuː/,类似于view) 是一套用于构建用户界面的渐进式框架。与其它大型框架不同的是,Vue 被设计为可以自底向上逐层应用。Vue 的核心库只关注视图层,不仅易于上手,还便于与第三方库或既有项目整合。另一方面,当与现代化的工具链 (opens new window)以及各种支持类库 (opens new window)结合使用时,Vue 也完全能够为复杂的单页应用提供驱动。

环境配置

  • Java语言的程序包:jar包
  • JavaScript语言的程序包:外部js文件

对于Java程序来说,框架=jar包+配置文件。对于Vue来说,导入Vue的外部js文件就能够使用Vue框架了。

image-20230105120806119

基本语法

声明式渲染

声明式

**『声明式』是相对于『编程式』**而言的。

  • 声明式:告诉框架做什么,具体操作由框架完成
  • 编程式:自己编写代码完成具体操作

渲染

在这里插入图片描述

上图含义解释:

  • 蓝色方框:HTML标签
  • 红色圆形:动态、尚未确定的数据
  • 蓝色圆形:经过程序运算以后,计算得到的具体的,可以直接在页面上显示的数据、
  • 渲染:程序计算动态数据得到具体数据的过程

例子

html

<div id="div0">
        <span>{{msg}}</span>
</div>

vue代码

 <script language="JavaScript">
        window.onload=function (){
                var vue=new Vue({
                    // el用于指定Vue对象要关联的HTML元素。el就是element的缩写
                    // 通过id属性值指定HTML元素时,语法格式是:#id
                    "el":"#div0",
                    // data属性设置了Vue对象中保存的数据
                    data:{
                        msg: "hello!!!"
                    }
                })
        }
</script>

绑定元素属性

  • v-bind:HTML标签的原始属性名

HTML代码

 <div id="div0">
        <span>{{msg}}</span>
        <!-- v-bind:value表示绑定value属性 , v-bind可以省略,也就是 :value -->
        <input type="text" v-bind:value="uname"/>
</div>

Vue代码

<div id="div0">
        <!-- 同样的表达式,在标签体内通过{{}}告诉Vue这里需要渲染; -->
        <!--HTML标签的属性中,通过v-bind:属性名="表达式"的方式告诉Vue这里要渲染 -->
        <span>{{msg}}</span>
        <!-- v-bind:value表示绑定value属性 , v-bind可以省略,也就是 :value -->
        <!--<input type="text" v-bind:value="uname"/>-->
        <input type="text" :value="uname"/>
</div>

本质上,v-bind:属性名="表达式"它们都是用Vue对象来渲染页面。只不过:

  • 文本标签体:使用形式{{}}
  • 属性:使用v-bind:属性名="表达式"形式

双向数据绑定

  • v-model:HTML标签的原始属性名
 <div id="div0">
        <span>{{msg}}</span><br/>
         <!--
         v-model指的是双向绑定,
         也就是说之前的v-bind是通过msg这个变量的值来控制input输入框
         现在 v-model 不仅msg来控制input输入框,反过来,input输入框的内容也会改变msg的值
         -->
        <input type="text" v-model.trim="msg" />
        <!--<input type="text" v-model:value="msg"/>-->
        <!-- v-model:value 中 :value可以省略,直接写成v-model -->
        <!-- trim可以去除首尾空格 -->
</div>
 var vue=new Vue({
                // el用于指定Vue对象要关联的HTML元素。el就是element的缩写
                // 通过id属性值指定HTML元素时,语法格式是:#id
                "el":"#div0",
                // data属性设置了Vue对象中保存的数据
                data:{
                    msg: "hello!!!",
                    uname:"刘颂成"
                }
})

条件渲染

根据Vue对象中,数据属性的值来判断是否对HTML页面内容进行渲染

  • v-if和v-else
  • v-show
  <div id="div0">
        <input type="text" v-model="num"/>
        <div v-if="num%2==0" style="width:200px;height:200px;background-color: chartreuse;">&nbsp;</div>
        <div v-else="num%2==0" style="width:200px;height:200px;background-color: coral">&nbsp;</div>
 </div>
 var vue=new Vue({
                // el用于指定Vue对象要关联的HTML元素。el就是element的缩写
                // 通过id属性值指定HTML元素时,语法格式是:#id
                "el":"#div0",
                // data属性设置了Vue对象中保存的数据
                data:{
                   num:2
                }
});

image-20230105134355425

  • 输入偶数 num变为偶数,所以对应绿色的框子
  • 输入奇数 num变成奇数 所以对应橙色的框子
 <div id="div0">
        <input type="text" v-model="num"/>
        <!-- v-show -->
        <!-- v-show是通过display属性来控制这个div是否显示 -->
        <div v-show="num%2==0" style="width:200px;height:200px;background-color:blueviolet;">&nbsp;</div>
    </div>

image-20230105135649985

  • 对于show,如果不满足条件,是通过display:none,来进行隐藏

列表渲染

  • v-for 用来遍历列表
 var vue=new Vue({
                // el用于指定Vue对象要关联的HTML元素。el就是element的缩写
                // 通过id属性值指定HTML元素时,语法格式是:#id
                "el":"#div0",
                // data属性设置了Vue对象中保存的数据
                data:{
                    fruitList:[
                        {fname:"苹果",price:5,fcount:100,remark:"苹果很好吃"},
                        {fname:"菠萝",price:3,fcount:120,remark:"菠萝很好吃"},
                        {fname:"香蕉",price:4,fcount:50,remark:"香蕉很好吃"},
                        {fname:"西瓜",price:6,fcount:100,remark:"西瓜很好吃"}
                    ]
                }
});
<div id="div0">
    <table border="1" width="400" cellpadding="4" cellspacing="0">
        <tr>
            <th>名称</th>
            <th>单价</th>
            <th>库存</th>
            <th>备注</th>
        </tr>
        <!-- v-for表示迭代 -->
        <tr align="center" v-for="fruit in fruitList">
            <td>{{fruit.fname}}</td>
            <td>{{fruit.price}}</td>
            <td>{{fruit.fcount}}</td>
            <td>{{fruit.remark}}</td>
        </tr>
    </table>
</div>

image-20230105142539506

事件驱动

  window.onload=function (){
            var vue=new Vue({
                // el用于指定Vue对象要关联的HTML元素。el就是element的缩写
                // 通过id属性值指定HTML元素时,语法格式是:#id
                "el":"#div0",
                // data属性设置了Vue对象中保存的数据
                data:{
                   msg:"hello world"
                },
                methods:{
                    myReverse:function(){
                        this.msg = this.msg.split("").reverse().join("");
                    }
                }
            });
}
<div id="div0">
    <span>{{msg}}</span><br/>
    <!-- v-on:click 表示绑定点击事件 -->
    <!-- v-on可以省略,变成 @click -->
    <input type="button" value="反转" v-on:click="myReverse"/>
</div>
  • 这样就实现了点击按钮,使字符串反转

侦听属性

 <div id="div0">
        <input type="text" v-model="num1" size="2"/>
        +
        <input type="text" v-model="num2" size="2"/>
        =
        <span>{{num3}}</span>
 </div>
  • 在上面代码的基础上,我们希望num1或num2属性发生变化时,修改num3属性。此时需要对num1或num2属性进行**『侦听』**。

    具体来说,所谓**『侦听』**就是对num3属性进行监控,当num1或num2属性的值发生变化时,调用我们准备好的函数。

 <script language="JavaScript">
        window.onload=function () {
            var vue = new Vue({
                "el":"#div0",
                data:{
                    num1:1,
                    num2:2,
                    num3:0
                },
                watch:{
                    //侦听属性num1和num2
                    //当num1的值有改动时,那么需要调用后面定义的方法 , newValue指的是num1的新值
                    num1:function(newValue){
                        this.num3 = parseInt(newValue) + parseInt(this.num2);
                    },
                    num2:function(newValue){
                        this.num3 = parseInt(this.num1) + parseInt(newValue) ;
                    }
                }
            });
        }
</script>

Vue对象生命周期

./images

<div id="div0">
    <span id="span">{{msg}}</span>
    <input type="button" value="改变msg的值" @click="changeMsg">
</div>
   var vue = new Vue({
                "el":"#div0",
                data:{
                    msg:1
                },
                methods:{
                    changeMsg:function (){
                        this.msg=this.msg+1;
                    }
                },
                // vue对象创建之前
                beforeCreate:function (){
                    console.log("beforeCreate:vue对象创建之前---------------");
                    console.log("msg:"+this.msg);
                },
                /*vue对象创建之后*/
                created:function(){
                    console.log("created:vue对象创建之后---------------");
                    console.log("msg:"+this.msg);
                },
                /*数据装载之前*/
                beforeMount:function(){
                    console.log("beforeMount:数据装载之前---------------");
                    console.log("span:"+document.getElementById("span").innerText);
                },
                /*数据装载之后*/
                mounted:function(){
                    console.log("mounted:数据装载之后---------------");
                    console.log("span:"+document.getElementById("span").innerText);
                },
                beforeUpdate:function(){
                    console.log("beforeUpdate:数据更新之前---------------");
                    console.log("msg:"+this.msg);
                    console.log("span:"+document.getElementById("span").innerText);
                },
                updated:function(){
                    console.log("Updated:数据更新之后---------------");
                    console.log("msg:"+this.msg);
                    console.log("span:"+document.getElementById("span").innerText);
                }
});

image-20230105152520852

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

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

相关文章

CSS3 之选择器

文章目录1、关系性选择器&#xff1a;EFE~F2、属性选择器3、伪元素选择器4、伪类选择器(被选中的元素的一个种状态)calc1、关系性选择器&#xff1a;EFE~F 2、属性选择器 E[attr~“val”]E[attr|“val”]E[attr^“val”]E[attr$“val”]E[attr*“val”]3、伪元素选择器 E::pl…

CesiumLab对BIM模型的输入格式要求 CesiumaLab系列教程

BIM 模型和手工模型最大的区别在于几点&#xff1a; 1.建模目标不同&#xff0c;手工模型的目的是为了可视化&#xff0c;就是为了看的见&#xff0c;看不见的东西能省则省。BIM 完全是按照一些工程标准去创建的&#xff0c;比如路面可能有多个层代表了不同的物理层。手工模型…

windows编译Paraview源码

目录一. 环境准备二. 编译1. CMake2. Visual Studio一. 环境准备 下载基本所需&#xff1a; paraview官方给了编译文档&#xff1a;https://github.com/Kitware/ParaView/blob/master/Documentation/dev/build.md 所需要的基础有&#xff1a; 如图&#xff1a;&#xff08;进入…

2022我的年度总结-- AI遮天之路

我是一个普普通通的大学生&#xff0c;我的博客记录了我学习编程以来共计1年多的水平&#xff0c;我希望能把自己大学的经历、选择、困惑等与同样身处大学&#xff0c;选择AI方向不知如何发展的人进行分享&#xff0c;因此写了这篇年终总结。另外&#xff0c;对于一些刚刚开始写…

重磅!华为更新职业认证架构刷新和重认证规则

尊敬的各位朋友&#xff0c;感谢您一直以来对华为认证的支持&#xff01; 为匹配华为公司未来长期战略&#xff0c;紧随ICT技术演进趋势&#xff0c;自2023年1月1日起&#xff0c;华为职业认证将启用全新的架构体系和重认证规则&#xff0c;请您关注。 华为职业认证架构刷新 …

新年新希望--爱摸鱼的美工(12)

年近了&#xff0c;上班途中依然匆忙 看女孩子们渐渐开始倒腾 做了新发型&#xff0c;做了美美的指甲 换上了新衣服&#xff0c;买了新包 电话里讨论着 去哪里过年&#xff0c;买什么年货 好像以前的我也这样 今年挣得少了&#xff0c;不想添新衣&#xff08;不能&#xff09; …

【条理清晰】在 Windows 上安装 MySQL

下载 MySQL 安装程序安装 MySQL 数据库安装示例数据库下载 MySQL 安装程序 在本教程中&#xff0c;我们展示如何在 Windows 平台上下载和安装 MySQL 的详细步骤。 在 Windows 平台上安装 MySQL 很简单&#xff0c;并不需要太复杂的步骤。按照本文的步骤操练起来就可以了。 我…

一体化Ethercat通信伺服电机在汇川H5U PLC上的应用案例介绍(下)

内容介绍了一体化低压伺服Ethercat通信的电机在汇川H5UPLC上的使用&#xff0c;一体化Ethercat通信伺服电机在汇川H5U PLC上的应用案例介绍(上)主要讲解环境的搭建以及使用AutoShop软件的在线调试功能&#xff0c;简单控制电机位置、速度模式运行。那么本篇我们就来讲解下使用汇…

【Kotlin】空安全 ② ( 手动空安全管理 | 空安全调用操作符 ? | let 函数结合空安全调用操作符使用 )

文章目录一、手动空安全管理二、空安全调用操作符 ?三、let 函数结合空安全调用操作符使用一、手动空安全管理 Kotlin 语言中 , 变量类型 分为 可空类型 和 非空类型 , 默认状态 下 , 变量是 非空类型 的 , 如果使用 类型? 将变量声明为 可空类型 , 那么就需要使用 手动安…

【C语言进阶】动态内存管理

1. 为什么存在动态内存分配我们已经掌握的内存开辟方式有&#xff1a;int val 20;//在栈空间上开辟四个字节 char arr[10] {0};//在栈空间上开辟10个字节的连续空间但是上述的开辟空间的方式有两个特点&#xff1a;1. 空间开辟大小是固定的。2. 数组在申明的时候&#xff0c;…

JavaWeb复习

系列文章目录 提示&#xff1a;这里可以添加系列文章的所有文章的目录&#xff0c;目录需要自己手动添加 例如&#xff1a;第一章 Python 机器学习入门之pandas的使用 提示&#xff1a;写完文章后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目…

【迅为iMX6Q】开发板 u-boot 2022.04 SD卡 启动

相关参考 【迅为iMX6Q】开发板 u-boot 2015.04 SD卡 启动 【迅为iMX6Q】开发板 u-boot 2020.04 SD卡 启动 开发环境 win10 64位VMware Workstation Pro 16ubuntu 22.04【迅为imx6q】开发板&#xff0c; 2G DDR uboot-imx 下载 使用 NXP 官方提供的 uboot-imx&#xff0c;代…

TreeList-关闭默认显示的右击菜单

需要给控件添加自定义的右击菜单&#xff0c;所以就造成了冲突&#xff0c;导致右击时只弹出控件自带的菜单而没弹出我自定义的菜单&#xff0c;现在把关闭默认菜单的方法记录一下

数据库,计算机网络、操作系统刷题笔记27

数据库&#xff0c;计算机网络、操作系统刷题笔记27 2022找工作是学历、能力和运气的超强结合体&#xff0c;遇到寒冬&#xff0c;大厂不招人&#xff0c;可能很多算法学生都得去找开发&#xff0c;测开 测开的话&#xff0c;你就得学数据库&#xff0c;sql&#xff0c;oracle…

解决在Win10上安装VMware Workstation虚拟机不可用

一、说明 这是近几年安装虚拟机存在的问题&#xff0c;这里首先说明&#xff0c;以下信息纯粹来自VMware的参考文档&#xff0c;本人的实现不太成功&#xff0c;期望得到更好的WMware软件进行尝试。 二、错误提示 在 Windows 10 主机上&#xff0c;VMware Workstation 中显示“…

2023/1/7 Vue学习笔记-3-组件的理解

1 对组件的理解 模块与组件、模块化与组件化&#xff1a; 1.模块&#xff1a; &#xff08;1&#xff09;理解&#xff1a;向外提供特定功能的js程序&#xff0c;一般就是一个js文件 &#xff08;2&#xff09;为什么&#xff1a;js文件很多很复杂 &#xff08;3&#xff09;作…

【Linux工具】-vim介绍

Vim使用一&#xff0c;Vim的四种模式二&#xff0c;命令模式1,复制&#xff0c;剪切&#xff0c;粘贴2&#xff0c;撤销操作3&#xff0c;光标的移动4&#xff0c;替换&#xff0c;选中&#xff0c;删除5&#xff0c;h j k l键的使用6&#xff0c;多行注释&#xff0c;去多行注…

2023-01-07:hyper/docker-registry-web是registry的web界面工具之一。请问部署在k3s中,yaml如何写?

2023-01-07&#xff1a;hyper/docker-registry-web是registry的web界面工具之一。请问部署在k3s中&#xff0c;yaml如何写&#xff1f; 答案2023-01-07&#xff1a; yaml如下&#xff1a; apiVersion: apps/v1 kind: Deployment metadata:labels:app: docker-registry-webna…

实验二十五 VRRP配置

实验二十五 VRRP配置虚拟路由冗余协议VRRP(Virtual Router R edundancy Protocol)通过把几台路由设备联合组成一 台虚拟的路由设备&#xff0c;将虚拟路由设备的IP 地址作为用户的默认网关实现与外部网络通信。当网关设 备发生故障时&#xff0c;VRRP机制能够选举新的网关设备承…

HTML与CSS基础(三)—— CSS基础之基础选择器、字体文本相关样式

一、基础认知目标&#xff1a;理解 CSS 的作用&#xff0c;了解 CSS 语法规则&#xff0c;知道 CSS 的引入方式及其区别1. CSS的介绍CSS&#xff1a;层叠样式表&#xff08;Cascading style sheets&#xff09; CSS作用&#xff1a;• 给页面中的HTML标签设置样式结构&#xff…