-
2020-05-15 00:17:33更多相关内容
-
VUE2.0离线帮助文档 Chm
2018-06-27 22:20:23本文档为离线帮助文档,方便程序员在没有网的情况下快速找到想要的。下载后解压就好 -
ant-design-vue离线文档
2019-09-23 22:32:33vue ant design的离线文档, 解压后打开目录 npm install 运行 npm start 启动 默认项目地址为 localhost:3000 -
VUE 中文文档
2020-09-15 20:41:54VUE 中文文档本地化 近期家里网络不太好,看 VUE 文档有时都没有办法看。所以研究了一下 将 VUE文档加载到本地,享受没网的时候也能畅游学习。同时将这个方法 分享给大家。近期家里网络不太好,看 VUE 文档有时都没有办法看。所以研究了一下 将 VUE文档加载到本地,享受没网的时候也能畅游学习。同时将这个方法 分享给大家。
1. 下载源码
-
首先 要先进入 GitHub 网站 将 VUE 的 中文 Doc文档 下载下来。
-
地址:https://github.com/vuejs/docs-next-zh-cn
-
-
然后解压 文件夹,并放到合适的目录下 PS (我这里放到了 E:\Project\docs-next-zh-cn-master 目录下)
-
-
因为 VUE 的中文 文档是基于 Vuepress 构建而成的,内容是在 src 文件内,格式为 Markdown。
-
所以 我们 要下载 node.js 进行支持,并下载一些依赖文件。
2. node.js 的下载与配置
-
node.js 官网:https://nodejs.org/en/
-
-
我是复制下载链接,通过迅雷下载的。唉,官网不友好啊,下载速度慢。
-
下载 完成以后,双击进行安装,一路 next 搞定。
-
# 安装完成 以后 按 windows键 + R 输入 cmd 进入 dos 窗口输入 node -v #进行 查看 版本,显示版本 则成功安装。
-
因为node.js 是国外的,跟maven一样 要配置国内的镜像
-
# dos 窗口 输入 // 设置 淘宝镜像源 npm config set registry https://registry.npm.taobao.org // 查看 使用的 镜像源 npm config get registry // 安装 淘宝镜像源 npm install -g cnpm --registry=https://registry.npm.taobao.org // 安装 npm install -g vuepress
3. 部署项目
-
使用 dos 窗口 进入 VUE 文档的解压目录
-
# 例如 我的 E: #进入E 盘 cd Project/docs-next-zh-cn-master # 进入目录中 npm install # 加载依赖 npm run serve # 当依赖加载完毕之后,启动项目(之后启动也是这么启动)
dos 窗口 关闭会导致本地页面不能访问哦,因为 它是前台 服务,一旦你关闭,它就会认为 你不使用了,然后将服务kill 掉咯
4. 一键启动服务
如果使用 dos命令的话,还要进入窗口进行操作,作为一个懒人,咱们肯定嫌弃麻烦咯
首先创建一个文本 然后将 代码粘贴到 文本中保存 cmd /k "cd /d E:\Project\docs-next-zh-cn-master&&npm run serve" 保存 文件,并将文件后缀 改为 .bat 格式 然后 每一次 启动,直接双击运行。
-
-
vue项目规范文档
2019-01-17 15:20:51vue项目开发常见规范,可以帮助代码易于阅读,团队合作,提高开发效率,提高个人代码编码规范。 -
vue.js 2.0帮助文档.chm
2018-05-11 14:12:29下载之后,右键文件属性->常规,在常规 里边我们可以看到提示 这个文档来自其他计算机,可能被阻止以帮助保护计算机,点击 解除锁定,确定,就可以用啦! -
vue.js 2.0中文离线手册(CHM版)
2022-04-21 15:19:29Vue.js 是一套构建用户界面的 渐进式框架。与其他重量级框架不同的是,Vue 采用自底向上增量开发的设计。Vue.js 不支持 IE8 及其以下版本,因为 Vue.js 使用了 IE8 不能模拟的 ECMAScript 5 特性。 Vue.js 支持所有... -
信息手册-文档/帮助系统组件。-Vue.js开发
2021-05-27 22:31:57Vuesence Book基于Vue.js的简约文档系统组件如何将Vuesence Book用作Vue.js项目中的Vue组件或Vuesence Book基于Vue.js的简约文档系统组件如何将Vuesence Book用作Vue Vue.js项目中的组件或浏览器中的独立Node.js用法... -
vue 使用post/get 下载导出文件操作
2020-10-14 23:13:03主要介绍了vue 使用post/get 下载导出文件操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧 -
vuepress-doc:vuepress文档演示
2021-05-09 22:25:06基于vuepress的组件文档库 开始 → /idea/ title details 简洁至上 以 Markdown 为中心的项目结构,以最少的配置帮助你专注于写作。 title details Vue驱动 享受 Vue + webpack 的开发体验,在 Markdown 中使用 Vue ... -
Vue 2.6官方帮助文档
2019-11-04 07:50:59最新的 https://cn.vuejs.org/v2/guide/ vue 2.6官方帮助文档。已经整合为PDF文件。 -
EasyUI1.5(内含离线帮助文档)
2017-12-28 14:33:11easyui是一种基于jQuery的用户界面插件集合。easyui为创建现代化,互动JavaScript应用程序,提供必要的功能。 使用easyui你不需要写很多代码,你... ... easyui节省您网页开发的时间和规模。...easyui很简单但功能强大的。 -
Vue 文档编写指南
2020-11-02 22:27:43Vue docs 的编写, 编写文档是一种换位思考的练习。我们并不是在描述客观现实——源代码已经做到了。我们的工作是帮助塑造用户与 Vue 生态系统之间的关系。这份不断发展的指南提供了一些规则和建议,说明如何在 Vue ...关注公众号 前端开发博客,回复“加群”
加入我们一起学习,天天进步
原文:https://v3.cn.vuejs.org/guide/contributing/writing-guide.html
译者:本章节大部分内容是针对母语是英文的读者,中文用户可略读,除非你想以英文文档编写者的身份参与 Vue docs 的编写,
编写文档是一种换位思考的练习。我们并不是在描述客观现实——源代码已经做到了。我们的工作是帮助塑造用户与 Vue 生态系统之间的关系。这份不断发展的指南提供了一些规则和建议,说明如何在 Vue 生态系统中始终如一地做到这一点。
原则
除非有充分的文档证明,否则功能不存在。
尊重用户的认知能力 (即脑力)。当用户开始阅读时,他们从一定量的有限脑力开始,而当他们用完时,他们停止学习。
复杂的句子、一次必须学习一个以上的概念,以及与用户的工作没有直接关系的抽象例子,认知能力消耗得更快。
当我们帮助他们持续感到聪明、强大和好奇时,他们的认知能力会慢慢消耗殆尽。把事情分解成可消化的部分并注意文档的流动可以帮助它们保持这种状态。
总是试着从用户的角度看问题。当我们彻底理解某件事情时,它就变得显而易见了。这就是所谓的知识诅咒。为了编写好的文档,记住在学习这个概念时首先需要知道什么。你需要学什么行话?你误解了什么?什么花了很长时间才真正掌握?好的文档可以满足用户的需求。这可能有助于练习向人们解释这个概念
首先描述_问题_,然后描述解决方案。在展示功能如何工作之前,解释其存在的原因非常重要。否则,用户将无法知道这些信息对他们是否重要 (这是他们遇到的问题吗?) 或与之前的知识/经验相联系。
在写作时,不要害怕问问题,尤其是如果你害怕他们“蠢”的话。脆弱是很难的,但这是我们更充分地理解我们需要解释的唯一途径。
参与特性讨论。最好的 API 来自于文档驱动的开发,我们在开发中构建易于解释的特性,而不是试图在以后解释它们。提前提出问题 (尤其是“愚蠢的”问题) 通常有助于揭示困惑、不一致和有问题的行为,然后才需要进行破坏性的更改来修复它们。
组织
安装/集成:提供有关如何将软件集成到尽可能多的不同项目中的全面概述。
介绍/起步:
提供一个不到 10 分钟的项目解决的问题及其存在原因的概述。
提供一个不到 30 分钟的项目解决的问题和如何解决的概述,包括何时和为什么使用项目以及一些简单的代码示例。最后,链接到安装页面和要点指南的开头。
指南:让用户感到聪明、强大、好奇,然后保持这种状态,让用户保持不断学习的动力和认知能力。指南页是按顺序阅读的,因此通常应该从最高到最低的功率/工作比排序。
要点:阅读要领的时间不应超过 5 个小时,但越短越好。它的目标是提供 20%的知识来帮助用户处理 80%的用例。Essentials 可以链接到更高阶的指南和 API,不过,在大多数情况下,你应该避免此类链接。当它们被提供时,你还需要提供一个上下文,以便用户知道他们是否应该在第一次阅读时遵循这个链接。否则,许多用户最终会耗尽他们的认知能力,跳转链接,试图在继续之前全面了解一个功能的各个方面,结果是,永远无法完成第一次通读的要领。记住,通顺的阅读比彻底的阅读更重要。我们想给人们提供他们需要的信息,以避免令人沮丧的经历,但他们总是可以回来继续阅读,或者在谷歌遇到一个不太常见的问题。
高阶:虽然要点帮助人们处理大约 80%的用例,但后续的指南帮助用户了解 95%的用例,以及关于非基本特性 (例如转换、动画)、更复杂的便利特性 (例如 mixin、自定义指令) 和开发人员体验改进 (例如 JSX、插件) 的更详细信息。最后 5%的用例是更利基的、更复杂的和/或更容易被滥用的,将留给烹饪书和 API 参考,它们可以从这些高阶指南链接到。
引用/API:提供功能的完整列表,包括类型信息,每个要解决的问题的描述,选项的每种组合的示例以及指向指南,食谱的食谱以及提供更多详细信息的其他内部资源的链接。与其他页面不同,此页面无意自上而下阅读,因此可以提供大量详细信息。这些参考资料还必须比指南更容易浏览,因此格式应比指南的讲故事格式更接近字典条目。
迁移:
版本:当进行了重要的更改时,包含一个完整的更改列表是很有用的,包括对为什么进行更改以及如何迁移其项目的详细解释。
从其他项目:这个软件与同类软件相比如何?这对于帮助用户了解我们可能为他们解决或创造的其他问题,以及他们可以在多大程度上转移他们已经拥有的知识,这一点很重要。
风格指南:开发中必然有一些关键部分需要决策,但它们不是 API 的核心。风格指南提供了受过教育的、有主见的建议,以帮助指导这些决策。他们不应该盲目遵循,但可以帮助团队节省时间,在较小的细节上保持一致。
Cookbook:Cookbook 中的秘诀是基于对 Vue 及其生态系统的熟悉程度而编写的。每一个文档都是一个高度结构化的文档,它详细介绍了 Vue 开发人员可能遇到的一些常见实现细节。
写作 & 语法
风格
标题应该描述问题,不是解决方案。例如,一个不太有效的标题可能是“使用 prop”,因为它描述了一个解决方案。一个更好的标题可能是“通过 Props 将数据传递给子组件”,因为它提供了 Props 解决问题的上下文。用户不会真正开始注意某个功能的解释,直到他们知道为什么/何时使用它。
当你假设知识时,就要声明它,在开始时,链接到参考资料,以获得你期望的不太常见的知识。
尽可能一次只引入一个新概念 (包括文本和代码示例),即使当你介绍不止一个的时候很多人都能理解,也有很多人会迷失方向,即使那些没有迷失方向的人也会耗尽更多的认知能力。
尽可能避免使用特殊的内容块来获取提示和注意事项,一般来说,最好将这些内容更自然地融合到主要内容中,例如,通过构建示例来演示边缘案例。
每页不要超过两个相互交织的提示和注意事项,如果你发现一个页面需要两个以上的提示,请考虑添加一个警告部分来解决这些问题。本指南的目的是通读,提示和注意事项可能会让试图理解基本概念的人不知所措或分心。
避免诉诸权威 (例如,“你应该做 X,因为这是一个最佳实践”或“X 是最好的,因为它能让你完全分离关注点”)。相反,用例子来演示由模式引起和/或解决的具体人类问题。
当决定先教什么时,想想哪些知识能提供最好的动力/努力比。这意味着教任何能帮助用户解决最大痛苦或最大数量问题的东西,而学习的努力相对较少。这有助于学习者感到聪明、强大和好奇,因此他们的认知能力会慢慢流失。
除非上下文采用字符串模板或构建系统,否则只能编写在软件的任何环境中工作的代码 (例如 Vue、Vuex 等)
显示,不要说例如,“要在页面上使用 Vue,可以将其添加到 HTML 中”(然后显示脚本标记),而不是“要在页面上使用 Vue,可以添加一个具有 src 属性的脚本元素,该属性的值应为指向 Vue 编译源的链接”。
几乎总是避免幽默 (对于英文文档), 尤其是讽刺和通俗文化的引用,因为它在不同文化之间的翻译并不好。
永远不要假设比你必须的更高阶的上下文。
在大多数情况下,比起在多个部分中重复相同的内容,更喜欢在文档的各个部分之间建立链接。在内容上有些重复是不可避免的,甚至是学习的必要条件。然而,过多的重复也会使文档更难维护,因为 API 的更改将需要在许多地方进行更改,而且很容易遗漏某些内容。这是一个很难达到的平衡。
具体的比一般的好例如,一个
<BlogPost>
组件例子比<ComponentA>
更好。相对胜于晦涩。例如,一个
<BlogPost>
组件例子比<CurrencyExchangeSettings>
更好。保持情感相关。与人们有经验并关心的事物相关的解释和示例将永远更加有效。
始终喜欢使用简单,简单的语言,而不是复杂或专业的语言。例如:
“你可以将 Vue 与脚本元素一起使用”,而不是“为了启动 Vue 的使用,一种可能的选择是通过脚本 HTML 元素实际注入它”
“返回函数的函数”而不是“高阶函数”
避免使用毫无意义的语言。如“简单”、“公正”、“明显”等,请参阅教育写作中应避免的词语(opens new window) 。
语法
避免缩写在编写代码和示例代码中 (例如,
attribute
优于attr
,message
优于msg
),除非你在 API 中明确引用了缩写 (例如$attrs
)。标准键盘上包含的缩写符号 (例如,@
,#
,&
) 可以。当引用直接下面的示例时,请使用冒号 (
:
) 结束句子,而不是句点 (.
)使用牛津逗号 (;例如:“a,b,and c”替换“a,b and c”)。!为什么牛津逗号很重要(opens new window)
来源:The Serial (Oxford) Comma:When and Why To Use It(opens new window)
引用项目名称时,请使用项目引用自身的名称。例如,“webpack”和“npm”都应使用小写字母,因为这是它们的文档引用它们的方式。
使用标题大小写作为标题 - 至少到目前为止,因为这是我们在其余文档中使用的。有研究表明,句子大小写 (仅标题的第一个单词以大写字母开头) 实际上在可读性上是优越的,并且还减少了文档作者的认知开销,因为他们不必记住是否要大写“and”,“with”和“about”。
请勿使用表情符号 (讨论中除外)。Emoji 既可爱又友好,但是它们可能会使文档分散注意力,有些表情符号甚至会在不同文化中传达不同的含义。
迭代 & 沟通
卓越源于迭代初稿总是很糟糕,但是编写初稿是该过程的重要组成部分。要避免进度缓慢,很难-不好-> OK->好->好->鼓舞人心->超越。
在发布之前,请仅等到某事为“好”为止。社区将帮助你将其推向更深的链。
收到反馈时,尽量不要防御我们的写作对我们来说可能是非常私人的,但是如果我们对帮助我们做得更好的人感到不满,他们要么停止提供反馈,要么开始限制他们提供的反馈种类。
在向他人展示之前,请先阅读自己的作品。如果你显示某人的拼写/语法错误很多,你将获得有关拼写语法/错误的反馈,而不是获得有关写作是否达到目标的更有价值的注释。
当你要求人们提供反馈时,请告诉审阅者以下内容:
你正在尝试做
你的恐惧是
你想要达到的平衡
当有人报告问题时,几乎总是有问题,即使他们提出的解决方案不太正确。不断询问后续问题以了解更多信息
人们在提交/查看内容时需要放心地提问。这是你可以执行的操作:
“Great question!”
“感谢你抽出宝贵的时间来解释。????”
“这实际上是故意的,但感谢你抽出宝贵的时间来贡献自己的力量。????”
即使别人感到脾气暴躁,也要感谢他们的贡献/评价。比如:
听别人说什么,如果不确定自己是否正确理解,请照搬。这可以帮助验证人们的感受和经历,同时还可以了解_你是_否正确理解了_他们_。
使用大量积极和善解人意的表情符号。显得有些奇怪总比刻薄或急躁好。
请传达规则/边界。如果某人的举止有辱人格/不当行为,请仅以仁慈和成熟来回应,但也要明确表示,这种行为是不可接受的,如果他们继续表现不佳,将会发生什么 (根据行为准则)。
提示、标注、警告和行高亮
我们有一些专用的样式来表示需要以特定方式突出显示的内容。这些被捕获为在这个页面(opens new window) 请谨慎使用。
滥用这些样式是有一定诱惑力的,因为你可以简单地在标注中添加更改。但是,这会破坏用户的阅读流程,因此,只能在特殊情况下使用。在可能的情况下,我们应该尝试在页面内创建一个叙述和流程,以尊重读者的认知负荷。
在任何情况下都不应该相邻使用两个警告,这表明我们无法很好地解释上下文。
贡献
我们欣赏小型、集中的 PR。如果你想进行非常大的更改,请在发起请求之前与团队成员沟通。这是一份详细说明为什么这一点如此重要的书面材料(opens new window) 让我们在这个团队里工作得很好。请理解,尽管我们总是很感激你的贡献,但最终我们必须优先考虑哪些对整个项目最有效。
资源
软件
Grammarly(opens new window) :用于检查拼写和语法的桌面应用程序和浏览器扩展 (尽管语法检查不能捕获所有内容,偶尔会显示假阳性)。
Code Spell Checker(opens new window) :一个 VS Code 的扩展,帮助你在降价和代码示例中检查拼写。
书籍
On Writing Well(opens new window) (参见 popular quotes(opens new window) )
Bird by Bird(opens new window) (参见 popular quotes(opens new window) )
Cognitive Load Theory(opens new window)
相关文章
最后
关注公众号「前端开发博客」,回复 1024,领取前端进阶资料。
“在看”吗?在看就点一下吧
-
Vue 3 开发文档
2020-07-28 19:49:31本博客会长期更新(在 Vue 的中文官方文档没有发布前)。 博客的边界:本博客只会带来 Vue 3 新增内容的整理文档(经过验证的) 重点内容: Vite Composition API 新的响应式机制 计算属性和侦听器 利用 vite ...本博客会长期更新(在 Vue 的中文官方文档没有发布前)。
博客的边界:本博客只会带来 Vue 3 新增内容的整理文档(经过验证的)
重点内容:
- Vite
- Composition API
- 新的响应式机制
- 计算属性和侦听器
- teleport (传送)
- Fragment(碎片)
- 自定义事件($emit 验证)
- 组件的 v-model 升级
利用 vite 创建下一代的 Vue 项目
两个重要的点:
- Vue CLI v4.5 之上的版本
- Vite
Vue CLI
想要构建 Vue 3.x 项目,那么需要使用 Vue CLI v4.5 之上的版本
yarn global add @vue/cli@next # or npm install -g @vue/cli@next
如果想要在现有的项目中(Vue 2.x),升级构建工具,则需要执行以下代码
vue upgrade --next
Vite
Vite 是一个想要用来代替
webpack
的Web
开发构建工具,也是官方推荐使用的构建工具,使用vite
将脱离webpack
// ----------npm---------- npm init vite-app <project-name> cd <project-name> npm install npm run dev // ----------yarn---------- yarn create vite-app <project-name> cd <project-name> yarn yarn dev
Composition API
简介
为什么会有 Composition API
创建Vue组件使我们能够将接口的可重复部分及其功能提取到可重用的代码段中。就维护性和灵活性而言,仅此一项就可以使我们的应用程序发展得相当远。
但是,经过大量的开发经验证明,仅凭这一项可能还不够,特别是当你的应用程序变得非常大时。
想象一下数百个组件的项目,在处理如此大的应用程序时,共享和重用代码变得尤为重要。
摘要自:https://v3.vuejs.org/guide/composition-api-introduction.html#why-composition-api
但是因为
Vue 2.x
中,以组件
为最小颗粒的原因(PS:mixin
虽然可以达到复用的效果,但是它依然缺少独立性。比如:命名冲突、隐式依赖的问题),导致组件中的逻辑无法被进行 共享 和 重用Composition API 概念
Composition API
(组合式 API) 是一个概念,而非具体的实现。在组件中,实际使用
Composition API
的地方,是setup 函数
。在它内部,我们可以描述一个组件所需要的 所有逻辑。setup
简介
setup
函数是Composition API
的入口函数,也是它的核心函数。但是要注意:
setup
函数执行时,尚未创建组件实例,所以this
中没有任何内容。这意味着,除了props
,你将无法访问通过this
来访问组件中声明的任何属性、本地状态、计算属性、方法。参数
setup
函数有两个参数:{Data} props
:props
是响应式的- 由于
props
是反应性的,你不能使用ES6解构,详见 对象的响应式
{SetupContext} context
context
是普通的 js 对象,所以他不是响应式的context
下有三个属性:- attrs:包含父组件属性绑定、未识别出的为组件属性或自定义事件的事件
- slots:插槽
- emit:通知(发出的事件)
下面是官方的示例代码:
// Data 为 key:value 结构的对象 interface Data { [key: string]: unknown } // context 为上下文,包含: // attrs:包含父组件属性绑定、未识别出的为组件属性或自定义事件的事件 // slots:插槽 // emit:通知 interface SetupContext { attrs: Data slots: Slots emit: (event: string, ...args: unknown[]) => void } function setup(props: Data, context: SetupContext): Data
可访问的组件属性
当
setup
被执行时,该组件实例尚未建立。如此一来,您将只能访问以下属性:props
attrs
slots
emit
换句话说,您将无权访问以下组件选项:
data
computed
methods
模板使用 setup 中的数据
如果
setup
返回对象,则可以在组件的模板中访问对象的属性(注意代码中的备注):<!-- MyBook.vue --> <template> <div>{{ readersNumber }} {{ book.title }}</div> </template> <script> import { ref, reactive } from 'vue' export default { setup() { // 通过 ref 或 reactive 创建响应式数据,现在你可以先不需要理解什么是 ref 和 reactive。 // 你只需要知道此时 readersNumber 和 book 为响应式的 const readersNumber = ref(0) const book = reactive({ title: 'Vue 3 Guide' }) // return 的对象,可以直接在 模板中直接访问(不需要 .value) return { readersNumber, book } } } </script>
渲染功能的实现
setup
还可以返回一个渲染函数,该函数可以直接使用在同一作用域中(setup
函数中)声明的反应状态 :import { h, ref, reactive } from 'vue' export default { setup() { const readersNumber = ref(0) const book = reactive({ title: 'Vue 3 Guide' }) // Please note that we need to explicitly expose ref value here return () => h('div', [readersNumber.value, book.title]) } }
this 指向问题
setup
函数中,this
为undefined
而不是 组件的引用。因为setup
函数执行时,尚未创建组件实例。所以this
在setup
中无法正常使用。当
setup
函数和其他的Options API
一起使用时,可能会出现无法预知的错误,所以一定要谨慎。生命周期钩子
在
setup
中,可以通过onX
的方式注册 生命周期钩子。import { onMounted, onUpdated, onUnmounted } from 'vue' const MyComponent = { setup() { onMounted(() => { console.log('mounted!') }) onUpdated(() => { console.log('updated!') }) onUnmounted(() => { console.log('unmounted!') }) } }
Options API(Vue 2.x) 生命周期选项和 Composition API(Vue 3.x) 之间的映射
beforeCreate
->使用setup()
created
->使用setup()
beforeMount
->onBeforeMount
mounted
->onMounted
beforeUpdate
->onBeforeUpdate
updated
->onUpdated
beforeUnmount
->onBeforeUnmount
unmounted
->onUnmounted
errorCaptured
->onErrorCaptured
renderTracked
->onRenderTracked
renderTriggered
->onRenderTriggered
提供
provide
/ 注入inject
首先必须要明确:提供
provide
/ 注入inject
的功能都只能在setup
函数中进行使用。如果你希望在 父组件 中提供一个值,然后在 子组件 中可以使用。那么你就应该考虑 提供
provide
/ 注入inject
的功能。// 父组件 setup() { // 为子组件提供一个值,并且这个值是响应式的(ref) // 则代表:子组件可以修改该值(book.value),并且会 响应式的 作用于父组件的变量中 let book = ref('父组件的book'); // 为子组件提供一个值,并且这个值不是响应式的 // 则代表:子组件获取到了 非响应式的 数据。 // 此时:子组件可以通过 ref(inject('book', '默认值')) 的方式,把该数据变为 响应式的 ,但是要注意,此时的响应式仅在 子组件中生效 let book = '父组件的book'; provide('book', book); return { book, }; }, // 子组件 setup () { // 利用 inject 函数,获取父组件提供的值 let book = inject('book', '默认值'); // 利用 inject 函数,获取父组件提供的值,同时把它变为响应式的。但是要注意,此时的响应式仅在 子组件中生效 let book = ref(inject('book', '默认值')) }
新的响应式
代理对象
当我们把
JavaScript
对象作为data
选项传递给Vue
实例的时候,Vue
会遍历对象的所有属性,并且会把它们转化成带有getter
和setter
函数的 Proxies(代理对象)。同时为了兼顾低版本的浏览器,对于较久的版本,
Vue
依然使用Object.defineProperty
来进行支持。两者之间在使用中并没有区别,只不过 代理对象 会提供更好的性能。
响应式数据的声明 - reactive 函数
想要在
setup函数中
创建响应式
数据,可以使用reactive
方法(注意:需要主动导入reactive
)<template> <div> <h1>Vue 3</h1> <button @click="state.count++">count is: {{ state.count }}</button> </div> </template> <script> import { reactive } from 'vue'; export default { name: 'HelloWorld', setup() { // 创建的响应式数据对象 const state = reactive({ count: 0, }); return { // 直接放回创建的响应式对象 state, }; }, }; </script>
注意:Vue 3 中并没有取消 data 声明,也就是说,我们依然可以使用 data 函数来创建响应式数据。以下两种写法在
响应式效果
中等效// setup() { // const state = reactive({ // count: 0, // }); // return { // state, // }; // }, // 效果等效 data() { return { state: { count: 0, }, }; },
将一个非响应式数据转化为响应式数据 - ref 函数
Vue 3 对 ref 函数进行了改变,使
ref
具备了两种能力:- 使用
ref
获取 元素 或 组件实例 - 可以把一个非响应式的数据改变为响应式的
我们在这里探讨的就是
ref
函数的第二个能力:<template> <h1>Vue 3</h1> <button @click="count++">count is: {{ count }}</button> </template> <script> import { ref } from 'vue'; export default { setup() { // ----- 利用 setup 函数返回 ------ let count = 0; return { count, }; // ----- 利用 reactive 函数 ------ const state = reactive({ count: 0, }); return { // count 值的改变,将不会影响视图的变化,原因请查看 《对象的响应式》 count: state.count, }; // ----- 利用 ref 函数 ------ let count = ref(0); return { count, }; } }; </script>
以上三种方式,貌似可以达到同样的效果。
那么 ref 的作用是什么呢?再来回顾一下:
ref 函数可以将一个非响应式数据转化为响应式数据。即:当数据发生了变化的时候,视图也理应发生变化
。我们来看下面的代码:setup() { // ----- 利用 setup 函数返回 ------ let count = 0; setTimeout(() => { // 视图并没有发生变化 count = 1; }, 1000); return { count, }; // ----- 利用 reactive 函数 ------ et state = reactive({ count: 0, }); setTimeout(() => { // 视图并没有发生变化 state.count = 1; }, 1000); return { count: state.count, }; // ----- 利用 ref 函数 ------ let count = ref(0); setTimeout(() => { // 访问 count 的值,需要使用 value 属性 // 注意:在模板中,我们不需要手动写入 value // 视图发生了变化 count.value = 1; }, 1000); return { count, }; },
在上面的代码中,我们通过
setTimeout
延迟 1 秒钟之后改变数据源count
的值,从结果中,我们可以发现,只有被ref
函数声明的count
才会直接影响视图的变化。对象的响应式
通常情况下,我们希望利用
解构赋值
的方式来获取到响应式数据:<template> <h1>Vue 3</h1> <button @click="count++">count is: {{ count }}</button> </template> <script> import { reactive } from 'vue'; export default { setup() { // ----- 利用 reactive 函数 ------ let state = reactive({ count: 0, }); let { count } = state; setInterval(() => { // 视图并没有发生变化 count++; }, 1000); return { count, }; }, }; </script>
但是很遗憾,这种方式将会让 count 失去
响应性
。如果我们想要解决这个问题,那么需要借助一个函数
toRefs
。同样的,我们需要先导入
这个函数。// 不要忘记,我们需要导入 toRefs import { toRefs } from 'vue'; let state = reactive({ count: 0, }); // 借助 toRefs 函数,让数据保持响应性 let { count } = toRefs(state); setInterval(() => { // 同样需要是使用 value 来访问到数据源 count.value++; }, 1000); return { count, };
只读的响应式数据
有时我们希望
数据为响应式
的同时,该数据不被其他的组件所修改
(即:我们想要其他组件享受
响应数据(ref
或reactive
)的变化,同时也想要防止
其他的组件修改响应式数据),那么我们需要给其他组件只读的响应式数据 - readonly
<!-- state.count 发生改变,readonlyState.count 会同步跟随变化 --> <button @click="state.count++">count is: {{ state.count }}</button> <!-- 如果想要直接修改 readonlyState.count 的值,那么会得到一个警告:Set operation on key "count" failed: target is readonly --> <button @click="readonlyState.count++">count is: {{ readonlyState.count }}</button> <script> import { reactive, readonly } from 'vue'; export default { setup() { // 响应式数据对象 state const state = reactive({ count: 0 }) // 只读数据 readonlyState // state 称为 readonlyState 源数据 const readonlyState = readonly(state) return { state, readonlyState } } </script>
这样我们就获得了一个只读的响应式数据
readonlyState
和它的源数据state
。如果我们想要修改readonlyState
的值,那么唯一
的方式是修改state
。对于
readonly
来说,源数据的变化会响应式的作用于readonly
计算属性与侦听器
计算属性
基本用法
Vue
计划使用computed 函数
来定义计算属性
(这并不代表Options API
被完全丢弃),看下面的示例:<template> <input type="text" v-model="str" /> <h2>{{ comStr }}</h2> </template> <script> import { ref, computed } from 'vue'; export default { setup() { const str = ref('Hello'); // Vue 3 中推荐写法,完全等效于 computed 属性中函数定义 const comStr = computed(() => str.value.split('').reverse().join('')); return { str, comStr, }; }, /* Vue 2.x 的写法并没有被废弃,只是不再被推荐使用。 以下写法完全等效于 Vue 3 中的 computed 函数 */ computed: { comStr() { return this.str.split('').reverse().join(''); }, }, }; </script>
set 和 get
computed 函数
包含了get
和set
方法:const count = ref(1) // 此代码等于使用了 getter 函数 const plusOne = computed(() => count.value++) // 当我们获取 plusOne 的值时,等于调用了 get console.log(plusOne.value) // 2 // 但是因为没有实现 setter 函数,所以无法设置新值 // err:setter is not a function plusOne.value++
我们可以使用具有
get
和set
功能的对象来创建可写的ref
对象const count = ref(1) const plusOne = computed({ get: () => count.value + 1, set: val => { count.value = val - 1; } }) plusOne.value = 1; console.log(count.value); // 0
此时对
plusOne
的set
操作会回调到传入对象的 set
方法中。监听函数:watchEffect
如果你想要监听响应式数据的变化,那么可以使用
watchEffect 函数
。watchEffect 函数
的运行时机有两个:- 调用函数时,立刻运行
- 依赖项的数据发生变化时,会立刻运行
const count = ref(0); // 立刻打印:0 watchEffect((v) => { // 依赖数据发生变化时,依次打印 1.2.3.4.... console.log(count.value); }); setInterval(() => { count.value++; }, 1000); return { count, };
如果你想要停止
watcher
的话,那么可以返回方法进行停止const stop = watchEffect(() => { /* ... */ }) // 调用返回的停止函数 stop()
watch
watch
API完全等同于组件 watch 属性。watch
需要查看特定的数据源,并在单独的回调函数中应用副作用。默认情况下,它也是惰性的。即仅在监视的源已更改时才调用回调。
参数:
{string | Function} source
{Function | Object} callback
- {Object} [options]
{boolean} deep
{boolean} immediate
监听单一的数据源变化
watcher
的数据源可以有两种:- 返回值的
getter
函数 ref
// 监听 返回值的 getter 函数 const state = reactive({ count: 0 }) watch( () => state.count, (count, prevCount) => { /* ... */ } ) // 监听 ref const count = ref(0) watch(count, (count, prevCount) => { /* ... */ })
监听多个数据源的变化
使用数组的方式可以监听多个数据源
watch([fooRef, barRef], ([foo, bar], [prevFoo, prevBar]) => { /* ... */ })
options 参数对象
options
参数对象主要有两个属性:deep
:监听对象内部嵌套值的改变。注意:你不需要制定deep
既可以监听到Array
的变化immediate
:立刻触发回调
teleport (传送)
在 Vue 的技术体系中,我们一直以来都是根元素中做事情(
<div id="app" ></div>
),这个逻辑是没有问题的。但是在
Vue 3
中提出了一个新的概念teleport
。它是一个组件,使用它可以让我们的渲染区 脱离 根元素。这也是 传送 所代表的意思:将视图传送出渲染区(同时视图将保持响应式的渲染)
<body> <!-- 渲染区 --> <div id="app"> </div> <!-- 转移区。 注意:目标元素必须在组件挂在前就已经存在。 即目标不能由组件本身渲染,并且理想情况下应位于整个Vue组件树之外。 --> <div id="endofbody"></div> </body> <script> const app = Vue.createApp({ template: ` <h1>根组件</h1> <parent-component /> ` }) app.component('parent-component', { template: ` <h2>父组件</h2> <teleport to="#endofbody"> <child-component :name="name" /> </teleport> `, data() { return { name: '张三' } }, created: function () { setTimeout(() => { this.name = '李四' }, 1000) } }) app.component('child-component', { props: ['name'], template: ` <h4>被转移的子组件,它将出现在 app 之外</h4> <h4>同时享受响应式数据改变带来的视图变化,不信?你刷新页面,等一秒钟看一下</h4> <div>Hello, {{ name }}</div> ` }) app.mount('#app') </script>
并且,你需要知道,传送是可以支持多个的。即:可以存在多个
teleport
组件指向同一个 目标区域 。<teleport to="#modals"> <div>A</div> </teleport> <teleport to="#modals"> <div>B</div> </teleport> <!-- 结果--> <div id="modals"> <div>A</div> <div>B</div> </div>
Fragment
组件不再强制单个根元素,这个特性
Vue 3
称为Fragment(碎片)
以下代码可以正常运行(虽然会有 ESLint 警告)
<template> <header>...</header> <main v-bind="$attrs">...</main> <footer>...</footer> </template>
自定义事件
Vue 3
建议对组件中所有发出的事件emit
进行记录emits
。如果你声明了emits
选项,并且发送的事件没有被emits
记录,则会收到一个警告:app.component('custom-form', { template: ` <form> <!-- 此处会收到警告: [Vue warn]: Component emitted event "submit" but it is neither declared in the emits option nor as an "onSubmit" prop --> <input type="button" value="submi" @click="$emit('submit')"/> </form> `, emits: { } })
记录的形式分为两种:
- 数组:如果使用数组进行记录,那么可以只可以进行声明,而不可以进行验证(参考 prop 机制)
- 对象:对象语法可以对 发送的事件 进行验证
以下为对象验证:
app.component('custom-form', { template: ` <form> <input type="button" value="submi" @click="$emit('submit', {email: 'aa@163.com', password: 'aaa'})"/> </form> `, emits: { // 无验证 click: null, // 为 submit 事件添加验证规则 // 如果不符合验证规则,你会收到一个警告 submit: ({ email, password }) => { if (email && password) { console.log('验证通过'); return true } else { console.warn('这是一个无效的提交事件!') return false } } } })
组件中的 v-model
Vue
在2.2.0
的版本中新增了自定义组件的 v-model
在2.3.0
中新增了.sync
修饰符。 在功能上sync
更像是自定义组件的 v-model
的增强。在
Vue 3
中,自定义组件的 v-model
进行了进一步的增强,使其更像是v-bind:foo.sync
的另一种写法:// 子组件声明 app.component('my-component', { props: { foo: String }, template: ` <input type="text" :value="foo" @input="$emit('update:foo', $event.target.value)"> ` }) // 父组件调用 <my-component v-model:foo="bar"></my-component>
同时,自定义组件的 v-model 支持了
多重绑定
:// 子组件声明 app.component('user-name', { props: { firstName: String, lastName: String }, template: ` <input type="text" :value="firstName" @input="$emit('update:firstName', $event.target.value)"> <input type="text" :value="lastName" @input="$emit('update:lastName', $event.target.value)"> ` }) // 父组件调用 <user-name v-model:first-name="firstName" v-model:last-name="lastName" ></user-name>
-
uni-app帮助文档.CHM
2021-01-27 09:35:01此离线文档是根据官网整理出来的 -
vue文件以及文档.zip
2019-12-20 08:51:07vue.js文件是最新的版本,包含有生产版和开发版本自由选择,还有详细的帮助文档,把几个文件压缩了,下载的时候解压就可用 -
焕然一新的 Vue 3 中文文档来了
2022-03-23 10:23:08大家好,我是LBJ,最近参与了 Vue 3新文档的翻译和校验工作 我们知道 Vue 3 新文档 ( vuejs.org ) 已经发布一个多月了,但那是英文版的,不知道你看了没? 没有看,那就有福了!中文版翻译要来了 为什么说它要来了呢... -
vue搭建的非常好用的网页模板
2021-05-27 14:36:55vue网页模板 -
超简单的vue3.0,必看文档
2022-02-24 21:25:341.vue概述 vue作者尤雨溪 尤雨溪毕业于上海复旦附中,在美国完成大学学业,本科毕业于Colgate University,后在Parsons设计学院获得Design & Technology艺术硕士学位,现任职阿里巴巴Weex团队。 2014年 ... -
vuetable-2:简化数据表! -Vue 2.x的数据表组件。 请参阅以下文档
2021-02-06 00:51:06感谢@cristijora的帮助。 同时,退房 有后续项目的。 它应该足以让您入门。 使用Vuetable-2和Laravel 5.4和Laravel-Mix的 如果您以前使用过Vuetable for Vue 1.x,请查看已以获取有关Vuetable for Vue 1.x信息,... -
vue-infinite-loading2.0 中文文档详解
2020-12-07 09:59:41这是一个使用在Vue.js中的无限滚动插件,它可以帮助你快速创建一个无限滚动列表。 特点 移动端支持友好 兼容任何一个可以滚动的元素 有不同的旋转器可以作为加载动画 支持加载后显示结果 支持两个方向的无限... -
vue.js.xmind
2020-07-15 15:05:07vue 细节思维导图学习,从基础学起,一步步学习,细节知识点,注意点都有标注,还有图文帮助理解,对小白及其友好,不懂给我留言,有video 资料~~ -
【Vue文档预览】
2022-04-20 15:32:51提示:文章写完后,目录可以何生成可参考右边的帮助文档 文章目录 前言 一、pandas是什? 二、使用步骤 1.引入库 2.读入数据 总结 前言 大家对钉钉不陌生吧,那么提它干啥呐?别人发给你一个... -
Vue环境搭建与5分钟上手文档1
2018-09-27 14:53:40通过本文档可以帮助我们的开发人员快速了解什么是Vue,以及如何以最短的时间搭建一个Vue环境,实现项目的快速上手。 -
vue-element页面说明文档
2021-05-28 16:16:56目录技术栈环境搭建流程 技术栈 vue4.0 HbuilderX:是DCloud(数字天堂)推出的一款支持HTML5的Web开发IDE,初学vue不建议用vscode...vue-router:vue项目路由管理依赖 webpack:将文件页面打包显示到前端的工具 eleme -
vue3中文件下载
2021-09-15 14:31:39vue3中文件下载 可以用原生数据流下载(axios) 发个请求从后台拿数据流 /** * 例如 */ axios({ method:'post',//请求方式 url:url,//请求地址 ... const fileName = '帮助文档.docx'; const dow -
Vue中保存数据到磁盘文件的方法
2020-10-18 02:07:52今天小编就为大家分享一篇Vue中保存数据到磁盘文件的方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧 -
head:文档Vue 3的经理
2021-03-05 14:46:51@vueuse/head是一个 ,可帮助您管理文档<title> , <meta>和其他元素,它没有依赖关系,我们总是尽力使它保持最小。 :yellow_heart: 支持该项目的持续发展。 安装 npm i @vueuse/head # Or Yarn yarn ... -
Vue环境搭建说明文档+所有需要的软件
2021-01-02 15:24:28帮助Vue新手,帮你踩了所有的坑的,呕心之作,所有软件已包含在文件中,按着我写的说明文档,可以一次性搭建Vue环境成功。 -
vue Cli 环境删除与重装教程 - 版本文档
2020-10-14 18:56:41主要介绍了vue Cli 环境删除与重装教程 - 版本文档,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