前端小白的学习之路(Vue2 一)

提示:初学vue,vue2好上手一点,记录笔记:vue的概念,声明式编程与命令式编程的区别,vue的基本使用,模板语法,常用指令

目录

一、什么是vue

二、声明式编程与命令式编程

1.命令式编程

2.声明式编程

三、vue的基本使用

1.引入vue.js

2.设置挂载容器

3.创建Vue实例设置挂载点

四、模板语法

 五、常用指令 

1.v-text

2.v-html 

3.v-bind

4:v-model

5.v-if 与 v-else

6.v-show

7.v-for

8.v-on 


一、什么是vue

Vue.js 是一款流行的 JavaScript 前端声明式编程范式的框架,用于构建交互式的 Web 用户界面。Vue 专注于通过简单的 API 提供高效的响应式数据绑定组件化系统,使开发者可以更轻松地构建现代化的单页面应用(SPA)和动态网页。

Vue 具有以下特点和优势:

  1. 响应式数据绑定:Vue 使用双向数据绑定机制,当数据发生变化时,视图会自动更新。这使得开发者无需手动操作 DOM,提高了开发效率。

  2. 组件化开发:Vue 支持组件化开发,可以将页面拆分成多个独立、可复用的组件。每个组件可以拥有自己的状态和逻辑,使得项目结构更清晰、可维护性更高。

  3. 简洁明了的 API:Vue 提供了简单清晰的 API,易于学习和使用。它的核心库只关注视图层,更容易集成到现有项目中。

  4. 灵活性:Vue 提供了丰富的功能和选项,可以满足不同项目的需求。开发者可以选择使用 Vue Router 进行路由管理、Vuex 进行状态管理,或者与其它第三方库和工具结合使用。

  5. 高性能:Vue 的设计追求高效性能,通过虚拟 DOM 和异步更新等机制,尽可能减少对真实 DOM 的操作,从而提高页面渲染效率。

  6. 社区支持和生态系统:Vue 拥有庞大的社区和活跃的开发者社区,有大量的插件、工具和文档可供开发者使用和参考。

二、声明式编程与命令式编程

1.命令式编程

  • 在命令式编程中,你会告诉计算机要如何执行任务,每一步的操作都需要明确指定。
  • 开发者需要关注实现的细节,手动管理每一个操作,包括控制流程、状态变化和数据操作。
  • 原生的JS编码方式就是命令式编程。
<!DOCTYPE html>
<html lang="zh-cn"><head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta http-equiv="X-UA-Compatible" content="ie=edge"><title>开关灯</title><link rel="stylesheet" href="./libs/bootstrap/css/bootstrap.css">
</head><body><div class="container  my_container" style="background-color: white;height: 900px; overflow: hidden;"><button class="btn btn-success mt-5 my_button ">点击开关</button></div><script>// 点击按钮改变页面背景色// 三步走// 1) 获取标签const my_button = document.querySelector(".my_button");const my_container = document.querySelector(".my_container");// 定义布尔值let isShow = true;// 2)事件绑定my_button.onclick = () => {// 3) 交互逻辑if(isShow){my_container.style.backgroundColor="red";}else {my_container.style.backgroundColor="white";}// 控制布尔值isShow = !isShow;}</script>
</body></html>

2.声明式编程

  • 在声明式编程中,你只需要描述问题是什么,而不需要详细说明如何解决问题。
  • 开发者更多地关注问题的抽象描述,以及数据之间的关系,而不是具体的操作步骤。
  • vue就是声明式编程框架
<!DOCTYPE html>
<html lang="zh-cn"><head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta http-equiv="X-UA-Compatible" content="ie=edge"><title>开关灯</title><link rel="stylesheet" href="./libs/bootstrap/css/bootstrap.css">
</head><body><!-- 写法1 --><!-- <div id="app" class="container  my_container" v-bind:style="`background-color: ${isShow == true ? 'white': 'red'};height: 900px; overflow: hidden;`"><button class="btn btn-success mt-5 my_button "v-on:click="isShow=!isShow">点击开关</button></div> --><!-- 写法2: 模板--><div id="app" class="container  my_container"v-bind:style="`background-color: ${color};height: 900px; overflow: hidden;`"><button class="btn btn-success mt-5 my_button " v-on:click="addEvent">点击开关</button></div><!-- 1)  --><script src="./libs/vue@2.7.16/vue.js"></script><script>// 点击按钮改变页面背景色// 写法1:// new Vue({//     el: "#app",//     data: {//         isShow: true//     },// })// 写法2:// 创建vue实例new Vue({// 挂载容器el: "#app",// 数据data: {color: "white",isShow: true},// 方法methods: {// 自定义方法addEvent(){if(this.isShow){this.color = "red"}else {this.color = "white";}// 开关灯this.isShow = !this.isShow;}}})</script>
</body></html>

