Vue3学习日记(day3)

news2024/12/29 9:08:58

目录详解:

简单解释:

详细解释:

.vscode

public

assets

compents

router

views

app.vue

package.json

package-lock.json

区别

探究文档

应用配置​

语法合集

插值表达式​

V- HTML(易造成xss漏洞)​

V-bind

简写​

同名简写 (vue3.4+)​

V-bind(布尔类型)​

多值绑定

JS使用

调用函数​

受限的全局访问​

V-on

动态参数

限制


目录详解:

接下来让我们先了解vite创建的目录各部分的作用。

简单解释:

由day2日记中我们创建的应用为参考。

详细解释:

.vscode

在VSCode中,.vscode目录下的extensions.json文件是用来配置推荐的扩展插件的。这个配置文件告诉VSCode当你打开这个项目时,它应该推荐你安装哪些扩展以获得更好的开发体验。

public

public文件夹主要用于存放那些不需要通过模块打包系统处理的静态资源。这些资源将被直接复制到构建输出的目录中,并且不会经过任何转换或优化,它们会被原样保留。

assets

对于需要动态处理或模块化导入的资源(如样式表、脚本文件等),应该放在src目录下,而不是public目录。因为public目录中的文件不会被Vite的构建过程所影响,所以它们不会被压缩、转换或添加哈希值,这可能会影响缓存策略和性能优化。

compents

提供一个组件模板,基本不使用

router

路由,day2日记中自行创建

views

视图集,day2日记中自行创建

app.vue

一般用来渲染路由

package.json

package.json文件是Node.js项目的核心配置文件,它包含以下信息:

  • 项目元数据,比如项目名称、版本、描述、作者、许可证等。
  • 项目的依赖列表(dependencies),包括运行项目所需的第三方模块。
  • 开发依赖列表(devDependencies),这些是开发过程中需要的工具和库,但并不包含在最终发布的包中。
  • 脚本命令,定义了可以运行的npm脚本,如构建、测试、启动服务器等。
  • 其他配置信息,如仓库URL、关键词、贡献者等。
package-lock.json

package-lock.json文件是由npm在版本5及以上版本中引入的,其目的是为了确保项目的依赖树在不同环境中是一致的。package-lock.json包含以下信息:

  • 依赖树的精确版本和来源,包括每个依赖及其子依赖的确切版本。
  • 安装依赖时使用的npm版本和操作系统信息。
  • 安装过程中的任何警告或错误信息。
区别
  • 可重复性package-lock.json确保了无论谁在哪台机器上运行npm install,得到的node_modules目录的内容都是一样的,提供了可重复的构建环境。
  • 安装速度package-lock.json中存储的依赖信息可以帮助加速npm install过程,因为它避免了重新解析依赖树的需要。
  • 更新管理package-lock.json锁定了依赖的版本,如果你想更新依赖,你需要先更新package.json中的版本范围,然后重新运行npm install来更新package-lock.json
  • 源代码控制package-lock.json应该被纳入版本控制系统,以保证团队成员之间的依赖一致性。

探究文档

