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

Web网络开发 -- Vue2基础语法,属性和生命周期

引入

在这里插入图片描述

什么是Vue

Vue (读音 /vjuː/,类似于 view) 是一套用于构建用户界面的渐进式框架。与其它大型框架不同的是,Vue 被设计为可以自底向上逐层应用。Vue 的核心库只关注视图层,不仅易于上手,还便于与第三方库或既有项目整合。另一方面,当与现代化的工具链以及各种支持类库结合使用时,Vue 也完全能够为复杂的单页应用提供驱动。
Vue2官方教程
Vue3官方教程

设计模式

MVVM设计模式

M Model 模型层

VM ViewModel 中间件

V View 视图层

导入Vue.js

<script src="js/vue.min.js"></script>

min是生产环境,建议使用,不带min是开发环境,会显示错误日志

创建容器

<div class="app">...
</div>

创建vue2实例对象

<script>const app = new Vue({el: '#app',data: {message: 'Hello World!',num: 1}})
</script>

一个实例对象只能挂载在一个元素身上,一个元素只能被一个实例对象挂载,这是一对一的关系

如果一个元素被多个实例对象挂载,挂载由上到下,最下面的才会生效

绑定元素

// 方式一 el绑定
new Vue({el: '#app',data: {tag: '<h1>这是解析标签的</h1>'}
})
// 方式二 创建实例对象时赋值
var app = new Vue({el: '#app',data: {tag: '<h1>这是解析标签的</h1>'}
})
app.$mount('#app')
// 方式三 创建实例对象时直接绑定
new Vue({el: '#app',data: {tag: '<h1>这是解析标签的</h1>'}
}).$mount('#app')

基础语法

插值语法

可以用{{}}来在html中显示变量

<div id="app"><h1>{{ message }}</h1><h2>{{ num + 1 }}</h2><p>{{num >= 10?"ture":"false" }}</p>
</div>

渲染解析html标签

可以使用v-text/v-html属性来将某些文字/html标签渲染到容器中,这里将vue实例对象中的tag值渲染到id为"app"的容器中

<div id="app" v-html="tag"></div>
<script>var app = new Vue({el: '#app',data: {tag: '<h1>这是解析标签的</h1>'}})
</script>

v-html会覆盖元素中已有的内容,并替换为tag中的内容

隐藏html标签

可以使用v-if/v-show属性来隐藏容器中指定的html标签

<div id="app"><div v-if="isShow">这是元素1</div> <!-- 通过删除和创建节点来实现隐藏,适用于一次性弹窗场景 --><div v-show="isShow">这是元素2</div> <!-- 通过CSS属性来实现隐藏,适用于导航栏下拉菜单等多次使用的场景 -->
</div>
<script>var app = new Vue({el: '#app',data: {tag: '<h1>这是解析标签的</h1>',isShow: true,}})
</script>

v-ifv-show都可以实现隐藏元素,区别是前者通过删除和创建节点来实现隐藏,适用于一次性弹窗场景;后者通过元素的displayCSS属性来实现隐藏,适用于导航栏下拉菜单等多次使用的场景.后者可以节约资源避免反复删除创建元素带来的性能损耗

单向绑定和双向绑定

v-bind:value属性用于实现单向绑定,可以简写为:value,其只能由data中的变量的内容单向输出到输入框中,修改输入框的内容不会影响到data中的数据,适用于只展示数据的情况

v-model:value属性用于实现双向绑定,可以简写为v-model,其data中的变量和输入框双方,修改一方另一方也会同步修改,适用于与数据进行交互的情况,只适用于输入框输入

