Vue基本使用-02

   上节我们讲了什么是mvvm模型,以及我们vue的一些常用指令,今天给大家讲一下vue的基本使用,在将之前我们需要重点讲解我们的一个指令,v-model指令

   v-model

    v-model 可以在组件上使用以实现双向绑定,什么是双向绑定呢?意思就是当我们的数据发生变化的时候,我们的视图也会跟着变化;视图发生变化的时候,我们的数据也会发生变化

    你可以用 v-model 指令在表单 <input><textarea> 及 <select> 元素上创建双向数据绑定。它会根据控件类型自动选取正确的方法来更新元素。尽管有些神奇,但 v-model 本质上不过是语法糖。它负责监听用户的输入事件以更新数据,并对一些极端场景进行一些特殊处理。

   话多说直接上代码!!!!!

     在这里我们定义了一个input最基本的输入框,唯一的不同是让他对 msg 这个数据进行了双向绑定,并且我们还展示了一下我们的 msg 这个属性的值

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title></title>
		<script src="../static/vue.global.js"></script>
	</head>
	<body>
		<div id="app">
	       测试:<input type="text" v-model="msg"><br>
		   {{msg}} 
		</div>
		<script>
			const app=Vue.createApp({
		      data() {
		      	return {
		      		msg:"aaa"	
		      	}
		      }
	 })		
		 app.mount("#app")
		</script>
	</body>
</html>

       效果:当我们的视图发生了变化,数据也会跟着变化.

0f33ee92cfa549cca144a5c61e28162d.png 

   这里我们还可以对 <select/>:下拉框     <textarea/>:文本框等做一些常用的案例,我会给大家一一解释我们的意思是什么

我们直接从性别开始: 

        在这里我们使用的是input的radio属性,声明它是一个单选框,value 是选择的值,这里我们使用的是0或者1,也可以写作男或者女,他们都对sex属性进行了双向绑定,我们标签后面的男或者女是为了在视图中显示,没有任何实际作用,当我们的男被选中,我们的双向绑定就会将被选中的这个值 value 赋值给 sex属性,也就是 sex就是0

       爱好:

        在这里我们先需要定义一个数组,用来存储我们的爱好,因为我们的爱好不会只有一个的,跟刚才性别的逻辑是一样的,当我们的多选框的某一个被选中之后,会将value的值,存放到我们双向绑定的happy属性中

       班级:

        我们的下拉框的值只有一个,所以只需要定义一个空字符,将其绑定到下拉框的select上,为什么我们不需要写value属性呢?在我们有开闭标签时,是不需要写任何的value,我们就可以获取到开闭标签中间值的,什么是开闭标签呢? <option></option>有开始有结束就是开闭标签 还有一种方式是<input/> 这个是需要写我们的value属性的。

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title></title>
		<script src="../static/vue.global.js"></script>
	</head>
	<body>
		<div id="app">
	       测试:<input type="text" v-model="msg"><br>
		   {{msg}} <br/>
		   性别:<input type="radio" name="sex" value="0" v-model="sex">男
		   <input type="radio" name="sex" value="1" v-model="sex">女
		    <br>
			展示性别: {{sex}}
			<br>
			爱好:
			<input type="checkbox" value="rapper" name="happy" v-model="happy">rapper
			<input type="checkbox" value="打篮球" name="happy" v-model="happy">打篮球
			<input type="checkbox" value="唱" name="happy" v-model="happy">唱
			<input type="checkbox" value="跳" name="happy" v-model="happy">跳
			<br>
			爱好:{{happy}}
			<br>
			班级:<select v-model="aaa">
				<!--为什么不用加value,因为我们的下拉框有默认值,就是没有value的是时候,我们的值就是标签中间的值-->
				<option value="A365">A365</option>
				<option value="A265">A265</option>
				<option value="A165">A165</option>
			</select>
	         {{aaa}}
			 <br>
			 文本框:
			 <textarea v-model="bbb"></textarea>
			 {{bbb}}
		</div>
		<script>
			const app=Vue.createApp({
		      data() {
		      	return {
		      		msg:"aaa",
					sex:"0",
					happy:["rapper"],
					aaa:"A365",
					bbb:"aa"
		      	}
		      }
			
	 })		
		 app.mount("#app")
		</script>
	</body>