三、vue的基本使用

1.引入vue.js

官网地址:https://cn.vuejs.org/

vue2下载地址:https://v2.cn.vuejs.org/v2/guide/installation.html

    <script src="./libs/vue@2.7.16/vue.js"></script>

2.设置挂载容器

<div id="app" v-cloak></div>

v-cloak:v-cloak 是 Vue.js 提供的一个指令,用于解决在 Vue 应用中初次加载时出现的闪烁问题。

               在使用vue做原生项目(没有利用webpack或者脚手架构建的项目) 防止出现抖动。

3.创建Vue实例设置挂载点

const vm = new Vue({// 设置挂载点el: "#app",// 添加数据(属性)data: {return{}},//添加方法(函数)methods:{}})

四、模板语法

Vue.js 的模板语法是一种简单直观的语法,用于将数据绑定到 HTML 中,实现动态的视图渲染。

文本插值:使用双大括号 {{ }} 将数据插入到 HTML 中,并填写js代码

<!DOCTYPE html>
<html lang="zh-cn">
<head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta http-equiv="X-UA-Compatible" content="ie=edge"><title>Vue</title>
</head>
<body><!-- 插值表达式 {{ js代码 }} --><div id="app" v-cloak><h2>{{123}}</h2><!-- 报错 直接填写abc, 既不是字符串,也不是变量 --><!-- <h2>{{abc}}</h2> --><h2>{{'abc'}}</h2><!-- 可以书写三元运算 --><h2>{{typeof 'abc' === 'string' ? '字符串类型':'其他类型'}}</h2><!-- 可以填写变量 --><h2>{{title}}</h2></div><script src="./libs/vue@2.7.16/vue.js"></script><script>//禁止控制台输出日志信息Vue.config.productionTip = false;new Vue({//挂载容器el: "#app",// 添加属性data: {title: "标题2222"}})</script>
</body>
</html>

 五、常用指令 

1.v-text

 设置文本

<h2 v-text="title"></h2>

2.v-html 

设置超文本

<h2 v-html="title"></h2>

3.v-bind

动态绑定属性

v-bind:属性名="变量|js表达式"

简写  :(直接冒号) 

:属性名="变量|js表达式"
<div v-bind:class="isShow==true?'xxx':'yyy'">123123</div>
<!-- 填写变量(类名有多个) -->
<div v-bind:class="['box', {red: true}]"></div>
<!-- 填写变量(类名只有一个) -->
<div v-bind:class="aaa"></div>
<!-- 简写 -->
<div :class="bbb"></div>
<!-- style也是标签属性,能做成动态属性 --><!-- 因为在style属性前添加了“:”就变成了动态属性,动态属性识别的是js代码。 -->
<div :style="`width: 100px;height: 100px;background-color: yellowgreen;`"></div>
<div :style="`width: 100px;height: 100px;background-color: ${bgColor};`"></div>

4:v-model

数据双向绑定(一般用于表单元素,绑定双方有一方数据更改另一边也会改变数据)

<!DOCTYPE html>
<html lang="zh-cn">
<head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta http-equiv="X-UA-Compatible" content="ie=edge"><title>Vue</title><link rel="stylesheet" href="./libs/bootstrap/css/bootstrap.min.css">
</head>
<body><div id="app"><div class="container p-5"><input v-model="user.name" type="text" class="form-control" placeholder="请输入姓名"> <br><input v-model="user.age" type="text" class="form-control" placeholder="请输入年龄"> <br><input v-model="user.addr" type="text" class="form-control" placeholder="请输入地址"> <br><!-- v-model="keyword" 双向绑定 --><input v-model="keyword" type="text" class="form-control" placeholder="请输入关键字"><h3>{{keyword}}</h3><input style="width: 40px;height: 40px;" type="checkbox" v-model="opt"><p>{{opt}}</p></div></div><script src="./libs/vue@2.7.16/vue.js"></script><script>// v-model 通常应用在表单收集信息的地方。//禁止控制台输出日志信息Vue.config.productionTip = false;new Vue({//挂载容器el: "#app",// 数据data: {keyword: "",opt: "",user: {age: 20,addr: "广州",name: "姓名"}}})</script>
</body>
</html>

5.v-if 与 v-else

 v-if:接受一个布尔值,true时显示元素,false移除元素

v-else:必须跟在一个v-if后面,跟v-if的功能正好相反,不接收参数

<div v-if="true">Visible</div>
<div v-else>Not Visible</div>

6.v-show

  v-show:接受一个布尔值,true时显示元素,false隐藏元素

<div v-show="true">Visible</div>

v-if与v-show的区别: 

  1. 渲染方式

    • v-show 控制的元素始终被渲染到 DOM 中,只是通过 CSS 的 display 属性来控制其显示与隐藏。即使在初始渲染时,v-show 的元素也会被渲染到页面中,只是根据条件隐藏。
    • v-if 控制的元素在条件为真时才会被渲染到 DOM 中,当条件为假时,元素不会被渲染到页面中。
  2. 性能开销

    • 在初始渲染时,如果条件为假,v-show 会产生一些性能开销,因为即使元素不可见,它仍然被渲染到 DOM 中。但是,后续的切换显示状态不会有额外的性能开销。
    • v-if 在初始渲染时,如果条件为假,元素不会被渲染到 DOM 中,因此可以减少一些性能开销。但是,在切换显示状态时,会涉及到销毁和重新创建元素,可能会有一些性能开销。
  3. 适用场景

    • 当需要频繁切换显示状态时,例如在 Tab 切换、动画效果等场景下,使用 v-show 更合适,因为它不会涉及销毁和重新创建元素,性能更好。
    • 当元素的显示与隐藏不频繁变化,并且在初始渲染时条件可能为假时,可以考虑使用 v-if,因为它可以减少初始渲染时的性能开销。

7.v-for

列表渲染,用于在模板中进行循环渲染数组或对象的内容,生成重复的 HTML 元素。

<!DOCTYPE html>
<html lang="zh-cn">
<head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta http-equiv="X-UA-Compatible" content="ie=edge"><title>Vue</title><link rel="stylesheet" href="./libs/bootstrap/css/bootstrap.min.css"><style>.box {width: 100px;height: 100px;border: 1px solid #ccc;}</style>
</head>
<body><div id="app"><!-- 指令: v-for 指令,循环数组。item:当前循环的元素,index:当前元素的下标--><div class="box" v-for="(item,index) in arr" :style="`background-color:${item};`">{{index}} --》{{item}}</div><!-- 表格 --><table class="table table-bordered"><thead><tr><th>序号</th><th>姓名</th><th>ID</th></tr></thead><tbody><!-- 循环result数组 --><!-- v-bind:key="每一项数据的ID(字符串|数字)" 优化列表渲染!!! --><tr v-for="(opt,i) in result" v-bind:key="opt.id"><td>{{i + 1}}</td><td>{{opt.name}}</td><td>{{opt.id}}</td></tr></tbody></table></div><script src="./libs/vue@2.7.16/vue.js"></script><script>//禁止控制台输出日志信息Vue.config.productionTip = false;new Vue({//挂载容器el: "#app",// 数据data: {// 数组arr: ['red','green','blue'],// 数组2result:[{name: "张三", id:11},{name: "李四", id:22},{name: "赵五", id:33},{name: "孙六", id:44},]}})</script>
</body>
</html>

8.v-on 

用于事件绑定,如点击事件,键盘事件等

<button v-on:click="handleClick">Click me</button>

简写:@事件

<button @click="handleClick">Click me</button>
<!DOCTYPE html>
<html lang="zh-cn"><head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta http-equiv="X-UA-Compatible" content="ie=edge"><title>Vue</title><link rel="stylesheet" href="./libs/bootstrap/css/bootstrap.min.css">
</head><body><div id="app"><div class="container"><!-- 绑定事件 --><!-- v-on:click="foo1" 事件绑定 v-on:事件类型="方法名称"--><button class="btn btn-success" v-on:click="foo1">点击事件1</button><button class="btn btn-danger" v-on:mouseenter="foo2">鼠标移入事件</button><!-- 简写: @ @click="foo1"@事件类型="方法名称"--><button class="btn btn-primary" @click="foo1">点击事件2</button></div></div><script src="./libs/vue@2.7.16/vue.js"></script><script>//禁止控制台输出日志信息Vue.config.productionTip = false;const vm = new Vue({//挂载容器el: "#app",// 方法methods: {// 方法名称foo1() {alert("点击按钮,触发事件,执行方法!");},foo2() {alert("鼠标移入按钮,触发事件,执行方法!");}}})// 观察vue实例// console.log(vm);</script>
</body></html>

 

 

 

 

 

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

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

相关文章

聚类分析 | 聚类有效性评价指标外部NMI(MATLAB)

指标解释 聚类有效性评价指标中的外部NMI(Normalized Mutual Information,归一化互信息)是一种常见的外部有效性指标,用于评估聚类结果与真实标签之间的相似度。NMI从信息论的角度出发,衡量两个聚类结果的共享信息量。 NMI的计算基于聚类结果和真实标签之间的互信息以及…

Vue.nextTick() 使用场景及实现原理

Vue.nextTick() 基本使用 作用&#xff1a; 等待下一次 DOM 更新刷新的工具方法。 为什么需要用到Vue.nextTick()&#xff1f; 当你在 Vue 中更改响应式状态时&#xff0c;最终的 DOM 更新并不是同步生效的&#xff0c;而是由 Vue 将它们缓存在一个队列中&#xff0c;直到下一…

tensorflow.js 如何使用opencv.js通过面部特征点估算脸部姿态并绘制示意图

文章目录 前言一、实现步骤1. 获取所需特征点的索引2. 使用opencv.js 计算俯仰角、水平角和翻滚角cv.solvePnP介绍cv.solvePnP原理运行代码查看效果 3.绘制姿态示意直线添加canvas元素计算姿态直线坐标并绘制 总结 前言 在计算机视觉领域&#xff0c;估算脸部姿态是一项具有挑…

注入类型(二)

一、二次注入 原理 在第一次进行数据库插入数据的时候&#xff0c;使用了addslashes等函数对其中的特殊字符进行了转义&#xff0c;但是addslashes有一个特点就是虽然参数在过滤后会添加 "\" 进行转义&#xff0c;但是 "\" 并不会插入到数据库中&#xff…

Dubbo 负载均衡

Dubbo 负载均衡 1、什么是负载均衡&#xff1f; 负载均衡是在支持应用程序的资源池中平均分配网络流量的一种方法。 现代应用程序必须同时处理数百万用户&#xff0c;并以快速、可靠的方式将正确的文本、视频、图像和其他数据返回给每个用户。 为了处理如此高的流量&#x…

(虚拟DOM)前端八股文修炼Day10

一 虚拟 DOM 是什么 虚拟 DOM (Virtual DOM) 本质上是真实 DOM 的一个轻量级的 JavaScript 表示形式。它是一个在内存中的抽象&#xff0c;用于描述真实 DOM 的结构和内容。虚拟 DOM 提供了一种机制&#xff0c;允许开发者通过操作 JavaScript 对象来间接更新页面&#xff0c;…

GitHub教程:最新如何从GitHub上下载文件(下载单个文件或者下载整个项目文件)之详细步骤讲解(图文教程)

&#x1f42f; GitHub教程&#xff1a;最新如何从GitHub上下载文件(下载单个文件或者下载整个项目文件)之详细步骤讲解(图文教程) &#x1f4c1; 文章目录 &#x1f42f; GitHub教程&#xff1a;最新如何从GitHub上下载文件(下载单个文件或者下载整个项目文件)之详细步骤讲解(图…

【Leetcode】【240406】1249. Minimum Remove to Make Valid Parentheses

其实大部分是东京时间第二天凌晨才做的- -但国际服刷新比较晚 BGM&#xff1a;刀剑如梦 Decsripition Given a string s of ‘(’ , ‘)’ and lowercase English characters. Your task is to remove the minimum number of parentheses ( ‘(’ or ‘)’, in any position…

0104练习与思考题-算法基础-算法导论第三版

2.3-1 归并示意图 问题&#xff1a;使用图2-4作为模型&#xff0c;说明归并排序再数组 A ( 3 , 41 , 52 , 26 , 38 , 57 , 9 , 49 ) A(3,41,52,26,38,57,9,49) A(3,41,52,26,38,57,9,49)上的操作。图示&#xff1a; tips:&#xff1a;有不少在线算法可视化工具&#xff08;软…

鸿蒙内核源码分析 (内存管理篇) | 虚拟内存全景图是怎样的

初始化整个内存 OsSysMemInitOsMainmain从 main() 跟踪可看内存部分初始化是在 OsSysMemInit() 中完成的。 UINT32 OsSysMemInit(VOID) {STATUS_T ret;OsKSpaceInit();//内核空间初始化ret OsKHeapInit(OS_KHEAP_BLOCK_SIZE);// 内核动态内存初始化 512K if (ret ! LOS_OK…

【LeetCode】454. 四数相加 II

目录 题目 思路 代码 题目 题目链接&#xff1a;. - 力扣&#xff08;LeetCode&#xff09; 给你四个整数数组 nums1、nums2、nums3 和 nums4 &#xff0c;数组长度都是 n &#xff0c;请你计算有多少个元组 (i, j, k, l) 能满足&#xff1a; 0 < i, j, k, l < nnums1…

一款轻量、干净的 Laravel 后台管理框架

系统简介 ModStart 是一个基于 Laravel 的模块化快速开发框架。模块市场拥有丰富的功能应用&#xff0c;支持后台一键快速安装&#xff0c;让开发者能快的实现业务功能开发。 系统完全开源&#xff0c;基于 Apache 2.0 开源协议&#xff0c;免费且不限制商业使用。 系统特性 …

做过的题-最大字段和的一个模板题

题目链接&#xff1a;StarryCoding | 奕歌科技 #include <bits/stdc.h> using ll long long; using namespace std; const int N 1e5 9; int a[N]; //对应动物的类型 int w[N]; //对应动物的体重 ll s[N]; //偏移量前缀和(释放魔法后) int main() {ios::sync_with_s…

蓝桥杯每日一题(博弈论)

4005 取石子游戏 巴什博弈: 取石子儿&#xff0c;石子儿一共n个&#xff0c;如果只能取1-m个&#xff0c;两个人轮流取。 (m1)|n 先手取x个&#xff0c;后手就可以取&#xff08;m1-x&#xff09;个。最后一定是后手全部取完。 若不能整除n的话。若先手先把余数全部取完…

【R语言基础】如何提取矩阵的上三角矩阵

如何提取矩阵的上三角矩阵&#xff1a; 例如&#xff1a;已知矩阵&#xff0c;如何求除对角线值以外均值。 问题描述 提示&#xff1a;求矩阵最大值、最小值、均值&#xff1b;可以值提取上/下三角形矩阵&#xff1b;借助R包 实现方法 借助R包gdata,函数upper.tri 与函数 l…

第三、四章 if语句 + 循环

第三章 if语句 bool类型 两种&#xff1a;True和False bool_1 True bool_2 False print(f"bool_1变量的内容是&#xff1a;{bool_1}," f"类型是&#xff1a;{type(bool_1)}") print(f"bool_2变量的内容是&#xff1a;{bool_2}," f"类…

解决Selenium元素拖拽不生效Bug

前几天在使用Selenium进行元素拖拽操作时&#xff0c;发现Selenium自带的元素拖拽方法&#xff08;dragAndDrop()&#xff09;不生效&#xff0c;网上的回答也是五花八门&#xff0c;比较混乱&#xff0c;尝试了以下几种方法均无法解决。 方案1&#xff1a;通过dragAndDrop()方…

外部模块介绍(七) 蓝牙HC05

HC05原理图 2. 蓝牙模块的调试 2.1 两种工作模式: HC-05蓝牙串口通讯模块具有两种工作模式:命令响应工作模式和自动连接工作模式。在自动连接工作模式下模块又可分为主(Master)、从(Slave)和回环(Loopback)三种工作角色。 当模块处于自动连接工作模式时,将自动根据事…

二叉树练习day.3

104.二叉树的最大深度 链接&#xff1a;. - 力扣&#xff08;LeetCode&#xff09; 题目描述&#xff1a; 给定一个二叉树 root &#xff0c;返回其最大深度。 二叉树的 最大深度 是指从根节点到最远叶子节点的最长路径上的节点数。 示例 1&#xff1a; 输入&#xff1a;root…

pygame旋转直线,计算角色到墙距离

pygame怎么计算距离 在Pygame中&#xff0c;计算两点之间的距离可以使用几何公式。给定两点P1(x1, y1)和P2(x2, y2)&#xff0c;距离D可以用以下公式计算&#xff1a; D √((x2 - x1) (y2 - y1)) 在Python中&#xff0c;你可以使用math库中的sqrt函数来计算平方根。以下是一…