「网页开发|前端开发|Vue」04 快速掌握开发网站需要的Vue基础知识
本文主要介绍使用Vue进行前端开发的一些必备知识,比如:Vue应用实例,Vue的组件概念,模板语言和模板语法,计算属性,路由配置等等。
文章目录
- 本系列前文传送门
- 前言
- 一、Vue实例:项目入口
- 二、模板语言:Vue如何编写页面
- 三、模板语法:类编程语言的设计
- 四、计算属性与监听属性
- **计算属性具体用法如下:**
- 监听属性具体用法如下:
- 五、生命周期与Hook函数
- 本系列下一篇文章传送门
本系列前文传送门
- 「网页开发|前端开发|Vue」01 快速入门:快速写一个Vue的HelloWorld项目
- 「网页开发|前端开发|Vue」02 从单页面到多页面网站:使用路由实现网站多个页面的展示和跳转
- 「网页开发|前端开发|页面布局」03 学会够用的CSS,实现任意你想要的页面布局
前言
在了解Vue项目的文件结构、如何通过路由拥有多页面网站以及如何去实现单个页面的元素布局之后,我们就需要去实现具体单个页面的内容了。
因此我们就需要在使用html编写页面的基础上,掌握一些vue的特性来帮助编写页面内容以及页面数据的处理和变化。
一、Vue实例:项目入口
我们要使用Vue来搭建网站,就需要实例化一个Vue对象来代表一个Vue应用,如下:
// The Vue build version to load with the `import` command
// (runtime-only or standalone) has been set in webpack.base.conf with an alias.
import Vue from 'vue'
new Vue({......
})
我们来看一个具体的网站Vue实例:
<div id="app"><p>{{message}}</p>
</div><script type="text/javascript">var vm = new Vue({el: '#app',data: {message: "Hello Vue World!"},methods: {printMessage: function() {console.log(this.message)}}})
</script>
这里Vue({})中有三个参数:el, data, methods:
el代表要挂在的HTML元素的iddata初始化了一些数据给页面,这里初始化了变量message的值为Hello Vue World!,而html代码中用{{ message }}表示这里使用message的值作为渲染内容method则是用来定义供页面使用的方法,这里定义了printMessage()方法,调用后会在控制台输出message的值
一个Vue应用代表一个网站,一个网站一般会有多个页面,对应到Vue中成为多个组件。一般来说,每个页面都是应用的一个组件,页面中需要被重复用的的部分也会单独拆分成一个组件。
我们在「网页开发|前端开发|Vue」01 快速入门:快速写一个Vue的HelloWorld项目中已经探索了使用脚手架工具生成的标准化Vue项目文件的结构以及各个代码之间的流转,可以回看加深一下理解。
二、模板语言:Vue如何编写页面
我们一般会将 Vue 组件定义在一个单独的 .vue 文件中,叫做单文件组件。
Vue扩展了HTML,称之为模板。任何合乎规范的 HTML 都是合法的 Vue 模板,在一个XXXX.vue文件中,会有<template></template>标签,在其中是HTML代码(这些HTML将最终被渲染成浏览器页面),如下:
<template><div class="hello"><h1>Hello World</h1></div>
</template>
这使得如果熟悉html语言,可以快速开发vue网站应用的开发。
在同一个XXXX.vue文件中,会有CSS代码,默认这些样式代码只针对这个文件中的HTML元素有效,如下:
<style scoped>
h1 {font-weight: normal;
}
</style>
这里的scoped属性是一个可选属性,加上之后会自动添加一个唯一的 attribute (比如 data-v-21e5b78) 为这个文件中内 CSS 指定作用域,编译的时候 .list-container:hover 会被编译成类似 h1[data-v-21e5b78]。
同样的,XXXX.vue文件中也会有javascript代码,以<script></script>包括起来,如下:
<script>
export default {name: 'HelloWorld',data() {return {msg: 'Hello Vue World!'}}
}
</script>
总而言之,我们只需要记住Vue所谓的模板就是将一个页面的HTML, CSS以及javascript代码单独放到一起的XXXX.vue文件。当我们要编写一个页面的时候,我们只需要在对应的.vue文件中编写代码即可。
我们在「网页开发|前端开发|Vue」02 从单页面到多页面网站:使用路由实现网站多个页面的展示和跳转 中已经介绍了如何将展示一个页面的网站,通过路由设计拓展成展示多个页面的网站,可以回看加深理解。
三、模板语法:类编程语言的设计
因为Vue的模板可以理解是扩展了的HTML,Vue提供了一些类似编程语言语法关键字的模板语法来帮助开发,也叫做指令。
Vue官网介绍,一个指令的本质是模板中出现的特殊标记,让处理模板的库知道需要对这里的 DOM 元素进行一些对应的处理。
指令的前缀是默认的 v-,常见指令如下:
v-if: 条件判断,当if条件为true时元素才会存在(注意,是直接在页面源代码中不存在这个元素的代码)。当有多个条件分支的时候会搭配v-else-if,v-else来使用。
<div id="app"><div v-if="type === 'A'">A</div><div v-else-if="type === 'B'">B</div><div v-else-if="type === 'C'">C</div><div v-else>type is not A or B or C</div>
</div>
v-show: 与v-if相似,用来控制是否展示某些元素。但v-if结果为false的时候页面源代码里不会有对应元素的代码,但是v-show为false的时候,页面源代码中也会有对应元素的代码,只是我们在浏览器渲染的页面中看不到而已。v-for:- for循环,主要用来处理数组,通过遍历来展示多个元素
- 注意,比如希望得到一个
<ul>中有多个<li>的结果,v-for应该写在<li>中
v-bind:- 当元素属性(比如
class)的值需要用到data里面定义的变量时,需要使用v-bind来标记 - 比如
<div v-bind:class="{ isActive?'active':'default' }">表示,如果当变量isActive的值为true,则class='active',否则class='default' v-bind:class="{ isActive?'active':'default' }"也可以简写成:class="{ isActive?'active':'default' }"
- 当元素属性(比如
v-on:- 与
v-bind类似,v-bind是在元素属性上绑定逻辑,v-on则是在元素事件上绑定逻辑。 - 比如
<button v-on:click="counter += 1">增加 1</button>是给button的click事件绑定了counter+=1的逻辑,使得每次点击Button都会将counter的值加一 v-on:click="counter += 1"可以简写成@click="counter += 1"
- 与
v-model: 用来在表单控件元素上(比如input)绑定某个数据变量,然后就可以通过表单控件来修改变量的值。
<div id="app"><p>input 元素:</p><input v-model="message" placeholder="编辑我……"><p>消息是: {{ message }}</p>
</div><script>
new Vue({el: '#app',data: {message: 'input what you want',}
})
</script>
我们看到这里在通过new Vue({...})创建了一个实例,然后实例化的同时初始化了变量message的值为input what you want,然后通过v-model将变量message绑定到<input>上,这个时候如果我们修改输入框中的内容,这个新的内容就会成为变量message新的值,相当于提供了通过用户输入修改变量值的途径,或者说提供了存储用户输入的途径。
四、计算属性与监听属性
直接在模板中的用变量的表达式虽然方便,但也只能用来做简单的操作。如果在模板中写太多逻辑,会让模板变得臃肿,难以维护,于是就有了计算属性和监听属性:
- 计算属性:我们可以指定通过一个变量A,去计算变量B,当A发生变化的时候,B会跟着重新计算。
- 监听属性:指定监听一个变量A,当变量A变化时,都会执行编写好的逻辑。这里的逻辑可以是计算也可以是其他的。
- 计算属性是为了及时更新值(计算逻辑只是得到值的手段),而监听属性是为了执行预定逻辑。
计算属性具体用法如下:
<template>
<div id="app"><button @click="count += 1">增加 1</button><p>Count: {{ count }}</p><p>Double Count: {{doubleCount}}</p>
</div>
</template>
<script>
export default {data() {return {count:1}},computed: {// 每当 count 改变时,这个函数就会执行doubleCount() {return this.count * 2}}
}
</script>
这里当我们点击button按钮使得变量count加一之后,doubleCount会重新计算。
注意,这里在computed的doubleCount函数体中要访问data()中定义的count,需要使用this来定位,不然会无法找到变量从而抛出如下的ReferenceError错误:
vue.esm.js:3767 ReferenceError: count is not definedat VueComponent.doubleCount (HelloWorld.vue:19:1)at Watcher.get (vue.esm.js:4164:1)at Watcher.evaluate (vue.esm.js:4265:1)at VueComponent.computedGetter [as doubleCount] (vue.esm.js:4490:1)at Object.get (vue.esm.js:706:1)at Proxy.render (HelloWorld.vue:16:1)at Vue._render (vue.esm.js:2540:1)at VueComponent.updateComponent (vue.esm.js:2980:1)at Watcher.get (vue.esm.js:4164:1)at new Watcher (vue.esm.js:4154:1)
监听属性具体用法如下:
<template><div id="app"><button @click="count += 1">点击</button><p>Count: {{ count }}</p></div>
</template>
<script>
export default {data() {return {count: 1}},watch: {// 每当 count 改变时,这个函数就会执行count(newValue, oldValue) {alert(`count从 ${oldValue} 增加到了 ${newValue}`)}}
}
</script>
这里watch中定义的count监听逻辑会有两个参数代表原值和新值,我们可以在逻辑中使用这两个值做一些判断或者计算。
五、生命周期与Hook函数
生命周期是一个类比人类生命的技术术语,用来表示元素或者说组件从被创建、初始化、渲染更新、再次渲染、卸载(移除)等一系列过程。
Vue 组件完整的生命周期包括,创建组件、初始化数据、编译模板、挂载 DOM、渲染、更新、再次渲染、卸载等一系列过程。
在这些过程的前后我们都要执行相应的方法,这些方法就叫做Hook(钩子)函数。而在Vue 组件的生命周期中有 8 个常用的钩子函数,我们可以在刚才的代码中加入各个生命周期Hook函数来测试效果,如下:
<template><div id="app"><button @click="count += 1">点击</button><p>Count: {{ count }}</p></div>
</template>
<script>
export default {data() {return {count: 1}},watch: {// 每当 count 改变时,这个函数就会执行count(newValue, oldValue) {alert(`count从 ${oldValue} 增加到了 ${newValue}`)}},beforeCreate() {console.log(`the vue is beforeCreate.`)},created() {console.log(`the vue is created.`)},beforeMount() {console.log(`the vue is beforeMount.`)},mounted() {console.log(`the vue is mounted.`)},beforeUpdate() {console.log(`the vue is beforeUpdate.`)},updated() {console.log(`the vue is updated.`)},beforeDestroy() {console.log(`the vue is beforeDestroy.`)},destroyed() {console.log(`the vue is destroyed.`)}
}
</script>
回到浏览器页面使用F12打开开发者工具,可以在console控制台中看到如下输出:
the vue is beforeCreate.
the vue is created.
the vue is beforeMount.
the vue is mounted.
点击按钮之后,可以看到console中额外有如下输出信息:
the vue is beforeUpdate.
the vue is updated.
所以我们可以看到,当浏览器执行代码进行页面渲染的时候,会依次执行创建组件的Hook函数(beforeCreate()和created())和挂载的Hook函数(beforeMount()和mounted())。
当我们进行点击或者其他交互行为时,页面元素或组件更新进行再次渲染,会触发更新的Hook函数(beforeUpdate()和updated()),而当卸载组件时才会触发卸载的Hook函数(beforeDestroy()和destroyed())
以上就是在Vue开发过程中主要会使用到的内容,至于其他更加细致针对具体应用场景的用法,直接在遇到具体开发场景时,查阅Vue文档即可。
本系列下一篇文章传送门
- 「网页开发|前端开发|Vue」05 Vue实战:从零到一实现一个网站导航栏
写文不易,如果对你有帮助的话,来一波点赞、收藏、关注吧~👇
相关文章:
「网页开发|前端开发|Vue」04 快速掌握开发网站需要的Vue基础知识
本文主要介绍使用Vue进行前端开发的一些必备知识,比如:Vue应用实例,Vue的组件概念,模板语言和模板语法,计算属性,路由配置等等。 文章目录 本系列前文传送门前言一、Vue实例:项目入口二、模板语…...
解决Redis分布式锁主从架构锁失效问题的终极方案 含面试题
面试题分享 2023最新面试合集链接 2023大厂面试题PDF 面试题PDF版本 java、python面试题 项目实战:AI文本 OCR识别最佳实践 AI Gamma一键生成PPT工具直达链接 玩转cloud Studio 在线编码神器 玩转 GPU AI绘画、AI讲话、翻译,GPU点亮AI想象空间 史上最全文档AI绘画stab…...
建站系列(三)--- 网络协议
目录 相关系列文章前言一、定义二、术语简介三、协议的组成要素四、网络层次划分五、常见网络协议划分六、常用协议介绍(一)TCP/IP(二)HTTP协议(超文本传输协议)(三)SSH协议 相关系列…...
jetson orin nx无显示器启动
sudo apt-get install xserver-xorg-core-hwe-18.04 sudo apt-get install xserver-xorg-video-dummy在 /usr/share/X11/xorg.conf.d/ 中添加 xorg.conf 文件。 Section "Monitor"Identifier "Monitor0"HorizSync 28.0-80.0VertRefresh 48.0-75.0Modeline…...
【APUE】标准I/O库
目录 1、简介 2、FILE对象 3、打开和关闭文件 3.1 fopen 3.2 fclose 4、输入输出流 4.1 fgetc 4.2 fputc 4.3 fgets 4.4 fputs 4.5 fread 4.6 fwrite 4.7 printf 族函数 4.8 scanf 族函数 5、文件指针操作 5.1 fseek 5.2 ftell 5.3 rewind 6、缓冲相关 6.…...
es6---模块化
main.js import { bar } from "./module1"; import module2 from "./module2"; bar() module2()module1.js // 多变量导出,导入变量需要变量名一对一映射 export const module1module1 export function bar(params) {console.log(module1) }m…...
【项目 计网12】4.32UDP通信实现 4.33广播 4.34组播 4.35本地套接字通信
文章目录 4.32UDP通信实现udp_client.cudp_server.c 4.33广播bro_server.cbro_client.c 4.34组播multi_server.cmulti_client.c 4.35本地套接字通信ipc_server.cipc_client.c 4.32UDP通信实现 udp_client.c #include <stdio.h> #include <stdlib.h> #include <…...
创建简单的 Docker 数据科学映像
推荐:使用NSDT场景编辑器快速搭建3D应用场景 为什么选择 Docker for Data Science? 作为一名数据科学家,拥有一个标准化的便携式分析和建模环境至关重要。Docker 提供了一种创建可重用和可共享的数据科学环境的绝佳方法。在本文中ÿ…...
angualr:CSS一个div内两个子元素的高度自适应
问题: 如题 参考: CSS一个div内两个子元素的高度自适应-腾讯云开发者社区-腾讯云...
Java基础之static关键字
目录 静态的特点第一章、静态代码块第二章、静态属性第三章、静态方法调用静态方法时静态方法中调用非静态方法时 第四章、static关键字与其他关键字 友情提醒 先看文章目录,大致了解文章知识点结构,点击文章目录可直接跳转到文章指定位置。 静态的特点…...
iPhone 15 Pro有5项重大设计升级,让iPhone 15看起来很无聊
距离苹果9月份的发布会还有不到一周的时间,我们很快就会第一次看到iPhone 15系列。源源不断的传言表明,这一代人将对大多数机型进行另一次增量更新,这对那些想换iPhone 14或更旧手机的人来说是个坏消息。 但这一次的高端选择,iPh…...
xCode14.3.1运行MonkeyDev出现“Executable Not Found“的解决办法
安装MonkeyDev遇到的坑 环境:Xcode Version 14.3.1 (14E300c) 错误提示 is not a valid path to an executable file. 报错 /Users/xxxx//Library/Developer/Xcode/DerivedData/MonTest-ccparhdyzjuqhjdergwrngpfwwoh/Build/Products/Debug-iphoneos/MonTest.app…...
C# Emgu.CV+Tesseract实现识别图像验证码
效果图,简单的还行,复杂的。。。拉跨 懒得写讲解了,全部源码直接上吧 /// <summary>/// 验证码识别/// </summary>public partial class FrmCodeIdentify : FrmBase{private string _filePath;// 原图像Image<Bgr, byte> …...
ORACLE 11.2.0.4 RAC Cluster not starting cssd with Cannot get GPnP profile
最近,处理一次oracle 11.2.0.4 rac cluster由于cssd无法启动,导致集群一个节点的CRS集群无法正常启动的故障。原本,计划变更是从ASM剔除磁盘,解除存储到数据库服务器的映射;磁盘已经成功从ASM剔除,也已经成…...
Converting Phase Noise to Random Jitter(Cycle-to-Cycle)
借用Phase Noise to Random Jitter(Period)的转换过程推导了Cycle to Cycle random Jitter,一般展频时钟调制,用来评估相邻周期的随机抖动。...
HashMap知识总结
HashMap: 1. 扰动函数hash值右移16位与原hash值做异或运算得出的新hash值散列程度高. 2. 负载因子0.75,就是说一个数组初始化new HashMap(17)容量会比17最小2的n次方大,就是32,想要已空间换时间,就是负载因子小于0.75这样的话hash冲突更低,但是扩容频率更高.3 扩容,jdk…...
PLC编码器测速(限幅滤波+中心差分法求导SCL源代码)
M法测速的基本原理,大家可以查看专栏的系列文章,这里不再赘述常用链接如下: PLC通过编码器反馈值计算速度的推荐做法(算法解析+ST代码)_编码器脉冲怎么转换为速度_RXXW_Dor的博客-CSDN博客PLC如何测量采集编码器的位置数据,不清楚的可以参看我的另一篇博文:三菱FX3U PLC…...
SW的stp文件转成CAD格式文件学习笔记
SW的stp文件转成CAD格式文件 文章目录 SW的stp文件转成CAD格式文件另存为part文件(零件图)另存为CAD文件 另存为part文件(零件图) 如图一个STP文件,右上角标注是什么文件呢 另存为零件图,即另存为part …...
【数据结构】栈---C语言版(详解!!!)
文章目录 🐸一、栈的概念及结构🍄1、栈的概念定义🍄2、动图演示🌲入栈🌲出栈🌲整体过程 🐸二、栈的实现🐸三、数组结构栈详解🍎创建栈的结构⭕接口1:定义结构…...
sqlserver 联表查询、子查询、窗口函数、聚合函数等概念与例子
with cte as的用法 查询的一个有用工具,允许创建临时命名结果集,可在查询中多次引用相同的子查询结果,可以提高查询的可读性和维护性 WITH cte_name (column1, column2, ...) AS (-- 这里是子查询SELECT column1, column2, ...FROM your_ta…...
Vim 调用外部命令学习笔记
Vim 外部命令集成完全指南 文章目录 Vim 外部命令集成完全指南核心概念理解命令语法解析语法对比 常用外部命令详解文本排序与去重文本筛选与搜索高级 grep 搜索技巧文本替换与编辑字符处理高级文本处理编程语言处理其他实用命令 范围操作示例指定行范围处理复合命令示例 实用技…...
日语AI面试高效通关秘籍:专业解读与青柚面试智能助攻
在如今就业市场竞争日益激烈的背景下,越来越多的求职者将目光投向了日本及中日双语岗位。但是,一场日语面试往往让许多人感到步履维艰。你是否也曾因为面试官抛出的“刁钻问题”而心生畏惧?面对生疏的日语交流环境,即便提前恶补了…...
k8s从入门到放弃之Ingress七层负载
k8s从入门到放弃之Ingress七层负载 在Kubernetes(简称K8s)中,Ingress是一个API对象,它允许你定义如何从集群外部访问集群内部的服务。Ingress可以提供负载均衡、SSL终结和基于名称的虚拟主机等功能。通过Ingress,你可…...
基于uniapp+WebSocket实现聊天对话、消息监听、消息推送、聊天室等功能,多端兼容
基于 UniApp + WebSocket实现多端兼容的实时通讯系统,涵盖WebSocket连接建立、消息收发机制、多端兼容性配置、消息实时监听等功能,适配微信小程序、H5、Android、iOS等终端 目录 技术选型分析WebSocket协议优势UniApp跨平台特性WebSocket 基础实现连接管理消息收发连接…...
Linux相关概念和易错知识点(42)(TCP的连接管理、可靠性、面临复杂网络的处理)
目录 1.TCP的连接管理机制(1)三次握手①握手过程②对握手过程的理解 (2)四次挥手(3)握手和挥手的触发(4)状态切换①挥手过程中状态的切换②握手过程中状态的切换 2.TCP的可靠性&…...
页面渲染流程与性能优化
页面渲染流程与性能优化详解(完整版) 一、现代浏览器渲染流程(详细说明) 1. 构建DOM树 浏览器接收到HTML文档后,会逐步解析并构建DOM(Document Object Model)树。具体过程如下: (…...
相机从app启动流程
一、流程框架图 二、具体流程分析 1、得到cameralist和对应的静态信息 目录如下: 重点代码分析: 启动相机前,先要通过getCameraIdList获取camera的个数以及id,然后可以通过getCameraCharacteristics获取对应id camera的capabilities(静态信息)进行一些openCamera前的…...
第 86 场周赛:矩阵中的幻方、钥匙和房间、将数组拆分成斐波那契序列、猜猜这个单词
Q1、[中等] 矩阵中的幻方 1、题目描述 3 x 3 的幻方是一个填充有 从 1 到 9 的不同数字的 3 x 3 矩阵,其中每行,每列以及两条对角线上的各数之和都相等。 给定一个由整数组成的row x col 的 grid,其中有多少个 3 3 的 “幻方” 子矩阵&am…...
Spring Cloud Gateway 中自定义验证码接口返回 404 的排查与解决
Spring Cloud Gateway 中自定义验证码接口返回 404 的排查与解决 问题背景 在一个基于 Spring Cloud Gateway WebFlux 构建的微服务项目中,新增了一个本地验证码接口 /code,使用函数式路由(RouterFunction)和 Hutool 的 Circle…...
安卓基础(aar)
重新设置java21的环境,临时设置 $env:JAVA_HOME "D:\Android Studio\jbr" 查看当前环境变量 JAVA_HOME 的值 echo $env:JAVA_HOME 构建ARR文件 ./gradlew :private-lib:assembleRelease 目录是这样的: MyApp/ ├── app/ …...
