Vue.js3学习篇--Vue模板应用

目录

一,模板基础

 1.模板插值

(1)基础插值

(2)HTML代码插值

(3)标签属性插值

2.模板指令

(1)定义

(2)指令参数

二.条件渲染

1.使用v-if指令渲染

2.使用v-show指令渲染

三.循环渲染

1.v-for指令

2.v-for指令的高级用法

四.实战


一,模板基础
 1.模板插值
(1)基础插值

        用法:模板插值是Vue中基础的模板用法,一般在HTML的标签中用“{{}}”进行变量插值,其可以将当前组件中定义的变量的值插入指定位置,并且这种插值会默认实现绑定的效果,当我们修改变量的值时,其也可以同步反馈到页面的渲染上

例如一个基础的Vue应用:

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8">
<!--导入Vue--><script src="https://unpkg.com/vue@next"></script><title>Title</title>
</head>
<body>
<div style="text-align: center" id="Application"><h1>{{count}}</h1><button v-on:click="clickButton">click</button>
</div>
<script>const App={data(){return{count:0}},methods:{clickButton(){this.count=this.count+1}}}Vue.createApp(App).mount("#Application")
</script>
</body>
</html>

效果:

当我们点击按钮时,次数累加

        一般情况是,某些组件的渲染是由变量控制的,如果我们想让它一旦渲染后就不能够再被修改,这可以使用v-once指令实现,被这个指令设置的组件在进行变量插值时只会插值一次

如果将上面的代码改为如下后,无论怎么点击按钮,标题都不改变:

<h1 v-once>这里的渲染内容不会改变:{{count}}</h1>
(2)HTML代码插值

        还有,如果要插入的文本为一段HTML代码时,直接使用双括号时就不能实现效果,双括号会将里面的变量解析成纯文本,写的代码什么样,渲染时就渲染什么样,

例如上面的例子定义App的数据:

插值是一个HTML代码

    data(){return{count:0,countHTML:"<span style='color: #FF0000'>0</span>"}}

插值位置:

  <h1>{{countHTML}}</h1>

再运行后,输出纯文本了:

        效果不是我们想的,对于HTML代码的插值,需要用v-html指令完成:

    <h1>模板内容:<span v-html="countHTML"></span></h1>

效果:

(3)标签属性插值

        对于标签属性的插值,双括号同样不好使,而是需要使用v-bind指令

例如:

<h1 v-bind:id="test">属性插值{{count}}</h1>

定义一个CSS样式:

 #h1{color: blue;}

然后在data中添加一个名为test的Vue组件属性:

 data(){return{count:0,countHTML:"<span style='color: #FF0000'>0</span>",test:"h1"}}

运行代码后,之前定义的count插值变量得到了一个CSS属性h1:

2.模板指令
(1)定义

        本质上,Vue中的模板指令也是HTML属性标签,其通常由前缀“v-”开头,例如之前看到的v-on,v-html,v-bind等。某些特殊的Vue指令还可以指定参数,参数和指令使用冒号进行分隔,例如:

v-bind:style
v-on:click
(2)指令参数

        还有就是指令的参数本身也可以是动态的,想换就换,例如定义一个区分id选择器和类选择器的组件样式,通过修改参数prop的值实现id选择器和类选择器之间的转换:

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8">
<!--导入Vue--><script src="https://unpkg.com/vue@next"></script><title>Title</title><style>#h1{color: blue;}.h1{color: #3e8e41;}</style>
</head>
<body>
<div style="text-align: center" id="Application"><h1>模板内容:<span v-html="countHTML"></span></h1><h1 v-bind:id="test">属性插值{{count}}</h1><!--prop是可变参数--><h1 v-bind:[prop]="name" v-if="show">标题</h1><button v-on:click="clickButton">click</button>
</div>
<script>const App={data(){return{count:0,countHTML:"<span style='color: #FF0000'>0</span>",test:"h1",show:true,prop:'class',   //prop:'id'name:'h1'}},methods:{clickButton(){this.count=this.count+1}}}Vue.createApp(App).mount("#Application")
</script>
</body>
</html>

当参数prop是class时:

当参数prop是id时:

实现了通过参数prop改变选择器类型

(3)语法糖

        语法糖是指在不影响功能的情况下,添加某些方法实现同样的效果,说白了就是缩写,Vue的v-bind和v-on是比较常用的指令,使用它们都有自己的语法糖。

        对于v-bind指令,可以省略v-bind直接用冒号“:”,例如:

<a v-bind:href="url">链接</a>
<img v-bind:src="imgUrl>
<!--缩写为-->
<a :href="url">链接</a>
<img :src="imgUrl>

        对于v-on指令可以直接用“@”来缩写,例如:

<button v-on:click="click">点击</button>
<!--缩写为-->
<button @click="click>点击</button>

二.条件渲染

        条件渲染是Vue控制HTML页面渲染的方式之一,一般通过v-if和v-show指令来实现

1.使用v-if指令渲染

        简单使用:

<h1 v-if="boolean">title</h1>

        上面的代码中boolean变量可以是布尔值有可以是条件语句,只有当boolean变量的值为真时或某个条件为真时当前标题元素才会被渲染,同时,if关键字还可以和else关键字结合使用组成if-else块

<h1 v-if="boolean">title</h1>
<p v-else>如果不显示title就显示段落</p>

        注意的是,v-else要紧接v-if使用才能构成if-else块,例如下面的代码就会出错:

<h1 v-if="boolean">title</h1>
<h1>不构成if-else块</h1>
<p v-else>如果不显示title就显示段落</p>

        在v-if和v-else之间,还可以插入任意多的v-else-if来实现多分支渲染,例如:

<h1 v-if="score==100">满分</h1>
<h1 v-else-if="score>=80&&score!==100">优秀</h1>
<h1 v-else-if="score<80&&score>=60>及格</h1>
<h1 v-else>不及格</h1>

        如果想通过通过标签控制多个标签元素有如下两种实现方法:

(1)使用div标签对要进行控制的元素进行包装:

<div v-if="boolean">
<p>1</p>
<p>2</p>
<p>3</p>
<p>4</p>
</div>

(2)使用template标签对元素进行分组:

<template v-if="boolean"><p>a</p><p>c</p><p>b</p><p>d</p>
</template>

        它们都实现同时控制多个标签元素的渲染,只不过div标签不是也会被渲染出来,而templa标签则不会被渲染出来,但其内控制的标签默认属性display:none不显示出来

2.使用v-show指令渲染

        v-show指令的基本用法和v-if类似,不同的是v-show并不支持template模板,同样不可以和v-else结合使用,更加扯淡的是v-show无论条件的真假它都显示,v-show的渲染逻辑只是一种视觉上的渲染,它通常只是通过简单的切换CSS样式中的display属性来实现展示效果

简单使用:

<h1 v-show="boolean">title</h1>

三.循环渲染

        循环渲染一般是用来渲染列表这一类组件

1.v-for指令

        在Vue中,v-for指令可以将一个数组中的数据渲染为列表视图,数组的设置语法格式:

item in list
<!--或-->
item of list

类似于python中数组的语法,一个临时变量item循环迭代数组list

例如:

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8">
<!--导入Vue--><script src="https://unpkg.com/vue@next"></script><title>Title</title>
</head>
<body>
<div><div id="Application"><div v-for="item in list">{{item}}</div></div>
</div>
<script>
const App={data(){return{list:[1,2,3,5,6,7]}}
}
Vue.createApp(App).mount("#Application")
</script>
</body>
</html>

渲染结果:

列表也可以是键值对,我们也可以获取列表的索引:

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8">
<!--导入Vue--><script src="https://unpkg.com/vue@next"></script><title>Title</title>
</head>
<body>
<div><div id="Application"><div v-for="(key,value,index) in list">{{index}}-{{value}}:{{key}}</div></div>
</div>
<script>
const App={data(){return{list:{name:'hello',age:'time',school:'hello',title:'world'}}}
}
Vue.createApp(App).mount("#Application")
</script>
</body>
</html>

渲染效果:

2.v-for指令的高级用法

        v-for指令在渲染列表时,当我们调用如下这些函数对列表数据对象进行更新时,视图也会对于的更新,函数有:

push()        //向列表尾部追加一个元素
pop()        //删除列表尾部的一个元素
unshift()        //向列表头部插入一个元素
shift()        //删除列表头的一个元素
splice()        //对列表进行操作
sort()        //对列表进行排序操作
reverse()        //对列表进行逆序

例如:

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8">
<!--导入Vue--><script src="https://unpkg.com/vue@next"></script><title>Title</title>
</head>
<body>
<div><div id="Application"><div v-for="key in list">{{key}}</div><button @click="sort">sort</button><button @click="reverse">reverse</button><button @click="push">push</button><button @click="pop">pop</button><button @click="shift">shift</button><button @click="unshift">unshift</button><button @click="splice">splice</button></div>
</div>
<script>
const App={data(){return{list:[3,5,2,5,1,2,8,7],}},methods:{<!--原数据修改-->splice(){this.list.splice(1,1)},<!--头部删除-->shift() {this.list.shift()},<!--头部插入-->unshift(){var num=parseInt(Math.random()*10)this.list.unshift(num)},<!--尾部删除-->pop(){this.list.pop()},<!--排序-->sort(){this.list.sort()},<!--逆序-->reverse(){this.list.reverse()},<!--尾部追加-->push(){var num=parseInt(Math.random()*10)this.list.push(num)}}
}
Vue.createApp(App).mount("#Application")
</script>
</body>
</html>

效果:点击各个按钮实现对于的操作

四.实战

        实现一个简单的待办任务列表应用,其可以展示当前未完成的任务项,也可以添加新的任务以及删除以及完成的任务

看码:

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>Title</title><script src="https://unpkg.com/vue@next"></script>
</head>
<body>
<div id="Application"><!--输入框元素,用来新建待办任务--><form @submit.prevent="addTask"><span>新建任务</span><input v-model="taskText" placeholder="请输入任务..."/><button>添加</button></form><!--有序列表--><ol><li v-for="(item,index) in todos">{{item}}<button @click="remove(index)">删除任务</button><hr/></li></ol>
</div>
<script>const App={data(){return{//待办任务列表数据todos:[],//当前输入的待办任务taskText:""}},methods:{//添加一条待办任务addTask(){//判断输入框是否为空if(this.taskTest.length===0){alert("请输入任务")return}this.todos.push(this.taskText)this.taskText=""},remove(index){this.todos.splice(index,1)}}}Vue.createApp(App).mount("#Application")
</script>
</body>
</html>

效果:

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

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

相关文章

【网络安全 --- 工具安装】Centos 7 详细安装过程及xshell,FTP等工具的安装(提供资源)

VMware虚拟机的安装教程如下&#xff0c;如没有安装&#xff0c;可以参考这篇博客安装&#xff08;提供资源&#xff09; 【网络安全 --- 工具安装】VMware 16.0 详细安装过程&#xff08;提供资源&#xff09;-CSDN博客【网络安全 --- 工具安装】VMware 16.0 详细安装过程&am…

告警繁杂迷人眼,多源分析见月明

随着数字化浪潮的蓬勃兴起&#xff0c;网络安全问题日趋凸显&#xff0c;面对指数级增长的威胁和告警&#xff0c;传统的安全防御往往力不从心。网内业务逻辑不规范、安全设备技术不成熟都会导致安全设备触发告警。如何在海量众多安全告警中识别出真正的网络安全攻击事件成为安…

数据结构(2-5~2-8)

2-5编写算法&#xff0c;在单链表中查找第一值为x的结点&#xff0c;并输出其前驱和后继的存储位置 #include<stdio.h> #include<stdlib.h>typedef int DataType; struct Node {DataType data; struct Node* next; }; typedef struct Node *PNode; …

Pikachu靶场——远程命令执行漏洞(RCE)

文章目录 1. RCE1.1 exec "ping"1.1.1 源代码分析1.1.2 漏洞防御 1.2 exec "eval"1.2.1 源代码分析1.2.2 漏洞防御 1.3 RCE 漏洞防御 1. RCE RCE(remote command/code execute)概述&#xff1a; RCE漏洞&#xff0c;可以让攻击者直接向后台服务器远程注入…

接口测试总结

一、了解一下HTTP与RPC 1. HTTP&#xff08;HyperText Transfer Protocol) 说明&#xff1a;超文本传输协议&#xff0c;是互联网上应用最为广泛的一种网络协议。 优点&#xff1a;就是简单、直接、开发方便&#xff0c;利用现成的http协议进行传输。 流程图&#xff1a; 2. R…

【QT5-程序控制电源-RS232-SCPI协议-上位机-基础样例【1】】

【QT5-程序控制电源-RS232-SCPI协议-上位机-基础样例【1】】 1、前言2、实验环境3、自我总结1、基础了解仪器控制-熟悉仪器2、连接SCPI协议3、选择控制方式-程控方式-RS2324、代码编写 4、熟悉协议-SCPI协议5、测试实验-测试指令&#xff08;1&#xff09;硬件连接&#xff08;…

课题学习(三)----倾角和方位角的动态测量方法(基于陀螺仪的测量系统)

一、内容介绍 该测量系统基于三轴加速度和三轴陀螺仪&#xff0c;安装在钻柱内部&#xff0c;随钻柱一起旋转&#xff0c;形成捷联惯性导航系统&#xff0c;安装如下图所示&#xff1a;   假设三轴加速度和陀螺仪的输出为: f b [ f x f y f z ] T f^b\begin{bmatrix}f_{x} …

Docker 安装 MongoDB

一、什么是MongoDB MongoDB 是一个基于分布式文件存储的数据库。是一个介于关系数据库和非关系数据库之间的产品&#xff0c;是非关系数据库当中功能最丰富&#xff0c;最像关系数据库的。 二、MongoDB的安装 这里使用docker来安装MongoD 1.docker 拉取mysql镜像 docker pu…

论文笔记:Contrastive Trajectory Similarity Learning withDual-Feature Attention

ICDE 2023 1 intro 1.1 背景 轨迹相似性&#xff0c;可以分为两类 启发式度量 根据手工制定的规则&#xff0c;找到两条轨迹之间基于点的匹配学习式度量 通过计算轨迹嵌入之间的距离来预测相似性值上述两种度量的挑战&#xff1a; 无效性&#xff1a; 具有不同采样率或含有噪…

vue模版语法-{{}}/v-text/v-html/v-once

一、{{}}双括号&#xff1a;用于文本渲染 1、 {{变量名}}:data中返回对象的变量名 2、{{js表达式}}:可以直接进行js表达式处理 3、注意&#xff1a;双大括号中不要写等式书写 二、v-text 指令&#xff0c;用于文本渲染 1、为了解决双大括号渲染数据出现闪烁问题 三、v-cloak …

MyBatisPlus(八)范围查询

说明 范围查询&#xff0c;包括&#xff1a; 大于大于等于小于小于等于在范围内在范围外 大于&#xff1a;gt 代码 Testvoid gt() {LambdaQueryWrapper<User> wrapper new LambdaQueryWrapper<>();wrapper.gt(User::getAge, 20);List<User> users mapp…

Zookeeper经典应用场景实战(一)

文章目录 1、Zookeeper Java客户端实战1.1、 Zookeeper 原生Java客户端使用1.2、 Curator开源客户端使用 2、 Zookeeper在分布式命名服务中的实战2.1、 分布式API目录2.2、 分布式节点的命名2.3、 分布式的ID生成器 3、Zookeeper实现分布式队列3.1、 设计思路3.2、 使用Apache …

大文件上传,前端vue 做分片上传

html – 以弹窗的形式 <!-- 上传算法文件 --> <el-dialog title"上传算法文件" :visible.sync"uploadPop" width"60%" :close-on-click-modal"false" :before-close"closeUploadPop" append-to-body custom-class…

2023.10.07

#include <iostream>using namespace std;int main() {string str;cout << "请输入字符串&#xff1a;";getline(cin,str);int big0,little0,spac0,num0,sym0;int sizestr.size();for(int i0;i<size;i){if((int)str.at(i)<6526 && (int)st…

如何开发一款高效便捷的搬家服务小程序

随着互联网的发展&#xff0c;小程序已成为各行各业重要的业务推广和用户服务平台。对于搬家行业而言&#xff0c;开发一款高效便捷的搬家服务小程序具有巨大的市场潜力。本文将为您详细介绍如何开发一款这样的搬家服务小程序。 一、进入乔拓云网后台 在开始制作搬家服务小程序…

ICE综述

ICE综述 ICE(Internet Communications Engine)是ZeroC提供的一款高性能的中间件&#xff0c;基于ICE可以实现电信级的解决方案。在设计网站架构的时候可以使用ICE实现对网站应用的基础对象操作&#xff0c;将基础对象操作和数据库操作封装在这一层&#xff0c;在业务逻辑层以及…

Pyside6 安装和简单界面开发

Pyside6 安装和简单界面开发 Pyside6介绍Pysied6开发环境搭建Python安装Pysied6安装 Pyside6界面开发简单界面设计界面设计界面编译 编写界面初始化代码软件打包 Pyside6介绍 对于Python的GUI开发来说&#xff0c;Python自带的可视化编程模块的功能较弱&#xff0c;PySide是跨…

【11】c++设计模式——>单例模式

单例模式是什么 在一个项目中&#xff0c;全局范围内&#xff0c;某个类的实例有且仅有一个&#xff08;只能new一次&#xff09;&#xff0c;通过这个唯一的实例向其他模块提供数据的全局访问&#xff0c;这种模式就叫单例模式。单例模式的典型应用就是任务队列。 为什么要使…

12P2532X162-233A KJ3222X1-BA1 CE4003S2B3 EMERSON CONTROLLER

12P2532X162-233A KJ3222X1-BA1 CE4003S2B3 EMERSON CONTROLLER EDGEBoost I/O模块是一种可扩展的模块化解决方案&#xff0c;集成到Premio的工业计算机中&#xff0c;通过即插即用的可扩展性提供增强的可靠性。这些附加模块有助于解决在加固边缘出现的设计限制和兼容性问题。…

JDBC-day01(JDBC概述,获取数据库连接)

一&#xff1a;JDBC概述 1.数据持久化 持久化(persistence)&#xff1a;把数据保存到可掉电式存储设备中以供之后使用。大多数情况下&#xff0c;数据持久化意味着将内存中的数据保存到硬盘上加以”固化”&#xff0c;而持久化的实现过程大多通过各种关系数据库来完成。简单来…