</html>

v-on

  • 缩写@

  • 预期Function | Inline Statement | Object

  • 参数event

  • 修饰符

    • .stop - 调用 event.stopPropagation()
    • .prevent - 调用 event.preventDefault()
    • .capture - 添加事件侦听器时使用 capture 模式。
    • .self - 只当事件是从侦听器绑定的元素本身触发时才触发回调。
    • .{keyCode | keyAlias} - 只当事件是从特定键触发时才触发回调。
    • .native - 监听组件根元素的原生事件。
    • .once - 只触发一次回调。
    • .left - (2.2.0) 只当点击鼠标左键时触发。
    • .right - (2.2.0) 只当点击鼠标右键时触发。
    • .middle - (2.2.0) 只当点击鼠标中键时触发。
    • .passive - (2.3.0) 以 { passive: true } 模式添加侦听器

用法

       绑定事件监听器。事件类型由参数指定。表达式可以是一个方法的名字或一个内联语句,如果没有修饰符也可以省略。

        用在普通元素上时,只能监听原生 DOM 事件。用在自定义元素组件上时,也可以监听子组件触发的自定义事件

        在监听原生 DOM 事件时,方法以事件为唯一的参数。如果使用内联语句,语句可以访问一个 $event property:v-on:click="handle('ok', $event)"

      直接上代码!!!

      我们直接用的是简写形式,@click,如果不喜欢的话我们可以使用v-on:click,我们只是声明的点击事件,我们还可以声明其他的事件, 语法 v-on:动作=“方法名字(参数)”

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title></title>
		<script src="../static/vue.global.js"></script>
	</head>
	<body>
		<div id="app">
			<button @click="test1()">普通按钮1</button>
			<button @click.once="test2()">once按钮2</button>
			<button @click.left="test3()">left按钮3</button>
			<button @click.right="test4()">right按钮4</button>
		</div>
		<script>
			const app=Vue.createApp({
			methods: {
			 	test1(){
			 		alert("点击事件")
			 	},
				test2(){
					alert("once,只会触发一次")
				},
				test3(){
					alert("left 鼠标左键点击")
				},
				test4(){
					alert("rigth 鼠标右键点击")
				}
			}

	 })		
		 app.mount("#app")
		</script>
	</body>
</html>

 简易轮播图

   这里我们使用到了 v-bind,以及鼠标点击事件

    思路: 通过点击事件,每点一次,照片路径的数组就切换,如果到最后一个照片,索引从0开始切换

    这里我们先定义一个数组,里面存放的是我们照片的路径,再定义一个初始为0的索引,让我们的img这个标签的src属性绑定,可以相当于识别出我们的imgs是谁,index是谁,然后就是我们的点击事件,每次点击,索引加一,意思就是 本来是 src="imgs[0]",点击一次按钮就是 src="imges[1]"

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title></title>
		<script src="../static/vue.global.js"></script>
		<style>
			img{
				width: 100px;
				heigth:100px
			}
		</style>
	</head>
	<body>
		<div id="app">
			<img :src="imgs[index]"/>
			<button @click="changeImge()">切换</button>
		</div>
		<script>
			const app=Vue.createApp({
		      data() {
		      	return {
		      		imgs:["../static/img/1.jpg","../static/img/2.jpg","../static/img/3.jpg","../static/img/4.jpg","../static/img/5.jpg"],
					index:0
		      	}
		      },
			  methods: {
			  	changeImge() {
					if(this.index>=this.imgs.length-1){
						this.index=0
					}else{
						this.index++
					}
			  		
			  	}
			  },
	 })		
		 app.mount("#app")
		</script>
	</body>
