Vue 数据双向绑定

news2024/11/24 15:59:02
双向数据绑定 : 通过前面学习知道 Vue 是数据驱动的,数据驱动有一个精髓之处是数据双向绑定, 即当数据发生变化的时候,视图也就发生变化,当视图发生变化的时候,数据也会跟着同步变化。(就是mvvm数据发生变化的更新策略)
<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title>首页</title>
    <link href="" type="text/css" rel="stylesheet"/>
    <script src="https://unpkg.com/vue@3"></script>
    <style type="text/css">

    </style>
</head>

<body>    
    <div id="vue">
       <input type="text" v-model="msg">
       <p>{{ msg }}</p>

    </div>

    <script type="text/javascript">
        const HelloVueApp = {
            data(){
                return{
                    msg: "Hello"
                }
            }
        } 
    //挂载到html当中
    Vue.createApp(HelloVueApp).mount('#vue')

    </script>

</body>

</html>
v-model 指令其实是一个语法糖,背后本质上包含 v-bind v-on 两个操作。
<input v-model="sth" />
// 等同于
<input :value="sth" @input="sth = $event.target.value" />

首先使用v-bind绑定一个value,v-bind是用来绑定变量的,因为value是其固定属性,value后面是变量的名称,input的值其实就是sth变量的值。

同时还干了一件事情就是v-on,就是@input,监听的就是input的效果。当你的输入框输入的东西那么元素就发生变化了,它监听的就是你输入框的一个东西。

输入东西和删除东西也好,输入框发生变化就会触发@input="sth = $event.target.value",这个就是拿到具体事件的具体值。

详解
  • $event 指代当前触发的事件对象。
  • $event.target 指代当前触发的事件对象的dom
  • $event.target.value 就是当前domvalue值  (就是输入框中间的值,然后再赋值到sth上面去)

v-bind是用来处理data()里面变量绑定到input里面的值,但是如果input发生了变化,那么发生变化的值会给到data里面sth。也就是上面发生变化给到下面,下面发生变化给到上面。

input输入框,绑定了message的值,input是事件的监听,然后调用input的方法,这个方法里面传event,这个就是将event给到message。

<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title>首页</title>
    <link href="" type="text/css" rel="stylesheet"/>
    <script src="https://unpkg.com/vue@3"></script>
    <style type="text/css">

    </style>
</head>

<body>    
    <div id="vue">
       <input type="text" :value="msg" @input="input($event)">
       <p>{{ msg }}</p>

    </div>

    <script type="text/javascript">
        const HelloVueApp = {
            data(){
                return{
                    msg: "Hello v-model"
                }
            },
            methods:{
              input(event){
                 this.msg = event.target.value
                 console.log(event.target.value,this.msg)
              }
            }
        } 
    //挂载到html当中
    Vue.createApp(HelloVueApp).mount('#vue')

    </script>

</body>

</html>

可以看到当值每次发生变化的时候,它的message都是赋值成功的。event.target.value它其实就是dom里面的值,其实就是dom元素里面具体的值。其实就是输入框里面的值发生了变化给到了msg。

v-model: 单选框

单选框(radio): 单个选择结果绑定到一个v-model的值中

<input type="radio" value="go" v-model="msg">Go</input>   Go是显示给用户看的,正真绑定到msg的值的是value对应的值。

<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title>首页</title>
    <link href="" type="text/css" rel="stylesheet"/>
    <script src="https://unpkg.com/vue@3"></script>
    <style type="text/css">

    </style>
</head>

<body>    
    <div id="vue">
       <input type="radio" value="go" v-model="msg">Go</input>
       <input type="radio" value="vue" v-model="msg">Vue</input>
       <p>{{ msg }}</p>

    </div>

    <script type="text/javascript">
        const HelloVueApp = {
            data(){
                return{
                    msg: ""
                }
            }
        } 
    //挂载到html当中
    Vue.createApp(HelloVueApp).mount('#vue')

    </script>

</body>

</html>

v-model: 多选框
多选框 (checkbox) : 多个选择结果绑定到一个 v-model 的值中
<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title>首页</title>
    <link href="" type="text/css" rel="stylesheet"/>
    <script src="https://unpkg.com/vue@3"></script>
    <style type="text/css">

    </style>
</head>

<body>    
    <div id="vue">
       <input type="checkbox" value="swim" v-model="selected">游泳</input>
       <input type="checkbox" value="gim" v-model="selected">健身</input>
       <input type="checkbox" value="travel" v-model="selected">旅游</input>
       <p>{{ selected }}</p>

    </div>

    <script type="text/javascript">
        const HelloVueApp = {
            data(){
                return{
                    selected: []
                }
            },
            watch:{
                selected(){
                    console.log(this.selected)
                }
            }
        } 
    //挂载到html当中
    Vue.createApp(HelloVueApp).mount('#vue')

    </script>

</body>

</html>

 

 

上面就是复选框结合v-moduel的使用。

 

 

v-model:登录案例

登录案例:获取用户输入用户名和密码

<form action="#">是要去提交到哪个url,正常情况下是https"//xxxxxx,#表示还是在原来的页面,这样就不乱跳了。