<div id="app"><span> {{num}} </span><input type="text" v-bind:value="num"> <!-- 单向绑定 --><input type="text" v-model:value="num"> <!-- 双向绑定 --><input type="text" :value="info">  <!-- 单向绑定简写 --><input type="text" v-model="info"> <!-- 双向绑定简写 --></div>
<script>var app = new Vue({el: '#app',data: {// 这里可以定义变量num: 80,info:"这是一个例子"}})
</script>

绑定网页和图片

v-bind属性也可用于绑定网页或图片等,例如v-bind:href(简写为:href)、v-bind:src(简写为:src)等

<div id="app"><a v-bind:href="web.url" target="_blank">{{web.title}}</a> <!-- 绑定网页 --><a :href="web.url" target="_blank">{{web.title}}</a> <!-- 绑定网页简写 --><img :src="'https://www.baidu.com/img/flexible/logo/pc/result.png'" alt="百度logo"> <!-- 图片绑定 --><img :src="bd" alt="百度logo"> <!-- 图片绑定 -->
</div>
<script>var app = new Vue({el: '#app',data: {web:{url: "https://www.baidu.com",title: "百度一下,你就知道",},bd: 'https://www.baidu.com/img/flexible/logo/pc/result.png',},},})
</script>

事件对象 Event

$event可以调用当前事件的详细信息,通过函数传参到方法中

<div id="app"><span> {{num}} </span><button v-on:click="fn($event)">点我</button><button @click="fn($event)">点我</button>
</div>
<script>var app = new Vue({el: '#app',data: {// 这里可以定义变量num: 80,},methods: {// 这里可以定义方法fn(e){console.log(e); // 打印事件对象console.log('点击了',this.num);this.num += 10; // 每次点击按钮num加10}}})
</script>

点击事件

v-on:click用于给元素绑定点击事件,也可以简写为@click

<div id="app"><span> {{num}} </span><button v-on:click="num++">点我+1</button><button @click="num--">点我-1</button>
</div>
<script>var app = new Vue({el: '#app',data: {num: 80,}})
</script>

常见其他事件类型

  • 鼠标经过 v-on:mouseover@mouseover v-on绑定事件

  • 阻止某个标签的默认事件 v-on:click="$event.preventDefault"@click.prevent

  • 点击弹窗 @click="alert('弹窗')"

  • 事件只执行一次 @click.once="fn"

  • 阻止事件冒泡执行 @click.stop="fn"

冒泡就是一大一小两个框重叠,且都绑定事件,点击相同区域会同时执行两个事件

  • 按下按键触发事件 @keydown="getVaule($event)"
  • 按下指定按键(例如回车键)触发事件 @keydown.Enter="getVaule($event)"
<div id="app"><span> {{num}} </span><button @click="num--">点我-1</button><button @mouseover="num+=3">鼠标经过</button><button @click="add(5)">按钮</button><!-- 阻止默认事件--><a href="https://www.baidu.com" @click.prevent>百度一下</a><!-- 事件只执行一次 --><button @click.once="showBox">点击一次</button><!-- 阻止事件冒泡执行 --><div class="big" @click="show1"><div class="small" @click.stop="show2"></div></div></div>
<script>new Vue({data: {// 这里可以定义变量num: 80,},methods: {// 这里可以定义方法add(n) {console.log(n); // 打印传入的参数nthis.num += n; // 每次点击按钮num加n},showBox() {alert('弹窗');},show1() {alert('大盒子');},show2() {alert('小盒子');},}}).$mount('#app'); // 挂载到#app元素上console.log(app);  //在控制台中打印vue的详细信息
</script>

在Vue.js中,.stop是一个事件修饰符,它的作用是调用event.stopPropagation(),阻止事件冒泡

如果没有.stop修饰符,点击内层div时,事件会冒泡到外层div,导致两个事件都会被触发

加上.stop后,点击内层div只会触发show2,不会触发外层的show1

在控制台输出vue2实例对象的详细信息

<script>console.log(app);
</script>

多级条件判断

v-if不止可以显示单一条件判断,也可以多级判断

<div id="app"><div v-if="score >= 90">优秀</div><div v-else-if="score >= 80">很棒</div><div v-else-if="score >= 70">良好</div><div v-else-if="score >= 60">及格</div><div v-else>不及格</div>
</div>
<script>var app = new Vue({el: '#app',data: {score: 80,}})
</script>

列表循环

可以使用v-for对数组进行遍历,其中item是数组(列表)中的一项,index是数组(列表)的索引

index可以省略不写

<div id="app"><ul><li v-for="(item,index) in arr">{{index}} - {{item.name}} - {{item.age}}</li></ul><ul><li v-for="item in arr2"> //index可以省略不写{{item}}</li></ul>
</div>
<script>new Vue({data: {arr: [{ name: '张三', age: 18 },{ name: '李四', age: 20 },{ name: '王五', age: 22 }],arr2: ['red','orange','blue']},}).$mount('#app');
</script>

Vue2定义实例对象

<script>const app = new Vue({data:{...},methods:{...},computed:{...},watch:{...},c...}.$mount("#app")
</script>
  • data:{} 定义变量,用于存储实例对象的数据
  • methods:{} 定义方法,用于存储实例对象的方法
  • computed:{} 定义监听(计算)属性,用于响应式数据计算和结果缓存
  • watch:{} 定义观察属性,用于观察数据的前后变化

计算数据和计算属性的应用

方法一: 通过自定义方法并绑定到指定按钮上实现计算

方法二: 通过计算属性实现响应式计算,实时计算并显示

<div id="app"><input type="text" v-model="num1"><input type="text" v-model="num2"><button @click="add()">求和</button><p>结果: {{count}} </p>  <!-- 方法一 --><p>结果: {{he}} </p> <!-- 方法二 -->
</div>
<script>const app = new Vue({data:{num1: 0,num2: 0,count: 0,},methods:{// 方法一add() {// 将输入的字符串转换为数字const n1 = parseFloat(this.num1);const n2 = parseFloat(this.num2);// 计算和this.count = n1 + n2;}},computed:{// 计算属性// 方法二he(){return Number(this.num1) + +this.num2;}}}).$mount('#app');console.log(app);
</script>

观察属性

用于观察数据的前后变化

<div id="app"><input type="text" v-model="num1">
</div>
<script>const app = new Vue({data:{num1: 0,},watch:{num1:{handler(newVal, oldVal) {console.log(`num1 changed from ${oldVal} to ${newVal}`);},}}}).$mount('#app');console.log(app);
</script>

Vue2生命周期

Vue 的生命周期是指组件从创建到销毁的整个过程,包括初始化数据、编译模板、挂载 DOM、更新 DOM 和卸载等阶段。在这些阶段中,Vue 提供了一系列的生命周期钩子函数,允许开发者在特定时机运行自定义代码。

Vue 的生命周期分为四个主要阶段,每个阶段都有对应的钩子函数:

  1. 创建阶段: beforeCreate:实例初始化后调用,此时数据和 DOM 尚未初始化。 created:实例创建完成后调用,此时数据已初始化,但 DOM 尚未挂载。
  2. 挂载阶段: beforeMount:挂载开始前调用,此时模板已编译,但 DOM 尚未渲染。 mounted:挂载完成后调用,此时 DOM 已渲染,可以进行 DOM 操作。
  3. 更新阶段: beforeUpdate:数据更新后、DOM 更新前调用,可用于访问更新前的 DOM。 updated:数据更新后调用,此时 DOM 已完成更新。
  4. 销毁阶段: beforeDestroy:实例销毁前调用,可用于清理定时器或事件监听器。 destroyed:实例销毁后调用,此时所有事件和子实例均已移除。
<script>new Vue({data:{num: 10,},methods:{},computed:{},watch:{num:{handler(newValue, oldValue){ },},},// Vue的四个生命周期和八个钩子函数beforeCreate(){}, //创建之前created(){}, //创建beforeMount(){},  //挂载之前mounted(){}, //挂载beforeUpdate(){}, //更新之前updated(){}, //更新beforeDestroy(){}, //销毁之前destroyed(){}, //销毁})
</script>
http://www.xdnf.cn/news/1422055.html

相关文章:

  • 大模型面试题剖析:全量微调与 LoRA 微调
  • TDengine 日期时间函数 DAYOFWEEK 使用手册
  • 特征增强方法【特征构建】
  • 太浅显数学常识暴露太重大数学真相:同样是有首项的无穷数列,此列的项可多于彼列的项
  • 车载卫星通信:让自动驾驶“永不掉线”?
  • STM32项目分享:基于单片机的图书馆座位监测系统
  • Git 版本管理工具基本操作汇总—命令总结
  • 液态神经网络(LNN)2:LTC改进成CFC详细推导过程
  • 使用 BayesFlow 神经网络简化贝叶斯推断的案例分享(二)
  • 液态神经网络:智能制造的新引擎
  • Android Framework打电话禁止播放运营商视频彩铃
  • FastLED库完全指南:打造炫酷LED灯光效果
  • 线程池发生了异常该怎么处理?
  • 多校区学校押金原路退回系统之免安装使用教程——东方仙盟
  • 本地部署开源临时文本分享服务 PrivateBin 并实现外部访问( Windows 版本)
  • AOSP 目录及其作用
  • Minecraft(我的世界)服务器信息查询免费API接口详解
  • golang 14并发编程
  • 轻量实现 OCPP 1.6 JSON 协议(欧洲版)的充电桩调试平台
  • Google Gemini 2.5 Flash Image(Nano-Banana)震撼登场!人人都能免费用的AI修图神器!
  • SQL执行过程及原理详解
  • AI + 机器人:当大语言模型赋予机械 “思考能力”,未来工厂将迎来怎样变革?
  • 三、SVN实践练习指南
  • 轻量级注意力模型HOTSPOT-YOLO:无人机光伏热异常检测新SOTA,mAP高达90.8%
  • Swift 解法详解:LeetCode 368《最大整除子集》
  • 【牛客JZ31】—栈的压入弹出序列判断算法详解
  • FPGA中的亚稳态与跨时钟域数据撕裂现象
  • 眼底病害图像分类数据集
  • MYSQL速通(4/5)
  • KL Loss