</html>

 watch

    watch:用于监听数据的变化,当数据发送变化的时候,我们可以进行一些逻辑操作.

      这里我们的案例是: 当m 这个属性发生变化的时候,km也随着变化,我们输入2000m,km的输入框会变成2,输入3000m,km的输入框会变成3……

     我们的watch是一个属性,属性里面是我们监听的哪个属性 属性名(新值,旧值){ 逻辑代码 }

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title></title>
		<script src="../static/vue.global.js"></script>
		<style>
			img{
				width: 100px;
				heigth:100px
			}
		</style>
	</head>
	<body>
		<div id="app">
			m:<input type="text" v-model="m"><br>
			km:<input type="text" v-model="km"><br>
		</div>
		<script>
			const app=Vue.createApp({
		      data() {
		      	return {
		      		m:"1000",
					km:"1"
		      	}
		      },
			watch: {
				m(newValue, oldValue) {
				this.km=this.m/1000
				}
			},
		
	 })		
		 app.mount("#app")
		</script>
	</body>
</html>

computed

       计算属性是vue的强大功能之一,假如我们的逻辑代码中只需要拿到一个值,都可以放在我们的计算属性之中,计算属性的结果会被缓存,也就是说,当第一次调用的时候,才会被计算,计算之后被放在缓存之中,为我们节省了许多的资源,只要内部的数据发生变化,还是会重新进行计算

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title></title>
		<script src="../static/vue.global.js"></script>
	</head>
	<body>
		<div id="app">
		 {{add()}}
         {{add()}}
		 {{sex}}
		 {{sex}}
		 {{sex}}
		</div>
		<script>
			const app=Vue.createApp({
				data(){
					return{
						idcard:"410424200101274021"
					}
				},
		     	methods: {
			 	add(){
			 		console.log("方法执行")
					return this.idcard.substr(16,1)%2==0?"女":"男";
			 	}
			},
			computed: {
				sex() {
					console.log("计算属性执行")
					return this.idcard.substr(16,1)%2==0?"女":"男";
				}
			},

	 })		
		 app.mount("#app")
		</script>
	</body>
</html>

 我们是调用了两次方法,三次计算属性,我们可以发现计算属性只是被调用了一次,其他都是从缓存里拿的

152f6b692a80483ca9aec779f90ba2b4.png

 component组件

     

      组件(component)是vue.js最强大的功能之一。组件的作用就是封装可重用的代码,通常一个组件就是一个功能体,便于在多个地方都能够调用这个功能体。 每个组件都是Vue的实例对象。 我们实例化的Vue对象就是一个组件,而且是所有组件的根组件 ,在我的理解看来,组件就是一个标签,这个标签内有什么需要你自己定义,然后向拼积木一样,拼起来搭建一个自己的网站

    每个组件都会有自己的方法以及数据,并且他们是不会互相干涉的,当两个重复的组件使用时,数据是不会共享的

 全局组件     

      my-test就是我们组件的名字自定义的标签,官方建议我们使用 xx-xx的形式来写,或者是驼峰命名的方式

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title></title>
		<script src="../static/vue.global.js"></script>
		
	</head>
	<body>
		<div id="app">
				<my-test></my-test>
				<my-test></my-test>
				<my-test></my-test>
		</div>
		<script>
			const app=Vue.createApp()		
	        /*  定义组件  全局组件 */
	             app.component("my-test",{
	                 data(){
	                     return {
	                         name:"test"
	                     }
	                 },
	                 template:
	                `<div>
	                     <div>我就是一个测试</div>
	                     <button @click='test'>按钮</button>
	                 </div>`
	                 ,
	                 methods:{ 
	                     test(){
	                         alert("这就是一个测试的按钮呀  "+this.name)
	                     }
	                 }
	             })
		 app.mount("#app")
		</script>
	</body>