高度封装的框架,减少对dom的操作,包括element ui这些组件,它其实都帮你做了这些事情。无论是美观性还是功能性都会非常简单,都不需要使用form这么老的方式去做了。

<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title>首页</title>
    <link href="" type="text/css" rel="stylesheet"/>
    <script src="https://unpkg.com/vue@3"></script>
    <style type="text/css">

    </style>
</head>

<body>  
    <h1>欢迎来到管理页面后台</h1>  
    <div id="vue">
       <form action="#">
       用户名:<input type="text" v-model="form.username">
       密码:<input type="text" v-model="form.password">
       <button @click="loginBtn()">登入</button>
    </form>
       <p style="color:brown" v-if="notice">用户名密码不能为空!</p>


    </div>

    <script type="text/javascript">
        const HelloVueApp = {
            data(){
                return{
                    form:{
                        username: "",
                        password: "",
                    },
                    notice: false
                }
            },
            methods:{
                loginBtn(){
                    if(this.form.username == "" || this.form.password == ""){
                       this.notice = true
                    }else{
                        this.notice = false
                        console.log(this.form)
                    }
                }
            }
        } 
    //挂载到html当中
    Vue.createApp(HelloVueApp).mount('#vue')

    </script>

</body>

</html>

v-for必须掌握,因为前后端的交互,肯定是有很多的列表,数组的数据。返回的是json,json里面是每个元素都是对象。这个对象你想用什么数据就拿这个数据。(遍历数组和对象)

v-if 显示或者隐藏,包括条件判断if  else。v-show只是做显示隐藏的。

 

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

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

相关文章

MyCat2 使用教程(一)初始安装

MyCat2 使用教程&#xff08;一&#xff09;初始安装 Mycat2是Mycat社区开发的一款分布式关系型数据库&#xff08;中间件&#xff09;。它支持分布式SQL查询&#xff0c;兼容MySQL通信协议&#xff0c;以Java生态支持多种后端数据&#xff0c;通过数据分片提高数据查询处理能…

【C++】5.多线程:ThreadPoll线程池实现

&#x1f60f;★,:.☆(&#xffe3;▽&#xffe3;)/$:.★ &#x1f60f; 这篇文章主要介绍ThreadPoll线程池实现。 学其所用&#xff0c;用其所学。——梁启超 欢迎来到我的博客&#xff0c;一起学习&#xff0c;共同进步。 喜欢的朋友可以关注一下&#xff0c;下次更新不迷路…

Web3.0 在中国市场的规模如何?其特点有什么?

随着区块链技术的不断发展和普及&#xff0c;Web3.0 作为下一代互联网的发展趋势&#xff0c;在中国市场也逐渐受到了关注和应用。那么&#xff0c;Web3.0 在中国市场的规模如何&#xff1f;其特点又有哪些呢&#xff1f; 首先&#xff0c;让我们来看一下 Web3.0 在中国市场的规…

Python3,Pandas这4种高频使用的筛选数据的方法,不得不说,确实挺好。

Pandas数据筛选方法 1、引言2、4种高频使用数据筛选方法2.1 布尔索引2.2 isin()方法2.3 query()方法2.4 loc[]方法 3、总结 1、引言 小屌丝&#xff1a;鱼哥&#xff0c;share一下 数据筛选的方法呗 小鱼&#xff1a;Excel就可以啊 小屌丝&#xff1a;我要用Pandas 小鱼&#…

0073. 矩阵置零

73. 矩阵置零 原题链接&#xff1a;完成情况&#xff1a;解题思路&#xff1a;解法一&#xff1a;构造一个同等规模的二维数组&#xff0c;即所谓的m*n解法二&#xff1a; int row[] new int[m]; int col[] new int[n];解法三&#xff1a;常数量级 参考代码&#xff1a; 原题…

软件测试技能,JMeter压力测试教程,请求头部自动签名带上X-sign参数(二十二)

一、前言 接口请求 body 带有 sign 签名参数&#xff0c;sign 签名是根据请求 body 除去 sign 本身参数后&#xff0c;拼接请求参数最后 md5 加密生成的 前面一篇是把 sign 前面参数放到请求的 body 里面&#xff0c;这篇继续讲把签名参数放到请求头部的情况 二、实现方式 …

3Ds Max坐标轴切换,使用物体的世界坐标和本地坐标之间切换

标题&#xff1a;当挪动物体的时候想使用&#xff08;本地&#xff09;/&#xff08;世界&#xff09;坐标移动 官方文档 https://help.autodesk.com/view/3DSMAX/2023/CHS/?guidGUID-0F3E2822-9296-42E5-A572-B600884B07E3官方文档 使用“参考坐标系”列表&#xff0c;可以…

怎么把音乐的伴奏提取出来?分享几个方法给大家!

歌曲伴奏提取是一种将歌曲中的人声去除&#xff0c;获得只含伴奏的音乐文件的方法。这项技术可以广泛应用于伴唱、演奏、混音等领域。以下将详细介绍四种常用的歌曲伴奏提取方法&#xff0c;并提供记灵在线工具的使用说明&#xff0c;让您能轻松进行伴奏提取。 一、使用记灵在线…

