当前位置: 首页 > news >正文

Vue框架进阶

目录

一、Vue的钩子函数

二、事件传值

三、表单输入绑定

四、简单计算器案例

五、v-model使用后缀参数:

六、计算属性

七、实现输入同步

八、监听属性


一、Vue的钩子函数

1.钩子函数称为vue前端框架的生命周期函数

(1)就是可以在vue的创建、运行、销毁过程中可以触发的一些函数。

2.vue.js的生命周期函数执行流程图

3.生命周期函数一般和el、data、methods、同级别的

(1)格式:mounted(){}

(2)这个mounted函数是在页面挂载之后调用的;还有一个是beforeMount函数,这个函数是在页面挂载之前调用的;一般情况下,这两个生命周期函数使用的比较多

(3)案例:

<!DOCTYPE html>
<html><head><meta charset="utf-8"><title></title><script src="js/vue.js" type="text/javascript" charset="utf-8"></script></head><body><div id="app"><input type="button" @click="change()" value="切换" /><br /><img :src="path" height="300px" width="300px" /></div><script>var vue = new Vue({el:"#app",data:{i:1,path:"img/left/1.png"},methods:{change(){this.i++;//在函数中变化path值的内容,在函数中获取data中的变量,使用this.变量名或vue.变量名this.path="img/left/" + this.i + ".png";if(this.i >= 11){this.i=1;}}},mounted(){//new Vue中的数据挂载完成,渲染到div中时,调用mounted()函数,即页面数据挂载之后;beforeMount:是页面数据挂载之前,这两种使用的比较多//定时器setInterval(this.change,200);//每隔200毫秒,重复调用change函数;注意:这里不能使用括号}})</script></body>
</html>

4.生命周期函数(钩子函数)

(1)beforeCreate():创建vue实例之前触发;

(2)created():创建vue实例时触发;

(3)beforeMount():当vue实例渲染到html页面之前触发;

(4)mounted():当vue实例渲染到html页面过程中触发;

(5)beforeDestroyed():vue页面销毁之前触发;

(6)destroyed():vue页面销毁之后触发;

(7)案例:

<!DOCTYPE html>
<html><head><meta charset="utf-8"><title></title><script src="js/vue.js" type="text/javascript" charset="utf-8"></script></head><body><div id="app"></div><script>var vue = new Vue({el:"#app",data:{},mounted() { //相当于js中的onload事件alert("4vue渲染到html页面中触发")},beforeMount() {alert("3vue渲染到html页面之前触发")},created() {alert("2创建vue实例时触发")},beforeCreate() {alert("1创建vue实例前触发")},destroyed() {alert("6vue实例销毁之后触发")},beforeDestroy() {alert("5vue实例销毁之前触发")}})</script></body>
</html>

二、事件传值

1.可以在调用时直接传值

2.数组操作

(1)往数组后面追加:

  • 格式:数组名.push("要往数组中添加的数据")
  • 往数组中添加数据,这个函数是往数组后面追加

(2)往数组前面追加:

  • 格式:数组名.unshift("要往数组中添加的数据")
  • 往数组中添加数据,这个函数是往数组前面追加

3.可以在事件中直接操作成员变量

4.案例:

<!DOCTYPE html>
<html><head><meta charset="utf-8"><title></title><script src="js/vue.js" type="text/javascript" charset="utf-8"></script></head><body><div id="app"><input type="button" @click="add(10,30)" value="加法" /><br /><input type="button" @click="num-=1" value="自减" />{{num}}<input type="button" @click="num+=1" value="自增" /><br /><input type="button" @click="addCity()" value="往数组后面添加元素" /><input type="button" @click="addCity2()" value="往数组前面添加元素" />{{citys}}</div><script>var vue = new Vue({el:"#app",data:{num:1,citys:["广州"]},methods:{add(a,b){alert("a+b=" + (a + b))},addCity(){this.citys.push("深圳") //往数组里面添加新的元素,往数组后面添加},addCity2(){this.citys.unshift("东莞")}}})</script></body>
</html>

三、表单输入绑定

1.v-model:双向数据绑定。

(1)注意:要使用双向绑定,需要在data中定义一个与v-model值名字相同的变量。

2.v-model一般用在表单中。

(1)注意:使用v-model的表单的单选框不适用checked=checked来设置默认值了,而是之间在data中为此单选的相同变量赋值就可以了。

3.在vue中提交表单不需要form标签了,可以直接写一个函数提交,不过在提交之前需要把数据封装到一个对象中,然后再将这个对象转换为json格式。

(1)将对象转换为json格式:JSON.stringify(要转换的对象名)。

4.再转换完成后,通过axios网络请求技术想后端服务器提交数据。

5.案例:

<!DOCTYPE html>
<html><head><meta charset="utf-8"><title>表单/双向数据绑定</title><script src="js/vue.js" type="text/javascript" charset="utf-8"></script></head><body><div id="app">用户名:<input type="text" v-model="uname" /><br /> <!-- v-model的设置用来获取表单输入框中的数据 -->密码:<input type="password" v-model="pwd" /><br />性别:男:<input type="radio" v-model="sex" value="1" /> <!-- 默认选中不适用checked=checked -->女:<input type="radio" v-model="sex" value="0" /><br />爱好:看书:<input type="checkbox" v-model="favor" value="1" />听音乐:<input type="checkbox" v-model="favor" value="2" />爬山:<input type="checkbox" v-model="favor" value="3" />蹦极:<input type="checkbox" v-model="favor" value="4" /><input type="button" @click="submit()" value="提交" /></div><script>var vue = new Vue({el:"#app",data:{uname:"小丽",pwd:"123",sex:"1", //设置默认选中favor:[]},methods:{submit(){// alert(this.uname + "--" + this.pwd + "--" + this.sex + "--" + this.favor)//在vue中提交数据,需要创建一个对象来封装表单数据var person = new Object();person.uname = this.uname;person.pwd = this.pwd;person.sex = this.sex;person.favor = this.favor;//当前的数据在开发中是需要提交到服务器里面去,通过json数据传递var s = JSON.stringify(person);//JSON.stringify()可以把对象转成json数据alert(s); //{"uname":"小丽","pwd":"123","sex":"1","hobby":["2","3"]}//这个数据往服务器端发送,需要后面学习axios发送post/get网络请求技术}}})</script></body>
</html>

四、简单计算器案例

1.双向绑定只能赋值为字符串。

2.做简单计算器需要使用到输入文本框,因为文本框输入的数据都是字符串所以我们需要把字符串转为数字类型。

(1)直接在v-model后面加上.number,将输入的内容转换为数字类型。

  • 案例:
  • <!DOCTYPE html>
    <html><head><meta charset="utf-8"><title>简单计算器</title><script src="js/vue.js" type="text/javascript" charset="utf-8"></script></head><body><div id="app">数值A:<input type="text" v-model.number="num1" /><br /> <!-- .number:输入字符串转换为有效的数字 -->数值B:<input type="text" v-model.number="num2" /><br /><input type="button" @click="add()" value="加法" /><br /><input type="button" @click="reduce()" value="减法" /><br /><input type="button" @click="ride()" value="乘法" /><br />结果:{{result}}</div><script type="text/javascript">var vue = new Vue({el:"#app",data:{num1:"", //双向绑定只能赋值为字符串num2:"",result:""},methods:{add(){if(this.num1 != "" && this.num2 != ""){this.result = this.num1 + this.num2; //直接获取的字符串}},reduce(){if(this.num1 != "" && this.num2 != ""){this.result = this.num1 - this.num2;}},ride(){if(this.num1 != "" && this.num2 != ""){this.result = this.num1 * this.num2;}}}})</script></body>
    </html>

(2)或者是在vue对象中的某个函数中获取到data中的数据后使用parseFloat(data中获取的要转换的值),来讲字符串转换为小数。

  • 案例:
  • <!DOCTYPE html>
    <html><head><meta charset="utf-8"><title>简单计算器</title><script src="js/vue.js" type="text/javascript" charset="utf-8"></script></head><body><div id="app">数值A:<input type="text" v-model="num1" /><br />数值B:<input type="text" v-model="num2" /><br /><input type="button" @click="add()" value="加法" /><br /><input type="button" @click="reduce()" value="减法" /><br /><input type="button" @click="ride()" value="乘法" /><br />结果:{{result}}</div><script type="text/javascript">var vue = new Vue({el:"#app",data:{num1:"", //双向绑定只能赋值为字符串num2:"",result:""},methods:{add(){if(this.num1 != "" && this.num2 != ""){//parseFloat()相当于java中的Float.parseFloat("数字的字符串形式")this.result = parseFloat(this.num1) + parseFloat(this.num2); }},reduce(){if(this.num1 != "" && this.num2 != ""){this.result = parseFloat(this.num1) - parseFloat(this.num2); }},ride(){if(this.num1 != "" && this.num2 != ""){this.result = parseFloat(this.num1) * parseFloat(this.num2); }}}})</script></body>
    </html>

五、v-model使用后缀参数:

1..number:输入字符串转为有效的数字;

2..trim:输入首尾空格过滤(等同于java中String类中的trim()方法);

3..lazy:取代input的change(值改变)和blur(失去焦点)的结合事件;

(1)注意,在使用.lazy后缀之后,当前页面中所有的input标签都会受到影响。

4.案例:

<!DOCTYPE html>
<html><head><meta charset="utf-8"><title>简单计算器</title><script src="js/vue.js" type="text/javascript" charset="utf-8"></script></head><body><div id="app">数值A:<input type="text" v-model.trim="num1" /><br />数值B:<input type="text" v-model.trim="num2" /><br />lazy测试:<input type="text" v-model.lazy="test()" /><br /></div><script type="text/javascript">var vue = new Vue({el:"#app",data:{num1:"", //双向绑定只能赋值为字符串num2:"",result:""},methods:{test(){alert("失去焦点")}}})</script></body>
</html>

六、计算属性

1.计算属性就是会将函数中的一些结果计算好并返回回来,我们可以直接调用

2.写计算属性,我们会有一个写计算属性的空间,这个空间和el、data、methods、mounted等等同级

3.格式:computed:{}

4.computed的大括号中写的都是函数

5.常用函数

(1)split():切分字符串,括号中写入的是切分的标准

(2)reverse():反转数组中的内容

(3)join():将反转之后的字符使用特定的符号连接起来,括号中写入的是连接符号

6.计算属性调用和函数调用的区别:

(1)计算属性通过插值调用时不需要加括号,但是函数调用需要加括号。

(2)计算属性是有缓存的,也就是说,只要你要计算的属性没有发送改变,那么当我们多次调用这个计算属性中的函数的时候,它只会返回上一次的计算结果,而不会重新计算,也就是不必再次执行函数;而函数调用是没有缓存的,没有调用都会重新计算结果。

7.案例:

<!DOCTYPE html>
<html><head><meta charset="utf-8"><title>计算属性</title><script src="js/vue.js" type="text/javascript" charset="utf-8"></script></head><body><div id="app">计算属性:{{getResult}} <!-- 计算属性调用,只写函数名称,不需要写括号 --><br />函数调用:{{reverseMessage()}}</div><script>var vue = new Vue({el:"#app",data:{msg:"Hello Vue"},methods:{reverseMessage:function(){return this.msg.split("").reverse().join("");}},mounted() {},computed:{ //写计算属性的空间getResult(){/*split("")是使用空白符,切分Hello Vue;reverse()是反转,join是将反转之后的每个字母连接起来split()相当于java中String类中的split(String regex)方法*/// return this.msg.split("") //-->[ "H", "e", "l", "l", "o", " ", "V", "u", "e" ] // return this.msg.split("").reverse() //-->[ "e", "u", "V", " ", "o", "l", "l", "e", "H" ] return this.msg.split("").reverse().join(""); //-->euV olleH }}})</script></body>
</html>

七、实现输入同步

1.案例:

<!DOCTYPE html>
<html><head><meta charset="utf-8"><title></title><script src="js/vue.js" type="text/javascript" charset="utf-8"></script></head><body><div id="app">姓:<input type="text" v-model="firstname" /><br />名:<input type="text" v-model="secondname" /><br />字:<input type="text" v-model="lastname" /><br />{{getLastName}}<br />{{LastName()}}</div><script>var vue = new Vue({el:"#app",data:{firstname:"",secondname:"",lastname:""},methods:{LastName(){return this.firstname + this.secondname + this.lastname}},mounted() {},computed:{ //写计算属性的空间getLastName(){return this.firstname + this.secondname + this.lastname}}})</script></body>
</html>

八、监听属性

1.watch与change事件相似

2.watch与el、data、methods、computed、mounted等也是同一级别的

3.格式:watch:{}

4.watch中的函数名是你要监听的变量的变量名,也就是说watch中的函数名要和你要监听的变量的名称是相同的,当你监听的变量的值发生改变的时候,会调用这个函数

5.案例:

<!DOCTYPE html>
<html><head><meta charset="utf-8"><title>监听属性</title><script src="js/vue.js" type="text/javascript" charset="utf-8"></script></head><body><div id="app">姓:<input type="text" v-model="firstname" /><br />名:<input type="text" v-model="secondname" /><br />字:<input type="text" v-model="lastname" /><br />{{fullname}}</div><script>var vue = new Vue({el:"#app",data:{firstname:"",secondname:"",lastname:"",fullname:""},methods:{},mounted() {},computed:{ //写计算属性的空间},watch:{ //监听属性,有点像onchange事件/*当前函数的名称是变量firstname:表示监听firstname双向绑定的输入框当firstname的输入框中的值发生改变时,当前这个函数就会被触发*/firstname(){this.fullname = this.firstname + this.secondname + this.lastname;},secondname(){this.fullname = this.firstname + this.secondname + this.lastname;},lastname(){this.fullname = this.firstname + this.secondname + this.lastname;}}})</script></body>
</html>
http://www.lryc.cn/news/614153.html

相关文章:

  • FPGA实现Aurora 64B66B数据回环传输,基于GTX高速收发器,提供2套工程源码和技术支持
  • 机器学习支持向量机(SVM)
  • 论文精读(二)| 开源软件漏洞感知技术综述
  • 深度学习·MAFT
  • Linux中的内核同步源码相关总结
  • 2025华数杯数学建模A题【 多孔膜光反射性能的优化与控制】原创论文分享
  • 提升LLM服务效率的秘密武器——vLLM!
  • 【MongoDB学习笔记2】MongoDB的索引介绍
  • [GESP202309 五级] 2023年9月GESP C++五级上机题题解,附带讲解视频!
  • 【具身智能】具身智能的革命——人形机器人如何重塑人类日常生活
  • VIOO IQOO7手机 解锁BL ROOT教程
  • Effective C++ 条款30:透彻了解inlining的里里外外
  • 安装CST时,报错问题处理
  • Suno AI 完全上手教程:从文字到音乐,打造自己专属音乐
  • Qwen Agent 入门介绍与简单使用示例
  • 用不均匀硬币实现公平决策
  • 【Bellman负环】Cycle Finding
  • 遥测自跟踪天线系统组成、特点、功能、工作流程
  • 降低程序运行时CPU和GPU峰值占用的技术方案
  • ADB 命令执行模块开发:双模式(普通模式Shell交互模式)实现、线程安全与资源管理优化
  • 机器学习——支持向量机(SVM)实战案例
  • Android 中解决 Button 按钮背景色设置无效的问题
  • BGP笔记及综合实验
  • 如何在simulink中双击一个模块弹出一个exe?
  • 三防平板+天通卫星电话,打通无人之境的通信经脉
  • 前端开发:JavaScript(7)—— Web API
  • 从手工到智能决策,ERP让制造外贸企业告别“数据孤岛“降本增效
  • 生产管理ERP系统|物联及生产管理ERP系统|基于SprinBoot+vue的制造装备物联及生产管理ERP系统设计与实现(源码+数据库+文档)
  • Selenium + Python + Pytest + Yaml + POM
  • ISL9V3040D3ST-F085C一款安森美 ON生产的汽车点火IGBT模块,绝缘栅双极型晶体管ISL9V3040D3ST汽车点火电路中的线圈驱动器