接下来,让我们继续探究vue3文档。(!仅会探究比较难懂的部分,其余简单部分或与vue2无异则不做探究,请自行查看文档!

应用配置​

【笔记:(应用:层级分析:项目-应用-组件,多个vue组件组成一个vue应用实例)】应用实例会暴露一个 .config 对象允许我们配置一些应用级的选项,例如定义一个应用级的错误处理器,用来捕获所有子组件上的错误:

js

app.config.errorHandler = (err) => {
  /* 处理错误 */
}

【笔记:(你可以在里面编写自己的错误逻辑,和报错提醒,以便于更好的处理错误)】

应用实例还提供了一些方法来注册应用范围内可用的资源,例如注册一个组件:

js

app.component('TodoDeleteButton', TodoDeleteButton)

这使得 TodoDeleteButton 在应用的任何地方都是可用的。我们会在指南的后续章节中讨论关于组件和其他资源的注册。你也可以在 API 参考中浏览应用实例 API 的完整列表。

确保在挂载应用实例之前完成所有应用配置!


语法合集

插值表达式​

最基本的数据绑定形式是文本插值,它使用的是“Mustache”语法 (即双大括号):

<span>Message: {{ msg }}</span>

双大括号标签会被替换为相应组件实例中 msg 属性的值。且双向绑定,同步改变。


V- HTML(易造成xss漏洞)​

【笔记:(xss漏洞

XSS(Cross-Site Scripting)漏洞,即跨站脚本攻击,类似于sql注入,是一种常见的Web安全问题。

eg:假设一个网站允许用户发布评论,如果网站直接将用户的评论内容通过v-html指令渲染到页面上,而没有进行适当的转义处理或过滤,那么攻击者就可以在评论中插入恶意的JavaScript代码。当其他用户浏览这个含有恶意代码的评论时,他们的浏览器就会执行这段代码,导致XSS攻击发生。)】

双大括号会将数据解释为纯文本,而不是 HTML。若想插入 HTML,你需要使用 v-html 指令:

<p>Using text interpolation: {{ rawHtml }}</p>
<p>Using v-html directive: <span v-html="rawHtml"></span></p>

V-bind

双大括号不能在 css中使用。想要响应式地绑定一个 css,应该使用 v-bind 指令

<div v-bind:id="dynamicId"></div>

v-bind 指令指示 Vue 将元素的 id  与组件的 dynamicId 属性保持一致。如果绑定的值是 null 或者 undefined,那么指令无效移除

简写​

<div :id="dynamicId"></div>

同名简写 (vue3.4+)​

<!-- 与 :id="id" 相同 -->
<div :id></div>

<!-- 这也同样有效 -->
<div v-bind:id></div>

V-bind(布尔类型)​

v-bind 在这种场景下的行为略有不同:

<button :disabled="isButtonDisabled">Button</button>

当 isButtonDisabled 为真值或一个空字符串 (即 <button disabled="">) 时,元素会包含这个 disabled attribute。而当其为其他假值时 attribute 将被忽略。

多值绑定

如果你有像这样的一个包含多个值的 JavaScript 对象:

data() {
  return {
    objectOfAttrs: {
      id: 'container',
      class: 'wrapper'
    }
  }
}

通过不带参数的 v-bind,你可以将它们绑定到单个元素上:

<div v-bind="objectOfAttrs"></div>

JS使用

数据绑定仅支持单一表达式(也就是一段能够被求值的 JavaScript 代码)

因此,下面的例子都是无效的:

<!-- 这是一个语句,而非表达式 -->
{{ var a = 1 }}

<!-- 条件控制也不支持,请使用三元表达式 -->
{{ if (ok) { return message } }}

调用函数​

可以在绑定的表达式中使用一个组件暴露的方法:

【笔记:(组件暴露(仅在同组件)

在Vue.js中,组件可以暴露(export)方法、计算属性(computed properties)、数据属性(data properties)等,以便在其他组件或模板中使用。当我们在一个组件内部定义了某个方法或属性,并希望在该组件的模板或其它组件中调用它时,我们就需要将这些方法或属性“暴露”出来。

eg:在一个名为MyComponent.vue的组件中,我们可以定义一个方法formatDate来格式化日期:

1<script>
2export default {
3  methods: {
4    formatDate(date) {
5      // 这里是你的日期格式化逻辑
6      return date.toLocaleDateString();
7    }
8  }
9}
10</script>

然后,在该组件的模板中,我们就可以直接使用这个方法:

1<template>
2  <div>
3    <time>{{ formatDate(new Date()) }}</time>
4  </div>
5</template>

)】

<time :title="toTitleDate(date)" :datetime="date">
  {{ formatDate(date) }}
</time>

受限的全局访问​

模板中的表达式将被沙盒化,仅能够访问到有限的全局对象列表。该列表中会暴露常用的内置全局对象,比如 Math 和 Date

没有显式包含在列表中的全局对象将不能在模板内表达式中访问,例如用户附加在 window 上的属性。然而,你也可以自行在 app.config.globalProperties 上显式地添加它们,供所有的 Vue 表达式使用。

【笔记:(

常见处理对象:math和date

eg:

在模板中你可以直接使用如下表达式:

1<span>{{ Math.sqrt(16) }}</span>

这将显示4,因为Math.sqrt是允许在模板表达式中直接调用的函数之一。

然而,如果有一些自定义的全局变量或函数,例如你可能在window上附加了一些属性或函数,这些默认情况下是无法在模板表达式中访问的。

1// 假设你在全局作用域(可能是你的主JS文件中)添加了以下代码:
2window.myFunction = function() { return 'Hello, world!'; }

然后试图在模板中使用它:

1<span>{{ myFunction() }}</span>

这将不会工作,因为myFunction不在允许的全局对象列表中。为了解决这个问题,你可以在app.config.globalProperties上添加这个函数,使得它可以在所有Vue表达式中访问。

1import { createApp } from 'vue';
2
3const app = createApp(App);
4
5// 添加自定义的全局属性或方法
6app.config.globalProperties.$myFunction = function() {
7  return 'Hello, world!';
8};
9
10app.mount('#app');

现在,在模板中你可以通过$myFunction()来调用这个函数:

1<span>{{ $myFunction() }}</span>

这样,你就可以在保证应用安全性的同时,灵活地使用更多的全局对象和函数了。

)】


V-on

它将监听 DOM 事件:

<a v-on:click="doSomething"> ... </a>

<!-- 简写 -->
<a @click="doSomething"> ... </a>

动态参数

<!--
注意,参数表达式有一些约束,
参见下面“动态参数值的限制”与“动态参数语法的限制”章节的解释
-->
<a v-bind:[attributeName]="url"> ... </a>

<!-- 简写 -->
<a :[attributeName]="url"> ... </a>
<a v-on:[eventName]="doSomething"> ... </a>

<!-- 简写 -->
<a @[eventName]="doSomething"> ... </a>

限制

1:动态参数中,表达式的值如果为null则是未绑定,其他非字符串则会报错。

2:动态参数中,表达式中的空格和引号均为非法字符。

3:html内嵌模板中,大写字母会被浏览器强制为小写字母。

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

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

相关文章

2024世界人工智能大会“SAIL奖”发布

作为世界人工智能大会的最高奖项&#xff0c;SAIL 奖&#xff08;Super AI Leader&#xff0c;卓越人工智能引领者&#xff09;坚持“追求卓越、引领未来”的理念&#xff0c;评选和运营秉持“高端化、国际化、专业化、市场化、智能化”原则&#xff0c;从全球范围发掘在人工智…

VS2019+QT5.15调用动态库dll带有命名空间

VS2019QT5.15调用动态库dll带有命名空间 vs创建动态库 参考&#xff1a; QT调用vs2019生成的c动态库-CSDN博客 demo的dll头文件&#xff1a; // 下列 ifdef 块是创建使从 DLL 导出更简单的 // 宏的标准方法。此 DLL 中的所有文件都是用命令行上定义的 DLL3_EXPORTS // 符号…

品牌渠道管控的风险与要点

品牌在管控渠道时&#xff0c;不仅要注重方法和效果&#xff0c;还得留意风险&#xff0c;以免被误解为“垄断”。在与品牌接触和服务过程中&#xff0c;我们整理出完善且合规的治理方法供品牌参考。先简单分享品牌控价的知识点。 价格管控指的是品牌对渠道低价、乱价情况的管理…

Vue 路由:一级路由,嵌套路由

1、安装路由插件,因为用的是vue2 所以路由版本要和vue2对应上&#xff0c;所有有3 yarn add vue-router3 2、在main.js里引入 import VueRouter from vue-router Vue.use(VueRouter) 3、新建文件夹 router,创建index.js 4、引入路由插件&#xff0c;并且暴露出来这个路由 5、在…

【OpenCV】CUDA讲解(一)

很高兴在雪易的CSDN遇见你 VTK技术爱好者 QQ&#xff1a;870202403 公众号&#xff1a;VTK忠粉 前言 本文分享关于CUDA的知识&#xff0c;希望对各位小伙伴有所帮助&#xff01; 感谢各位小伙伴的点赞关注&#xff0c;小易会继续努力分享&#xff0c;一起进步&#xf…

探索 doc 和 docx 文件格式的区别

人不走空 &#x1f308;个人主页&#xff1a;人不走空 &#x1f496;系列专栏&#xff1a;算法专题 ⏰诗词歌赋&#xff1a;斯是陋室&#xff0c;惟吾德馨 目录 &#x1f308;个人主页&#xff1a;人不走空 &#x1f496;系列专栏&#xff1a;算法专题 ⏰诗词歌…

Vue脚手架引入vant 以及 Vant is not defined原因

本文基于vue 2.6.14 以及 vant 2.13.2 版本的 vue-cli 脚手架。 一. 引入vant Vant 2 - 轻量、可靠的移动端组件库 (vant-ui.github.io) 引入 vant npm i vantlatest-v2 -S 引入官网所说的自动按需引入组件 npm i babel-plugin-import -D 配置 babel.config.js (.babel…

还能报名!风靡硅谷开发者的Unstructured Data Meetup 杭州站与您6月15日见面!

“最硅谷”的Unstructured Data Meetup即将来到杭州西溪&#xff01; 众所周知&#xff0c;AI 三要素包括&#xff1a;算力、算法和数据。数据的价值愈发凸显&#xff0c;而其中非结构化数据更是备受关注。IDC 预测&#xff0c;到 2027年&#xff0c;全球数据总量中将有超过 8…

Kubernetes 如何删除 Terminating 状态的 Pod

在 Kubernetes (k8s) 中&#xff0c;Pod 是运行容器化应用的最小部署单元。当我们删除一个 Pod 时&#xff0c;通常它会快速进入 Terminating 状态并被删除。然而&#xff0c;有时由于种种原因&#xff0c;Pod 会长时间停留在 Terminating 状态。本文将详细介绍如何处理和删除这…

MyBatis的运行原理

目录 1、目的&#xff1a;梳理一下MyBatis运行时的几个对象&#xff0c;我们需要搞清楚他们的作用&#xff0c;进而需要理解mybatis的整个工作流程和执行原理。 2、简要概括各个类 2.1 Resources 作用&#xff1a;编写资源加载类&#xff0c;使用类加载器加载 配置文件(myb…

AI驱动的电子元器件商城物流优化

随着电子元器件市场的不断发展&#xff0c;电子元器件商城&#xff08;ECM&#xff09;的物流管理变得越来越复杂。如何通过人工智能&#xff08;AI&#xff09;技术优化物流流程&#xff0c;提高物流效率&#xff0c;成为电子元器件商城需要解决的重要问题。本文将探讨AI驱动的…

RawChatGPT:公益大模型使用网站

文章目录 一、Rawchat简介1.1 RawChat的主要特性1.2 RawChat的技术原理简述 二、使用教程三、案例应用3.1 图片内容分析3.2 生图演示3.3 文档解析 一、Rawchat简介 RawChat平台的诞生&#xff0c;其核心理念是降低用户访问类似ChatGPT这类先进AI服务的门槛&#xff0c;同时提供…

Python基础教程(十四):OS 文件/目录方法

&#x1f49d;&#x1f49d;&#x1f49d;首先&#xff0c;欢迎各位来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里不仅可以有所收获&#xff0c;同时也能感受到一份轻松欢乐的氛围&#xff0c;祝你生活愉快&#xff01; &#x1f49d;&#x1f49…

【Python】一文向您详细介绍 sys.argv

【Python】一文向您详细介绍 sys.argv 下滑即可查看博客内容 &#x1f308; 欢迎莅临我的个人主页 &#x1f448;这里是我静心耕耘深度学习领域、真诚分享知识与智慧的小天地&#xff01;&#x1f387; &#x1f393; 博主简介&#xff1a;985高校的普通本硕&#xff0c;曾…

数字化:蚓链帮你打通企业营销线上线下的“任督二脉”!

​在这个飞速发展的时代&#xff0c;数字化如同一把神奇的钥匙&#xff0c;开启了企业营销的全新篇章&#xff01;它正以惊人的力量助力企业实现线上线下的融合&#xff0c;为企业带来新的机遇和挑战&#xff01; 数字化成为企业营销的关键驱动力。它通过多种方式实现线上和线…

AI助手:Agent工作流程与应用场景详解

引言 智能体&#xff08;Agent&#xff09;是一种在特定环境中自主行动、感知环境、做出决策并与其他智能体或人类进行交互的计算机程序或实体。它们具备自主性、反应性、社交性和适应性等特点&#xff0c;能够根据环境的变化调整自己的行为&#xff0c;以达到预设的目标。本文…

晶体管类型及结构,晶体管的电流放大作用

晶体管类型及结构 1.3.1 晶体管的结构及类型根据不同的掺杂方式在同一个硅片上制造出三个掺杂区域&#xff0c;并形成两个PN结&#xff0c;就构成晶体管。采用平面工艺制成的 NPN型硅材料晶体管的结构如图1.3.2(a)所示&#xff0c;位于中间的P区称为基区&#xff0c;它很薄且杂…

MySQL JDBC驱动包引入有版本要求吗

提示&#xff1a;有关数据库的任何操作&#xff0c;请事先都做好备份&#xff0c;一定不会错的&#xff1b; 文章目录 前言一、com.mysql.jdbc.Driver和com.mysql.cj.jdbc.Driver如何选择&#xff1f;1、概念2、引入驱动3、总结 前言 新老项目的交替中&#xff0c;如果你使用的…

旅游网页(HTML+CSS+JS)

前言 本篇博客就不给大家讲解了&#xff0c;直接上代码 &#x1f493; 个人主页&#xff1a;普通young man-CSDN博客 ⏩ 文章专栏&#xff1a;https://blog.csdn.net/2302_78381559/category_12644031.html?spm1001.2014.3001.5482https://blog.csdn.net/2302_78381559/catego…

最受欢迎的测试用例管理工具,14款软件全方位对比

14款不错的测试用例管理工具对比&#xff1a;PingCode、TestRAIl、Xray、PractiTest、Tricentis qTest、禅道&#xff08;ZenTao&#xff09;、Zephyr、Tapd、TestLink、TestCollab、Testin云测、云效&#xff08;Alibaba Cloud Effect&#xff09;、TeavCloud、FitNesse。 在软…