Linux下载不同版本的gcc与g++并编译,演示安装gcc11

1. 引言 系统: ubuntu 1804点我进入清华源-GCC链接: https://mirror.tuna.tsinghua.edu.cn/gnu/gcc/ 2. 下载编译指定版本gcc 2.1 下载一个低版本g 为了保证后续安装gcc能编译通过&#xff0c;且安装g同时也会安装gcc&#xff01; sudo apt-get install g2.2 下载指定gcc…

KD06丨超级趋势线第4版大升级

大家好&#xff0c;今天我们来分享可达鸭策略最后一期——超级趋势线第4版&#xff0c;进出场自适应大升级。 从2021年开始&#xff0c;我开始分享超级趋势线系列策略。在最初超级趋势线主体构造不断改造&#xff0c;到加入过滤&#xff0c;到出场迭代等等&#xff0c;历经大版…

Vue中的el-date-picker时间选择器的使用

1、value-format属性设置需要什么格式的时间 2、type类型选择datetime、date 年月日时分秒 <el-date-pickervalue-format"yyyy-MM-dd HH:mm:ss"v-model"excelRuleForm.startTime"type"datetime":placeholder"选择开始时间"> &…

统信UOS系统开发笔记(八):在统信UOS上编译搭建mqtt基础环境(版本使用QMQTT::Client)

若该文为原创文章&#xff0c;转载请注明原文出处 本文章博客地址&#xff1a;https://hpzwl.blog.csdn.net/article/details/131455493 红胖子(红模仿)的博文大全&#xff1a;开发技术集合&#xff08;包含Qt实用技术、树莓派、三维、OpenCV、OpenGL、ffmpeg、OSG、单片机、软…

android实现hook其它应用代码和方法调用(无root)

上次讲过无root实现复制其它应用data内部数据&#xff0c;这次讲一下无root情况下直接访问目标应用进程&#xff0c;然后对其进行hook操作&#xff0c;这种跨进程hook的原理是通过dex注入和资源文件修改来实现的。 首先在android studio中创建一个模块&#xff0c;在模块中创建…

ROS学习笔记(实践三)--常见相机问题整理

目录 1.普通的usb摄像头使用 1.普通的usb摄像头使用 安装ros功能包 sudo apt-get install ros-kinetic-usb-cam //注意ros版本 //启动roslaunch usb_cam usb_cam-test.launch启动后弹出如下窗口&#xff1a; 需要修相机驱动时&#xff0c;可以使用源码安装&#xff0c;源码…

基于JavaWeb的网络不良信息举报平台的设计与实现

1.引言 随着互联网的快速发展&#xff0c;网络不良信息问题日益突出&#xff0c;给人们的生活和社会秩序带来了严重的困扰。网络不良信息包括色情、暴力、赌博、诈骗等不良内容&#xff0c;这些信息的传播对青少年的身心健康产生不良影响&#xff0c;也破坏了社会的良好秩序和…

在 7 月 4 日,PoseiSwap 治理通证 $POSE 上线了 BNB Chain 上的头部

在 7 月 4 日&#xff0c;PoseiSwap 治理通证 $POSE 上线了 BNB Chain 上的头部 DEX PancakeSwap&#xff08;POSE/ZBC 交易对&#xff09;&#xff0c;在 $POSE 开盘交易的 10 分钟内&#xff0c;其最高涨幅达到了 2169.22%&#xff0c;所有的早期投资者基本都从中获得了不菲的…

request请求获取参数的实现方法(post和get两种方式)

request请求获取参数的实现方法(post和get两种方式) Servlet代码&#xff1a; package request请求获取Post或者get参数; import java.io.IOException; import java.util.Arrays; import java.util.Enumeration; import java.util.Iterator; import java.util.Map; impo…

Halcon印字缺陷检测

印字缺陷检测 在半导体行业&#xff0c;印字缺陷检测占了很大比例。打印标签上字符的缺失、字符的脏污等印字不良都需要检出。基于匹配和印字区域作差的检测算法思路如下&#xff1a; #mermaid-svg-bmN5WE1wE1PqpI51 {font-family:"trebuchet ms",verdana,arial,san…

论文笔记:Traffic Flow Prediction via Spatial Temporal Graph Neural Network

WWW 2020 1 模型 图神经网络图注意力——空间依赖关系 RNNTransformer——短期&长期依赖关系 缺点&#xff1a;运用RNN于较长序列仍然会带来误差积累&#xff0c;并且RNN模型的运算效率并不高 2 实验

IDEA全版本MyBatisCodeHelper Pro免费使用教程(全部版本适用)

版本说明 系统&#xff1a;macOS&#xff08;Windows同理&#xff09;IDE&#xff1a;IntelliJ IDEA 2023.1.3 &#xff08;哪个版本都可以&#xff09;MyBatisCodeHelper Pro 3.2.1&#xff08;哪个版本都可以&#xff09; 环境准备 从插件市场下载MyBatisCodeHelper Pro 领…