Vue2(五):收集表单数据、过滤器、自定义指令、Vue的生命周期

一、收集表单数据

爱好:学习<input type="checkbox" value="study" v-model="hobby">打游戏<input type="checkbox" value="games" v-model="hobby">吃饭<input type="checkbox" value="eat" v-model="hobby">

这种写法为啥一勾三个全勾呢?

(1)不配置value的话,默认收集的是checkbox,然后hobby被选为true,其他两个一看hobby是true也就选上了,但是我写了value还是不对

(2)hobby默认值不能是‘ ’

多选框要设置type、value、v-model对应的设置为数组

<body><div id="root"><form @submit.prevent="demo"><!-- 填完信息把信息提交整个表单,而且防止button提交之后跳转页面 --><label for="demo" >账号:</label><!-- 这样写一个label,点击账号两个字就能在input框里获取焦点了 --><input type="text" id="demo" v-model.trim="userInfo.account"><!-- .trim可以忽略   ab c  (获得ab  c) --><br><br/>密码:<input type="password" v-model="userInfo.password"><br><br/><!-- 账号和密码输入什么值value就是啥,但是单/多选框没法输入 -->年龄:<input type="number" v-model.number="userInfo.age"><!-- 设成type:number可以忽略用户输入的文字 v-model.number是vue提供的,输入到后台就是数字18不是字符串18--><br><br/>性别:男<input type="radio" name="sex" value="man" v-model="userInfo.sex">女<input type="radio" name="sex" value="woman" v-model="userInfo.sex"><br><br/>爱好:学习<input type="checkbox" value="study" v-model="userInfo.hobby">打游戏<input type="checkbox" value="games" v-model="userInfo.hobby">吃饭<input type="checkbox" value="eat" v-model="userInfo.hobby"><br><br/>所属校区<select v-model="userInfo.city"><option value="" >请选择校区</option><option value="beijing">北京</option><option value="shenzhen">深圳</option><option value="shanghai">上海</option><option value="guangdong">广东</option></select><br><br/>其他信息:<textarea v-model.lazy="userInfo.other"></textarea><!-- 加上.lazy就会失去焦点的时候再去读入写的啥,不会实时获取 --><br><br/><input type="checkbox" v-model="userInfo.agree">阅读并接受<a href="#">《用户协议》</a> <button>提交</button></form></div><script type="text/javascript">const vm=new Vue({el:'#root',data:{userInfo:{password:'',account:'',age:'',sex:'woman',//默认选择女hobby:[],city:'beijing',//默认值agree:'',//这样单选框就不用设置value,就一个点了就是true否则几句诗false}},methods: {demo(){console.log(JSON.stringify(this.userInfo))//交给后端的方法,但是直接提交data不太好}},})

v-model.lazy:实现不用实时收集,输入框失去焦点再收集
v-model.number:输入的字符串收集为数字(Vue内部做了数据转换),经常和type="number"一起用
v-model.trim:收集时去掉输入的首尾空格

二、过滤器

1.过滤器定义

定义:对要显示的数据进行特定格式化后再显示(适用于一些简单逻辑的处理比如价格1999改成1,999等需求,复杂的用计算属性或方法)。
语法:
1、注册过滤器:Vue.filter(name,callback) 或 new Vue{filters:{}}
2、使用过滤器:{{ xxx | 过滤器名}} 或 v-bind:属性 = "xxx | 过滤器名"(用的少)
备注:
1、过滤器也可以接收额外参数、多个过滤器也可以串联
2、并没有改变原本的数据, 是产生新的对应的数据

过滤器两种用法:插值语法、v-bind

2.案例:过滤器格式化时间戳:

<body><div id="root"><h2>显示格式化之后的时间</h2><!-- 计算属性实现 --><h3>现在是:{{fmtTime}}</h3><!-- methods实现 --><h3>现在是:{{getFmtTime()}}</h3><!-- 是方法就得加()调用 --><!-- 过滤器实现 要改谁就直接写它名儿--><h3>现在是:{{time | timeFormaters}}</h3><h3>现在是:{{time | timeFormaters('YYYY-MM-DD')}}</h3><!-- 拿着time传给timeFormaters返回值直接到{{}}里面,也就是time是个参数 --><!-- 过滤器可以不加(),会给你把|左边的传进去,如果加了(),第一个还是time,第二个参数是格式 --><h3>现在是:{{time | timeFormaters('YYYY-MM-DD') | mySlice}}</h3><!-- 拿着time传给timeFormaters,timeFormaters拿着传入的结果继续往下 --><h3 :x="msg | mySlice">hhh</h3><!-- 过滤器不仅可以用在插值里面 --></div><div id="root2"><h2>{{mes | mySlice}}</h2></div><script type="text/javascript">Vue.filter('mySlice',function(value){return value.slice(0,4)})
//    全局过滤器得写在new Vue之前,而且是filter不加sconst vm=new Vue({el:'#root',data:{time:1710744301627,msg:"你好哇哇哇哇"},computed:{fmtTime(){return dayjs(this.time).format('YYYY-MM-DD HH:mm:ss')//    如果dayjs后面不加参数就默认是当前时间}},methods:{getFmtTime(){return dayjs(this.time).format('YYYY-MM-DD HH:mm:ss')}},filters:{timeFormaters(value,str='YYYY-MM-DD HH:mm:ss'){// 过滤器本质是函数return dayjs(value).format(str)// 没有格式就默认是'YYYY-MM-DD HH:mm:ss',有的话用传入的格式},}})// 我写的这些过滤器只能在root vue中可以用new Vue({el:'#root2',data:{mes:'hello',}})</script>
</body>

三、自定义指令

1.内置指令

v-bind : 单向绑定解析表达式, 可简写为 :xxx
v-model : 双向数据绑定
v-for : 遍历数组/对象/字符串
v-on : 绑定事件监听, 可简写为@
v-if : 条件渲染(动态控制节点是否存存在)
v-else : 条件渲染(动态控制节点是否存存在)
v-show : 条件渲染 (动态控制节点是否展示)

v-text:向其所在的节点中渲染文本内容。

<div>{{name}}</div>
<div v-text="name"></div>

当data中name=‘尚硅谷’的时候,这两段显示出来没有什么区别

但是插值用的更多,因为可以这样写:

<div>你好哇{{name}}</div>

而v-text把所有内容当文本会替换掉整个div 的内容,div里面写东西没用,‘’内容里的写标签它也不识别

v-html向指定节点中渲染包含html结构的内容。

 data:{name:'尚硅谷',str:'<h3>hhh</h3>'},

与插值语法的区别:
(1)v-html会替换掉节点中所有的内容,{{xx}}则不会,这点和v-text一样。
(2)v-html可以识别html结构,这点和v-text区别,v-text不能渲染标签。

严重注意:v-html有安全性问题!!!!
(1)在网站上动态渲染任意HTML是非常危险的,容易导致XSS攻击。
(2)一定要在可信的内容上使用v-html,永不要用在用户提交的内容上!

v-cloak(没有值):不让未经解析的模版跑到页面上去

script链接的js如果延迟五秒的话,body内的内容就不会展示在界面上,vue也不会工作

如果script链接的js写在body里面的最下方,那么body上面的内容会出现在页面上但是不被解析

(1)本质是一个特殊属性,Vue实例创建完毕并接管容器后,会删掉v-cloak属性。
(2)使用css配合v-cloak可以解决网速慢时页面展示出{{xxx}}的问题,先隐藏标签,然后Vue渲染完了之后删除v-cloak,那么就能显示渲染完之后的页面了。

<style>[v-colak]{/* 选中所有标签属性里面有v-colak的 */display: none;}
</style><body><div id="root"><div v-cloak>{{name}}</div></div><script type="text/javascript">const vm=new Vue({el:'#root',data:{name:'尚硅谷',},})

v-once指令:(没有值)

(1)v-once所在节点在初次动态渲染后,就视为静态内容了,也就是只读一次。
(2)以后数据的改变不会引起v-once所在结构的更新,可以用于优化性能。

<div id="root"><div v-once>{{n}}</div><button @click="n++">点我n+1</button><div>{{n}}</div></div>

v-pre指令:(没有值)

(1)跳过其所在节点的编译过程。
(2)可利用它跳过:没有使用指令语法、没有使用插值语法的节点,会加快编译。

也就是程序员写的什么样它就呈现出来什么样,vue不去解析了

2.自定义指令

(1)函数式

big函数何时调用?
1、指令与元素成功绑定时(一上来,没放入页面之前)
2、指令所在的模板被重新解析时

点击按钮使n++,输出n*10

<div id="root"><h2>当前的n值是:<span v-text="n"></span></h2><h2>放大10倍的n值是:<span v-big="n"></span></h2><button @click="n++">点我n++</button></div><script type="text/javascript">const vm=new Vue({el:'#root',data:{n:1,},directives:{big(element,binding){//这里就不加v-了// 这里的binding是说v-big和span的绑定关系,不是v-bind// return this.n*10这么写不对!!// 不是靠返回值,是靠big这个函数返回的参数console.log(element,binding)// 第一个参数是说跟什么标签绑定的span(真实dom)// 第二个参数是一个存着指令值的对象element.innerText=binding.value*10}}

(2)对象式

配置对象中常用的3个回调:
bind:指令与元素成功绑定时(一上来,没放入页面之前)
inserted:指令所在元素被插入页面时调用(放入页面后)
update:指令所在模板结构被重新解析时调用(有任意data中的东西被改了)。

案例:定义一个v-fbind指令,和v-bind功能类似,但可以让其所绑定的input元素默认获取焦点。

 <div id="root"><h2>当前的n值是:<span v-text="n"></span></h2><h2>放大10倍的n值是:<span v-big="n"></span></h2><button @click="n++">点我n++</button></br><input type="text" v-fbind:value="n"></div>
const vm=new Vue({el:'#root',data:{n:1,},directives:{// 函数调用的时候:一上来;指令所在模版被重新解析big(element,binding){//这里就不加v-了// 这里的binding是说v-big和span的绑定关系,不是v-bind// return this.n*10这么写不对!!// 不是靠返回值,是靠big这个函数返回的参数console.log(element,binding)// 第一个参数是说跟什么标签绑定的span(真实dom)// 第二个参数是一个存着指令值的对象element.innerText=binding.value*10},// fbind(element,binding){//     element.value=binding.value//     element.focus()
//这个放在这里刷新之后并没有自动获取焦点,所以不能写成函数得弄成对象,因为:
//fbind第一次调用就在他俩成功绑定也就是一上来的时候,那会input还没被解析到页面上,所以出不来焦点
//如果这时候点了button发现input自动获取焦点了,因为n值改变fbind再次被调用了,这时候input框已经出来了// }    fbind:{//指令与元素成功绑定时(一上来)bind(element,binding){element.value=binding.value},//指令所在元素被插入到页面时调用inserted(element,binding){element.focus()},//指令所在的模版被重新调用时update(element,binding){element.value=binding.value}// bind和updata往往都一样,所以人家设置了函数}   }})</script>

(3)注意点

1.多个单词用-分割,v-big-number,而且在vue中写函数的时候不能简写了,得:

'big-number'(element,binding){}

2.指令里面相关的this都是window

(4)写全局指令:

Vue.directive(指令名,配置对象) 或 Vue.directive(指令名,回调函数)
Vue.directive('fbind',{bind、、update、、、})

和filter一样不加s

写全局函数:

Vue.directive('big',function(element,binding){element.innerText=binding.value*10})

四、Vue的生命周期!!

1.什么是生命周期?

一个小笔记:{{}}如果返回值为undefined的话不显示在页面上
生命周期
1.又名:生命周期回调函数、生命周期函数、生命周期钩子。
2.是什么:Vue在关键时刻帮我们调用的一些特殊名称的函数。
3.生命周期函数的名字不可更改,但函数的具体内容是程序员根据需求编写的。
4.生命周期函数中的this指向是vm 或 组件实例对象。

mounted之前有一些函数,之后有一些函数,这三种加一块就组成生命周期

2.生命周期中的8个钩子

明天继续更

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

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

相关文章

大数据开发--01.初步认识了解

一.环境准备 1.使用虚拟机构建至少三台linux服务器 2.使用公有云来部署服务器 二.大数据相关概念 大数据是指处理和分析大规模数据集的一系列技术、工具和方法。这些数据集通常涉及海量的数据&#xff0c;包括结构化数据&#xff08;如关系型数据库中的表格&#xff09;以及…

美联社报道波场与亚马逊云计算重磅合作 称符合其去中心化使命

近日,波场TRON宣布已集成亚马逊云计算服务(AWS),引发美联社、金融时报、费加罗报等多家海外主流媒体高度关注。报道表示,此次集成旨在利用AWS 强大的云计算资源,降低用户和开发者参与波场网络的准入门槛,打造更加去中心化、更强大的区块链生态系统。 报道内容显示,通过此次合作…

基于spring boot的民宿预约管理系统的设计与实现

目录 摘要 I Abstract II 一、绪论 1 &#xff08;一&#xff09;研究背景 1 &#xff08;二&#xff09;社会调查 1 &#xff08;三&#xff09;研究意义 2 &#xff08;四&#xff09;研究内容 2 二、关键技术介绍 3 &#xff08;一&#xff09;Spring Boot框架 3 &#xff…

GESP2024年3月C++语言三级答案(均为自己的想法,C++没学太多,有不对的地方欢迎指正)

选择题&#xff08;每题2分&#xff0c;共30分&#xff09; 第 1 题 整数-5的16位补码表示是(D)。 A. 1005 B. 1006 C. FFFA D. FFFB 解析&#xff1a;0是FFFF&#xff0c;用0-5&#xff08;即FFFF-5&#xff09;得到是FFFB。 第 2 题 如果16位短整数-2的二进制是“FFFE”&…

YOLOv9改进策略:注意力机制 | 用于微小目标检测的上下文增强和特征细化网络ContextAggregation,助力小目标检测,暴力涨点

&#x1f4a1;&#x1f4a1;&#x1f4a1;本文改进内容&#xff1a;用于微小目标检测的上下文增强和特征细化网络ContextAggregation&#xff0c;助力小目标检测 yolov9-c-ContextAggregation summary: 971 layers, 51002153 parameters, 51002121 gradients, 238.9 GFLOPs 改…

springboot277流浪动物管理系统

流浪动物管理系统设计与实现 摘 要 在如今社会上&#xff0c;关于信息上面的处理&#xff0c;没有任何一个企业或者个人会忽视&#xff0c;如何让信息急速传递&#xff0c;并且归档储存查询&#xff0c;采用之前的纸张记录模式已经不符合当前使用要求了。所以&#xff0c;对流…

PSCA系统控制集成之复位层次结构

PPU 提供以下对复位控制的支持。 • 复位信号Reset signals&#xff1a;PPU 提供冷复位和热复位输出信号。PPU 还为实现部分保留的电源域管理提供了额外的热复位输出信号。 • 电源模式控制Power mode control&#xff1a;PPU 硬件适当地管理每个支持的电源模式转换的复位信号…

2024蓝桥杯每日一题(DFS)

备战2024年蓝桥杯 -- 每日一题 Python大学A组 试题一&#xff1a;奶牛选美 试题二&#xff1a;树的重心 试题三&#xff1a;大臣的差旅费 试题四&#xff1a;扫雷 试题一&#xff1a;奶牛选美 【题目描述】 听说最近两斑点的奶牛最受欢迎&#xff0c;…

华为畅享 60X 用了这么久,说说真实感受

华为畅享 60X 上市也有1年了&#xff0c;为什么还要说这款手机&#xff0c;是因为用了这么久这款手机真的让人忍不住竖起大拇指&#xff01;给父母准备的这款机子&#xff0c;在千元机里没得说&#xff01; 华为畅享 60X 很适合中老年人用户&#xff0c;日常长辈们在用机时对手…

SqlServer2008(R2)(二)SqlServer2008(R2)安装和卸载注意事项整理

二、注意事项 1、 安装数据中心版 说明&#xff1a;此激活版仅用于测试和学习使用。 这是官方的下载页面&#xff08;需要付费订阅&#xff09;&#xff1a; http://msdn.microsoft.com/zh-cn/subscriptions/downloads/default.aspx 数据中心版&#xff1a; PTTFM-X467G-P7RH…

力扣模板题:检测字符串中数字是否递增

bool areNumbersAscending(char * s){//双指针操作&#xff0c;前指针保存前面一个数字字符int p0,q0;for(int i0;s[i];i){if(s[i]>0&&s[i]<9){pp*10s[i]-0;if(s[i1] ||s[i1]\0){//进行比较, 比较过后将p赋值q&#xff0c;q记录前面一个数字,因为数字均为小于100…

详解Python中的缩进和选择

缩进 Python最具特色的是用缩进来标明成块的代码。我下面以if选择结构来举例。if后面跟随条件&#xff0c;如果条件成立&#xff0c;则执行归属于if的一个代码块。 先看C语言的表达方式&#xff08;注意&#xff0c;这是C&#xff0c;不是Python!&#xff09; if ( i > 0 …

AI论文速读 | UniST:提示赋能通用模型用于城市时空预测

本文是时空领域的统一模型——UniST&#xff0c;无独有偶&#xff0c;时序有个统一模型新工作——UniTS&#xff0c;感兴趣的读者也可以阅读今天发布的另外一条。 论文标题&#xff1a;UniST: A Prompt-Empowered Universal Model for Urban Spatio-Temporal Prediction 作者&…

CornerStone.js之点数据获取相关函数

向后端导出点的坐标数据&#xff1a;由于piexlData是Float32Arrat数据类型&#xff0c;传递给后端 会报错&#xff0c;于是将其转换为二维数组&#xff0c;然后传递给后端即可&#xff0c;后端将其写入txt文件中 二维数组表示是512*512的一个数组&#xff0c;元素值只有0和1

AI基础知识(3)--神经网络,支持向量机,贝叶斯分类器

1.什么是误差逆传播算法&#xff08;error BackPropagation&#xff0c;简称BP&#xff09;&#xff1f; 是一种神经网络学习算法。BP是一个迭代学习算法&#xff0c;在迭代的每一轮使用广义的感知机学习规则对参数进行更新估计。基于梯度下降&#xff08;gradient descent&am…

linux学习之Socket

目录 编写socket-udp 第一步&#xff0c;编写套接字 第二步&#xff0c;绑定端口号 第三步&#xff0c;启动服务器&#xff0c;读取数据 第四步&#xff0c;接收消息并发回信息给对方 编写socket-Tcp 第一步&#xff0c;编写套接字 第二步&#xff0c;绑定端口号 第三步…

等保测评的知识

结合自己所学的知识和网络上的一些知识做个小总结。 目录 一、概念&#xff1a; 二、等级划分&#xff1a; 三、技术要求&#xff1a; 四、管理要求&#xff1a; 五、等保测评实施过程&#xff1a; 六、典型的网络架构&#xff1a; 一、概念&#xff1a; 全称为信息安全等级保…

【涨薪技术】0到1学会性能测试 —— 参数化关联

前言 上一次推文我们分享了性能测试工作原理、事务、检查点&#xff01;今天给大家带来性能测试参数化&#xff0c;检查点知识&#xff01;后续文章都会系统分享干货&#xff0c;带大家从0到1学会性能测试&#xff0c;另外还有教程等同步资料&#xff0c;文末免费获取~ 01、性…

2024.03.18作业

封装一个动物的基类&#xff0c;类中有私有成员&#xff1a;姓名&#xff0c;颜色&#xff0c;指针成员年纪 再封装一个狗类&#xff0c;共有继承于动物类&#xff0c;自己拓展的私有成员有&#xff1a;指针成员腿的个数&#xff0c;共有成员函数&#xff1a;叫 要求&#xf…

PyTorch学习笔记之激活函数篇(四)

4、 Leaky ReLU 函数 4.1 公式 Leaky ReLU函数的公式&#xff1a; f ( x ) { x , x > 0 λ x , x < 0 , λ ∈ ( 0 , 1 ) f(x) \begin{cases} x&,x>0 \\ \lambda x&,x<0,\lambda \in(0,1) \end{cases} f(x){xλx​,x>0,x<0,λ∈(0,1)​ Leakly R…