</html>

   局部组件

   在vue的实例对象中内部注册我们的组件

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title></title>
		<script src="../static/vue.global.js"></script>
		
	</head>
	<body>
		<div id="app">
			<xue-cheng></xue-cheng>
		</div>
		<script>
			const app=Vue.createApp({
		      components:{
				  "xue-cheng":{
					  template:"<h1>111</h1>"
				  }
			  }	
	 })		
		 app.mount("#app")
		</script>
	</body>
</html>

 

 

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

[C#]使用C#部署yolov10的目标检测tensorrt模型

【测试通过环境】 win10 x64vs2019 cuda11.7cudnn8.8.0 TensorRT-8.6.1.6 opencvsharp4.9.0 .NET Framework4.7.2 NVIDIA GeForce RTX 2070 Super cuda和tensorrt版本和上述环境版本不一样的需要重新编译TensorRtExtern.dll&#xff0c;TensorRtExtern源码地址&#xff1a;T…

IP地址、子网掩码、网段、网关

前面相同就是在同一个网段 如果子网掩码和网络号相与的结果是一样的&#xff0c;那么他们就在同一个子网 IP地址、子网掩码、网络号、主机号、网络地址、主机地址以及ip段/数字-如192.168.0.1/24是什么意思?_掩码248可以用几个ip-CSDN博客

第九届星华杯网络邀请赛

T1喵星人的身高 T2犇犇碑 T3嘤嘤词典 T4三角区间和

REST风格

黑马程序员Spring Boot2 文章目录 1、REST简介1.1 优点1.2 REST风格简介1.3 注意事项 2、RESTful入门案例 1、REST简介 1.1 优点 隐藏资源的访问行为&#xff0c;无法通过地址的值对资源适合中操作书写简化 1.2 REST风格简介 按照RST风格访问资源时使用行为动作区分对资源进…

滚珠螺杆失效的常见原因及应对措施!

滚珠螺杆&#xff0c;由螺杆、螺母、钢球、预压片、反向器和防尘器组成&#xff0c;是精密机床中必不可少的组件&#xff0c;也是工业界使用最广泛的零组件之一。在长期使用过程中&#xff0c;滚珠螺杆难免会发生失效或运动停止的情况&#xff0c;影响机械设备的正常运行和最终…

PlugLink:让数据分析与工作流无缝连接(附源码)

PlugLink&#xff1a;让数据分析与工作流无缝连接 引言 数据分析和自动化工作流已成为各个企业和个人提高效率的关键手段。今天&#xff0c;我要介绍一款名为PlugLink的工具&#xff0c;它不仅能帮助你轻松进行数据分析&#xff0c;还能将这些分析结果无缝连接到你的工作流中&…

视频信号发生器上位机

在液晶屏测试、电视机信号测试、视频处理器测试中&#xff0c;经常需要使用视频信号发生器&#xff0c;市场上专业的视频信号发生器通常需要大几千元&#xff0c;多则上万元&#xff0c;而且设备测试仪器是一套硬件&#xff0c;没有办法像软件一样复制传播。所以我开发了一套基…

12月5-7日西安氢能源及燃料电池产业博览会

展会概况&#xff1a; 作为战略性新兴产业&#xff0c;发展氢能已经成为全国各地布局未来产业的重要方向。2023年以来&#xff0c;在政策与市场的双重驱动下&#xff0c;氢能的应用领域正在不断拓展和创新&#xff0c;当前我国氢能源迎来发展热潮&#xff0c;预计到 2025 年国…

L52--- 144. 二叉树的后序遍历(深搜)---Java版

1.题目描述 2.思路 (1)二叉树后序遍历&#xff1a;左右根 (2)根节点的压入: 根节点首先被压入stack中&#xff0c;然后被弹出并压入output中。 遍历过程: stack用于存储需要遍历的节点。 output用于反转遍历顺序。 入栈顺序: 左子节点先入栈&#xff0c;右子节点后入栈。这…

GStreamer 源码编译,在 Clion 下搭建调试环境

前言 最近在学习 GStreamer&#xff0c;官方提供了一些教程&#xff0c;本人希望能够断点调试&#xff0c;以便学习代码逻辑。本文记录如何在 Clion 搭建 GStreamer 源码编译、调试环境 步骤 下载源码 git clone https://gitlab.freedesktop.org/gstreamer/gstreamer.gitCl…

GoogLeNet(InceptionV3)模型算法

GoogLeNet 团队在给出了一些通用的网络设计准则&#xff0c;以期望在不提高网络参数 量的前提下提升网络的表达能力&#xff1a; 避免特征图 (feature map) 表达瓶颈&#xff1a;从理论上讲&#xff0c;尺寸 (seize) 才包含了相关结构等重要因素&#xff0c;维度(channel) 仅仅…

【C++】stack、queue和deque的使用

&#x1f497;个人主页&#x1f497; ⭐个人专栏——C学习⭐ &#x1f4ab;点击关注&#x1f929;一起学习C语言&#x1f4af;&#x1f4ab; 目录 导读 一、stack 1. stack介绍 2. stack使用 二、queue 1. queue介绍 2. queue使用 三、deque 1. deque介绍 2. deque的…

6个免费自动写文章软件,简直好用到爆

对于创作者而言&#xff0c;创作一篇高质量的文章并非易事&#xff0c;它需要耗费大量的时间与精力去构思、组织语言、斟酌字句。灵感并非总是源源不断&#xff0c;有时我们可能会陷入思维的僵局&#xff0c;不知从何下手。而此时&#xff0c;免费自动写文章软件就如同黑暗中的…

pdf structuredClone is not defined 解决

问题 部分手机系统的浏览器 pdf v2版本会出现 structuredclone is not defined 的报错&#xff0c;这是因为浏览器过低 解决 查看structuredClone的浏览器兼容性 structuredClone api 文档 polyfill 网站下方有个 polyfill的网址入口 可以解决低版本的兼容问题 相应网址…

官方文档 搬运 MAXMIND IP定位 mysql导入 简单使用

官方文档地址&#xff1a; 官方文档 文件下载 1. 导入mysql可能报错 Error Code: 1290. The MySQL server is running with the --secure-file-priv option so it cannot execute this statement 查看配置 SHOW GLOBAL VARIABLES LIKE %secure%;secure_file_priv 原来…

动作识别综合指南

本文将概述当前动作识别&#xff08;action recognition&#xff09;的方法和途径。 为了展示动作识别任务的复杂性&#xff0c;我想举这个例子&#xff1a; 你能明白我在这里做什么吗&#xff1f;我想不能。至少你不会确定答案。我正在钻孔。 你能弄清楚我接下来要做什么吗&…

C++11移动语义

前言 之前我们已经知道了在类里开辟数组后&#xff0c;每一次传值返回和拷贝是&#xff0c;都会生成一个临时变量 class Arr { public://构造Arr() {/*具体实现*/ };//拷贝Arr(const Arr& ar) {/*具体实现*/ };//重载Arr operator(const Arr& ar) { /*具体实现*/Arr …

Mybatis动态sql标签

动态SQL标签简介: MyBatis的一个强大的特性之一通常是它的动态SQL能力。如果你有使用JDBC或其他相似框架的经验,你就明白条件地串联SQL字符串在一起是多么的痛苦,确保不能忘了空格或在列表的最后省略逗号。动态SQL可以彻底处理这种痛苦。 Mybatis中实现动态sql的标签有&#x…

vue 安装依赖报错

解决方法&#xff1a; npm install --legacy-peer-deps 然后再运行项目即可。

微前端乾坤方案

微前端乾坤方案 了解乾坤 官方文档 介绍 qiankun 是一个基于 single-spa 的微前端实现库&#xff0c;旨在帮助大家能更简单、无痛的构建一个生产可用微前端架构系统。 qiankun 的核心设计理念 &#x1f944; 简单 由于主应用微应用都能做到技术栈无关&#xff0c;qiankun 对…