<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/">
  <channel>
    <title>系统与架构 on 码上生长 - 探索个人成长的无限可能</title>
    <link>https://dstweihao.cn/categories/%E7%B3%BB%E7%BB%9F%E4%B8%8E%E6%9E%B6%E6%9E%84/</link>
    <description>Recent content in 系统与架构 on 码上生长 - 探索个人成长的无限可能</description>
    <generator>Hugo -- 0.144.2</generator>
    <language>zh</language>
    <lastBuildDate>Wed, 06 Dec 2023 00:00:00 +0000</lastBuildDate>
    <atom:link href="https://dstweihao.cn/categories/%E7%B3%BB%E7%BB%9F%E4%B8%8E%E6%9E%B6%E6%9E%84/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>物联网开发名词解释</title>
      <link>https://dstweihao.cn/posts/%E6%8A%80%E6%9C%AF%E4%B8%8E%E6%9E%B6%E6%9E%84/%E7%B3%BB%E7%BB%9F%E4%B8%8E%E6%9E%B6%E6%9E%84/%E5%90%8D%E8%AF%8D%E8%A7%A3%E9%87%8A_%E7%89%A9%E8%81%94%E7%BD%91%E5%BC%80%E5%8F%91/</link>
      <pubDate>Wed, 06 Dec 2023 00:00:00 +0000</pubDate>
      <guid>https://dstweihao.cn/posts/%E6%8A%80%E6%9C%AF%E4%B8%8E%E6%9E%B6%E6%9E%84/%E7%B3%BB%E7%BB%9F%E4%B8%8E%E6%9E%B6%E6%9E%84/%E5%90%8D%E8%AF%8D%E8%A7%A3%E9%87%8A_%E7%89%A9%E8%81%94%E7%BD%91%E5%BC%80%E5%8F%91/</guid>
      <description>&lt;h2 id=&#34;zigbee协议&#34;&gt;Zigbee协议&lt;/h2&gt;
&lt;p&gt;Zigbee协议是一种无线通信协议，专门设计用于低功耗、低数据速率、短距离的无线通信应用。它基于IEEE 802.15.4标准，并添加了网络和应用层的协议，用于构建低功耗无线传感器网络和物联网设备。&lt;/p&gt;
&lt;p&gt;以下是Zigbee协议的主要特点和组成部分：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;低功耗：Zigbee协议设计用于低功耗应用，节点可以进入睡眠状态以节省能量，并通过周期性唤醒来进行通信。&lt;/li&gt;
&lt;li&gt;网络拓扑：Zigbee支持多种网络拓扑结构，包括星型、网状和混合结构。其中，协调器（Coordinator）负责网络的管理和协调，路由器（Router）用于中继数据，终端设备（End Device）作为最低级的节点。&lt;/li&gt;
&lt;li&gt;自组织网络：Zigbee网络具有自组织和自愈能力，可动态调整网络拓扑结构，使网络具备容错性和鲁棒性。&lt;/li&gt;
&lt;li&gt;低数据速率：Zigbee协议适用于低数据速率的应用，通常在10-100 kbps的范围内。&lt;/li&gt;
&lt;li&gt;安全性：Zigbee协议提供多层安全机制，包括加密、认证和访问控制，以确保数据的安全性和网络的保密性。&lt;/li&gt;
&lt;li&gt;应用层协议：Zigbee协议定义了一系列的应用层协议，用于特定的应用领域，如家庭自动化、智能能源管理、工业控制等。&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Zigbee协议广泛应用于物联网领域，包括智能家居、智能建筑、工业自动化、农业监测等。它提供了一种低成本、低功耗、可靠且安全的无线通信解决方案。&lt;/p&gt;
&lt;h2 id=&#34;zigbee网关&#34;&gt;Zigbee网关&lt;/h2&gt;
&lt;p&gt;Zigbee网关是连接Zigbee无线通信网络与其他网络（如以太网、Wi-Fi等）的设备。它充当一个桥梁，通过与Zigbee设备建立无线连接，将Zigbee设备的数据转发到其他网络，或将其他网络的命令传递给Zigbee设备。Zigbee网关通常具备数据转换和协议转换的功能，以适应不同网络之间的数据交互需求。&lt;/p&gt;
&lt;h2 id=&#34;zigbee组播&#34;&gt;Zigbee组播&lt;/h2&gt;
&lt;p&gt;Zigbee组播是Zigbee网络中的一种通信方式，用于一对多的数据传输。在Zigbee网络中，多个设备可以加入同一个组播组，并通过组播组地址进行通信。当一个设备发送数据到组播组地址时，所有加入该组播组的设备都可以接收到该数据。Zigbee组播可以用于广播命令、控制多个设备或进行集群通信等场景。&lt;/p&gt;
&lt;h2 id=&#34;zigbee节点&#34;&gt;Zigbee节点&lt;/h2&gt;
&lt;p&gt;Zigbee节点是指加入Zigbee无线通信网络的设备。每个Zigbee节点可以是传感器、执行器、控制器或其他类型的设备。Zigbee节点通过与Zigbee协调器通信，参与组网、数据传输和网络管理等操作。每个Zigbee节点具有唯一的64位或16位的节点地址，用于在Zigbee网络中进行标识和通信。&lt;/p&gt;
&lt;h2 id=&#34;zigbee设备&#34;&gt;Zigbee设备&lt;/h2&gt;
&lt;p&gt;Zigbee设备是指采用Zigbee通信协议的终端设备，如智能灯泡、智能插座、传感器等。这些设备可以通过Zigbee协议进行通信和互联，构建起一个Zigbee网络。在Zigbee网络中，虽然Zigbee节点和Zigbee设备通常可以视为相同的概念，但有一些微妙的区别：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;角色：Zigbee节点可以扮演不同的角色，例如协调器（Coordinator）、路由器（Router）和终端设备（End Device）。而Zigbee设备通常被视为终端设备，扮演终端设备角色。&lt;/li&gt;
&lt;li&gt;能力：Zigbee节点通常具有更复杂的功能和能力，可以作为网络的核心，负责管理网络的拓扑结构、路由选择等。而Zigbee设备通常具有更简单的功能，执行特定的任务或提供特定的服务。&lt;/li&gt;
&lt;li&gt;参与程度：Zigbee节点更强调对整个Zigbee网络的参与和管理，通常需要进行配置和设置。而Zigbee设备更强调作为终端设备的使用，通常不需要进行复杂的配置和管理。&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;需要注意的是，这些区别并不是严格的定义，而是对于Zigbee网络中的概念的一种常见理解。在实际应用中，节点和设备的概念可能会交叉使用，具体的区分可以根据具体的实际情况和需求来确定。&lt;/p&gt;</description>
      <content:encoded><![CDATA[<h2 id="zigbee协议">Zigbee协议</h2>
<p>Zigbee协议是一种无线通信协议，专门设计用于低功耗、低数据速率、短距离的无线通信应用。它基于IEEE 802.15.4标准，并添加了网络和应用层的协议，用于构建低功耗无线传感器网络和物联网设备。</p>
<p>以下是Zigbee协议的主要特点和组成部分：</p>
<ol>
<li>低功耗：Zigbee协议设计用于低功耗应用，节点可以进入睡眠状态以节省能量，并通过周期性唤醒来进行通信。</li>
<li>网络拓扑：Zigbee支持多种网络拓扑结构，包括星型、网状和混合结构。其中，协调器（Coordinator）负责网络的管理和协调，路由器（Router）用于中继数据，终端设备（End Device）作为最低级的节点。</li>
<li>自组织网络：Zigbee网络具有自组织和自愈能力，可动态调整网络拓扑结构，使网络具备容错性和鲁棒性。</li>
<li>低数据速率：Zigbee协议适用于低数据速率的应用，通常在10-100 kbps的范围内。</li>
<li>安全性：Zigbee协议提供多层安全机制，包括加密、认证和访问控制，以确保数据的安全性和网络的保密性。</li>
<li>应用层协议：Zigbee协议定义了一系列的应用层协议，用于特定的应用领域，如家庭自动化、智能能源管理、工业控制等。</li>
</ol>
<p>Zigbee协议广泛应用于物联网领域，包括智能家居、智能建筑、工业自动化、农业监测等。它提供了一种低成本、低功耗、可靠且安全的无线通信解决方案。</p>
<h2 id="zigbee网关">Zigbee网关</h2>
<p>Zigbee网关是连接Zigbee无线通信网络与其他网络（如以太网、Wi-Fi等）的设备。它充当一个桥梁，通过与Zigbee设备建立无线连接，将Zigbee设备的数据转发到其他网络，或将其他网络的命令传递给Zigbee设备。Zigbee网关通常具备数据转换和协议转换的功能，以适应不同网络之间的数据交互需求。</p>
<h2 id="zigbee组播">Zigbee组播</h2>
<p>Zigbee组播是Zigbee网络中的一种通信方式，用于一对多的数据传输。在Zigbee网络中，多个设备可以加入同一个组播组，并通过组播组地址进行通信。当一个设备发送数据到组播组地址时，所有加入该组播组的设备都可以接收到该数据。Zigbee组播可以用于广播命令、控制多个设备或进行集群通信等场景。</p>
<h2 id="zigbee节点">Zigbee节点</h2>
<p>Zigbee节点是指加入Zigbee无线通信网络的设备。每个Zigbee节点可以是传感器、执行器、控制器或其他类型的设备。Zigbee节点通过与Zigbee协调器通信，参与组网、数据传输和网络管理等操作。每个Zigbee节点具有唯一的64位或16位的节点地址，用于在Zigbee网络中进行标识和通信。</p>
<h2 id="zigbee设备">Zigbee设备</h2>
<p>Zigbee设备是指采用Zigbee通信协议的终端设备，如智能灯泡、智能插座、传感器等。这些设备可以通过Zigbee协议进行通信和互联，构建起一个Zigbee网络。在Zigbee网络中，虽然Zigbee节点和Zigbee设备通常可以视为相同的概念，但有一些微妙的区别：</p>
<ol>
<li>角色：Zigbee节点可以扮演不同的角色，例如协调器（Coordinator）、路由器（Router）和终端设备（End Device）。而Zigbee设备通常被视为终端设备，扮演终端设备角色。</li>
<li>能力：Zigbee节点通常具有更复杂的功能和能力，可以作为网络的核心，负责管理网络的拓扑结构、路由选择等。而Zigbee设备通常具有更简单的功能，执行特定的任务或提供特定的服务。</li>
<li>参与程度：Zigbee节点更强调对整个Zigbee网络的参与和管理，通常需要进行配置和设置。而Zigbee设备更强调作为终端设备的使用，通常不需要进行复杂的配置和管理。</li>
</ol>
<p>需要注意的是，这些区别并不是严格的定义，而是对于Zigbee网络中的概念的一种常见理解。在实际应用中，节点和设备的概念可能会交叉使用，具体的区分可以根据具体的实际情况和需求来确定。</p>
]]></content:encoded>
    </item>
    <item>
      <title>关于技能树</title>
      <link>https://dstweihao.cn/posts/%E6%8A%80%E6%9C%AF%E4%B8%8E%E6%9E%B6%E6%9E%84/%E7%B3%BB%E7%BB%9F%E4%B8%8E%E6%9E%B6%E6%9E%84/%E5%85%B3%E4%BA%8E%E6%8A%80%E8%83%BD%E6%A0%91/</link>
      <pubDate>Thu, 07 Sep 2023 00:00:00 +0000</pubDate>
      <guid>https://dstweihao.cn/posts/%E6%8A%80%E6%9C%AF%E4%B8%8E%E6%9E%B6%E6%9E%84/%E7%B3%BB%E7%BB%9F%E4%B8%8E%E6%9E%B6%E6%9E%84/%E5%85%B3%E4%BA%8E%E6%8A%80%E8%83%BD%E6%A0%91/</guid>
      <description>&lt;h2 id=&#34;前言&#34;&gt;前言&lt;/h2&gt;
&lt;p&gt;之前也算研究过”高效学习“这方面的书籍和课程，总的来说，无非就是意识和实践，意识是指明白以教代学是什么，实际上就是以终为始——先假设你想得到的结果，然后再倒逼我们从源头去规划应该怎么去做这个事情。如果你打算教别人东西，为了怕被别人问住，你不得不把相关知识都弄明白了，这无形之中，就给你施加了学习的压力，有处于你全面掌握这个知识点。实践，也就是毛泽东《实践论》里的观点，实践与理论反复验证，只有动手了人才会更加专注，也才会真正感受得到所要学的东西到底是什么？如果只停留在书籍上面，因为都是一些理论的东西，注意力很容易分散，学习效果大大折扣。&lt;/p&gt;
&lt;p&gt;比如，如果要学习Flutter开发，我不会一字不漏地看完官网文档才动手敲代码，我会立马开始敲代码，是的，啥都不知道，完全凭感觉去做这个事情，然后呢，如果要实现一个按钮，我就去看按钮的部分，动手实现了，如果要实现一个弹窗，我就去看弹窗的部分，把弹窗实现了，一步一步，慢慢先把用到的东西学起来，在这个过程中，你一定是带着问题去查看文档的，这无形之中，就会加深了印象。&lt;/p&gt;
&lt;p&gt;这个方法其实也是可以用在学校的，我就先做练习本或者试卷，根本就没学过这个知识，凭感觉去做，不知道就记下来，猜测应该是什么意思，然后再去找答案，再去收集，总结，再去做题。&lt;/p&gt;
&lt;p&gt;我们通常都会说，人心不足蛇吞象，想什么都学，结果什么都学不会。这个道理没错，但是，人这一生本来就很短暂，不可能看完古今中外所有的书，学到所有的知识，我只打算享受过程，哪怕最后都是半桶水也没有关系，我希望自己能成为一个有点知识的人，一方面我无法忍受自身知识的匮乏和认知的浅薄；另一个方面，我想学很多很多东西，将来可以给村里小朋友教点东西也行，或者其他地方的，很小的时候，就已经想过，将来要在二楼弄个书房，全都堆满书，然后可以借给很多人看，再有个房间，学习乐器什么的。乡下教育，一直以来的问题，其实不一定都是经济，经济当然是很大的原因，但其实更多的是缺少引路人，引路人一般都是父母，父母的知识面，眼界，信息差其实很大程度决定了小朋友的命运，他们不知道外面世界是什么样子的，每个人看到的世界有好坏之分，但是世界自身没有好坏之分，你看到什么是你个人主观投射而成，这就是引路人的价值所在，怎么去给小朋友搭建一个符合他们自身个性的世界，让他们看得到，摸得着，至于他们怎么选择，就完全看他们自己了，但是现在的情况是，很多大人没有什么知识面和眼界，那么搭建能力也就无从说起了。&lt;/p&gt;
&lt;p&gt;希望能以身践行，学习每一个技能，从实践总结成理论，将理论整理为教程。&lt;/p&gt;
&lt;h2 id=&#34;怎么学&#34;&gt;怎么学&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;怎么减肥？&lt;/li&gt;
&lt;li&gt;怎么增肌？&lt;/li&gt;
&lt;li&gt;怎么跑步？&lt;/li&gt;
&lt;li&gt;怎么游泳？&lt;/li&gt;
&lt;li&gt;怎么早睡早起？&lt;/li&gt;
&lt;li&gt;怎么学Vue开发？&lt;/li&gt;
&lt;li&gt;怎么学Flutter开发？&lt;/li&gt;
&lt;li&gt;怎么学Android开发？&lt;/li&gt;
&lt;li&gt;怎么学Nodejs开发？&lt;/li&gt;
&lt;li&gt;怎么学Java开发？&lt;/li&gt;
&lt;li&gt;怎么学ToB产品设计&lt;/li&gt;
&lt;li&gt;怎么学市场营销？&lt;/li&gt;
&lt;li&gt;怎么学项目管理？&lt;/li&gt;
&lt;li&gt;怎么学团队管理？&lt;/li&gt;
&lt;li&gt;怎么徒步？&lt;/li&gt;
&lt;li&gt;怎么学吉他？&lt;/li&gt;
&lt;li&gt;怎么学钢琴？&lt;/li&gt;
&lt;li&gt;怎么学英语？&lt;/li&gt;
&lt;li&gt;怎么学普通话？&lt;/li&gt;
&lt;li&gt;怎么学习画画？&lt;/li&gt;
&lt;li&gt;怎么做饭？&lt;/li&gt;
&lt;li&gt;怎么护肤？&lt;/li&gt;
&lt;li&gt;怎么穿搭？&lt;/li&gt;
&lt;li&gt;怎么阅读？&lt;/li&gt;
&lt;li&gt;怎么写读书笔记？&lt;/li&gt;
&lt;li&gt;怎么写电影日志？&lt;/li&gt;
&lt;li&gt;怎么写诗词？&lt;/li&gt;
&lt;li&gt;怎么创作歌词？&lt;/li&gt;
&lt;li&gt;怎么写小说？&lt;/li&gt;
&lt;li&gt;怎么写日记？&lt;/li&gt;
&lt;li&gt;怎么摄影？&lt;/li&gt;
&lt;li&gt;怎么创业？&lt;/li&gt;
&lt;/ul&gt;</description>
      <content:encoded><![CDATA[<h2 id="前言">前言</h2>
<p>之前也算研究过”高效学习“这方面的书籍和课程，总的来说，无非就是意识和实践，意识是指明白以教代学是什么，实际上就是以终为始——先假设你想得到的结果，然后再倒逼我们从源头去规划应该怎么去做这个事情。如果你打算教别人东西，为了怕被别人问住，你不得不把相关知识都弄明白了，这无形之中，就给你施加了学习的压力，有处于你全面掌握这个知识点。实践，也就是毛泽东《实践论》里的观点，实践与理论反复验证，只有动手了人才会更加专注，也才会真正感受得到所要学的东西到底是什么？如果只停留在书籍上面，因为都是一些理论的东西，注意力很容易分散，学习效果大大折扣。</p>
<p>比如，如果要学习Flutter开发，我不会一字不漏地看完官网文档才动手敲代码，我会立马开始敲代码，是的，啥都不知道，完全凭感觉去做这个事情，然后呢，如果要实现一个按钮，我就去看按钮的部分，动手实现了，如果要实现一个弹窗，我就去看弹窗的部分，把弹窗实现了，一步一步，慢慢先把用到的东西学起来，在这个过程中，你一定是带着问题去查看文档的，这无形之中，就会加深了印象。</p>
<p>这个方法其实也是可以用在学校的，我就先做练习本或者试卷，根本就没学过这个知识，凭感觉去做，不知道就记下来，猜测应该是什么意思，然后再去找答案，再去收集，总结，再去做题。</p>
<p>我们通常都会说，人心不足蛇吞象，想什么都学，结果什么都学不会。这个道理没错，但是，人这一生本来就很短暂，不可能看完古今中外所有的书，学到所有的知识，我只打算享受过程，哪怕最后都是半桶水也没有关系，我希望自己能成为一个有点知识的人，一方面我无法忍受自身知识的匮乏和认知的浅薄；另一个方面，我想学很多很多东西，将来可以给村里小朋友教点东西也行，或者其他地方的，很小的时候，就已经想过，将来要在二楼弄个书房，全都堆满书，然后可以借给很多人看，再有个房间，学习乐器什么的。乡下教育，一直以来的问题，其实不一定都是经济，经济当然是很大的原因，但其实更多的是缺少引路人，引路人一般都是父母，父母的知识面，眼界，信息差其实很大程度决定了小朋友的命运，他们不知道外面世界是什么样子的，每个人看到的世界有好坏之分，但是世界自身没有好坏之分，你看到什么是你个人主观投射而成，这就是引路人的价值所在，怎么去给小朋友搭建一个符合他们自身个性的世界，让他们看得到，摸得着，至于他们怎么选择，就完全看他们自己了，但是现在的情况是，很多大人没有什么知识面和眼界，那么搭建能力也就无从说起了。</p>
<p>希望能以身践行，学习每一个技能，从实践总结成理论，将理论整理为教程。</p>
<h2 id="怎么学">怎么学</h2>
<ul>
<li>怎么减肥？</li>
<li>怎么增肌？</li>
<li>怎么跑步？</li>
<li>怎么游泳？</li>
<li>怎么早睡早起？</li>
<li>怎么学Vue开发？</li>
<li>怎么学Flutter开发？</li>
<li>怎么学Android开发？</li>
<li>怎么学Nodejs开发？</li>
<li>怎么学Java开发？</li>
<li>怎么学ToB产品设计</li>
<li>怎么学市场营销？</li>
<li>怎么学项目管理？</li>
<li>怎么学团队管理？</li>
<li>怎么徒步？</li>
<li>怎么学吉他？</li>
<li>怎么学钢琴？</li>
<li>怎么学英语？</li>
<li>怎么学普通话？</li>
<li>怎么学习画画？</li>
<li>怎么做饭？</li>
<li>怎么护肤？</li>
<li>怎么穿搭？</li>
<li>怎么阅读？</li>
<li>怎么写读书笔记？</li>
<li>怎么写电影日志？</li>
<li>怎么写诗词？</li>
<li>怎么创作歌词？</li>
<li>怎么写小说？</li>
<li>怎么写日记？</li>
<li>怎么摄影？</li>
<li>怎么创业？</li>
</ul>
]]></content:encoded>
    </item>
    <item>
      <title>怎么学Vue开发</title>
      <link>https://dstweihao.cn/posts/%E6%8A%80%E6%9C%AF%E4%B8%8E%E6%9E%B6%E6%9E%84/%E7%B3%BB%E7%BB%9F%E4%B8%8E%E6%9E%B6%E6%9E%84/%E6%80%8E%E4%B9%88%E5%AD%A6vue%E5%BC%80%E5%8F%91/</link>
      <pubDate>Sun, 21 Aug 2022 00:00:00 +0000</pubDate>
      <guid>https://dstweihao.cn/posts/%E6%8A%80%E6%9C%AF%E4%B8%8E%E6%9E%B6%E6%9E%84/%E7%B3%BB%E7%BB%9F%E4%B8%8E%E6%9E%B6%E6%9E%84/%E6%80%8E%E4%B9%88%E5%AD%A6vue%E5%BC%80%E5%8F%91/</guid>
      <description>&lt;h1 id=&#34;第1章-简介&#34;&gt;第1章 简介&lt;/h1&gt;
&lt;p&gt;我们在学习新技术的时候，习惯于将官方文档先过一遍，将全部的知识点全部掌握之后，再进行项目实战，但是因为太多都是概念的知识，学习过程枯燥乏味，很少有人能坚持下来。&lt;/p&gt;
&lt;p&gt;所以我在想，怎么改变这种现象？以我个人的经验来说，过多深究官方文档，反而将自己陷入知识点的海洋之中，抓不到重点，往往水过鸭背，因为学了没有真正应用，不久之后就会忘记，我的意思是，不用看什么官方文档，以终为始，不用管自己到底会不会，直接上手开发项目，根据当前的需求，去学习对应的知识点，比如现在你要生成一个 Vue3.0 项目，那么你可能只需要去学一下Vite对应的知识点就好了，不用去学Vue3.0中父子组件应该怎么传值？比如你要学习开发一个登陆页面，那你就需要去看Element-Plus应该怎么引入？如果你所学并不能为当下所用，那将毫无意义。&lt;/p&gt;
&lt;p&gt;其实在你一步一步完成真实项目的过程中，就一直在学习Vue3.0的知识点了。&lt;/p&gt;
&lt;p&gt;本书计划将 &lt;code&gt;Vue3.0&lt;/code&gt; 的知识过一遍，所以一些 &lt;code&gt;Vue2.0&lt;/code&gt; 就需要的环境配置就不再过多说明，只会提到 &lt;code&gt;Vue3.0&lt;/code&gt; 开发环境配置相关的内容，用到的技术有 &lt;code&gt;Vue3.0+Vite+TypeScript+Element-Plus+Less &lt;/code&gt;。&lt;/p&gt;
&lt;h1 id=&#34;第2章-开发环境配置&#34;&gt;第2章 开发环境配置&lt;/h1&gt;
&lt;h2 id=&#34;21-新建项目&#34;&gt;2.1 新建项目&lt;/h2&gt;
&lt;p&gt;在 &lt;a href=&#34;https://cn.vitejs.dev/&#34;&gt;Vite官方文档&lt;/a&gt; 中，已经提供了很多预设的模板，这里因为只关注当前使用的技术，所以其他模板并不详细说明，使用 &lt;code&gt;Vite&lt;/code&gt; 生成 &lt;code&gt;Vue3.0&lt;/code&gt; 项目模板，如果是使用 &lt;code&gt;JaveScript&lt;/code&gt; 进行开发，使用 &lt;code&gt;vue&lt;/code&gt; ，如果是使用 &lt;code&gt;TypeScript&lt;/code&gt; 进行开发，使用 &lt;code&gt;vue-ts&lt;/code&gt; ，具体命令如下所示：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-js&#34; data-lang=&#34;js&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;err&#34;&gt;#&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;npm&lt;/span&gt; &lt;span class=&#34;mf&#34;&gt;6.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;x&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nx&#34;&gt;npm&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;init&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;vite&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;@&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;latest&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;my&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;vue&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;app&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;--&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;template&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;vue&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;err&#34;&gt;#&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;npm&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;7&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;+&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;需要额外的双横线&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;：&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;err&#34;&gt;#&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;如果是使用JaveScript开发&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;，&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;使用vue&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nx&#34;&gt;npm&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;init&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;vite&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;@&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;latest&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;my&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;vue&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;app&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;--&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;--&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;template&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;vue&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;err&#34;&gt;#&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;如果是使用JaveScript开发&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;，&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;使用vue&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;ts&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nx&#34;&gt;npm&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;init&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;vite&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;@&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;latest&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;my&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;vue&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;app&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;--&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;--&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;template&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;vue&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;ts&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;img loading=&#34;lazy&#34; src=&#34;https://dstweihao-1300388255.cos.ap-guangzhou.myqcloud.com/images/001.PNG&#34;&gt;&lt;/p&gt;
&lt;p&gt;打开chrome，就会显示项目模板的内容，如下图所示：&lt;/p&gt;
&lt;p&gt;&lt;img loading=&#34;lazy&#34; src=&#34;https://dstweihao-1300388255.cos.ap-guangzhou.myqcloud.com/images/002.PNG&#34;&gt;&lt;/p&gt;
&lt;h2 id=&#34;22-chrome-91版本以上跨越问题&#34;&gt;2.2 Chrome 91版本以上跨越问题&lt;/h2&gt;
&lt;h1 id=&#34;第3章-vue30基础知识&#34;&gt;第3章 Vue3.0基础知识&lt;/h1&gt;
&lt;h2 id=&#34;31-router&#34;&gt;3.1 Router&lt;/h2&gt;
&lt;h2 id=&#34;32-comand&#34;&gt;3.2 Comand&lt;/h2&gt;
&lt;h2 id=&#34;33-porps&#34;&gt;3.3 Porps&lt;/h2&gt;
&lt;h2 id=&#34;34-emit&#34;&gt;3.4 Emit&lt;/h2&gt;
&lt;h2 id=&#34;35-vuex&#34;&gt;3.5 Vuex&lt;/h2&gt;
&lt;h3 id=&#34;351-computed&#34;&gt;3.5.1 computed&lt;/h3&gt;
&lt;p&gt;&lt;code&gt;computed&lt;/code&gt;主要用于涉及到视图更新的处理，比如用户名username的更新，刷新后，右上角用户名没有赋值成功。在&lt;code&gt;App.vue&lt;/code&gt;中已经添加了&lt;code&gt;getUserInfo&lt;/code&gt;的网络请求，但是在右上角上赋值显示失败了。&lt;/p&gt;
&lt;p&gt;使用方式如下所示，并没有触发视图更新：&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;const username = store.state.userInfo.username
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;触发视图更新：&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;improt { useStore } from &amp;#39;vuex&amp;#39;
const store = useStore()
const username = computed(() =&amp;gt; {
    return store.state.userInfo.username
})
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;userInfo敲定刷新后的获取策略&lt;/p&gt;</description>
      <content:encoded><![CDATA[<h1 id="第1章-简介">第1章 简介</h1>
<p>我们在学习新技术的时候，习惯于将官方文档先过一遍，将全部的知识点全部掌握之后，再进行项目实战，但是因为太多都是概念的知识，学习过程枯燥乏味，很少有人能坚持下来。</p>
<p>所以我在想，怎么改变这种现象？以我个人的经验来说，过多深究官方文档，反而将自己陷入知识点的海洋之中，抓不到重点，往往水过鸭背，因为学了没有真正应用，不久之后就会忘记，我的意思是，不用看什么官方文档，以终为始，不用管自己到底会不会，直接上手开发项目，根据当前的需求，去学习对应的知识点，比如现在你要生成一个 Vue3.0 项目，那么你可能只需要去学一下Vite对应的知识点就好了，不用去学Vue3.0中父子组件应该怎么传值？比如你要学习开发一个登陆页面，那你就需要去看Element-Plus应该怎么引入？如果你所学并不能为当下所用，那将毫无意义。</p>
<p>其实在你一步一步完成真实项目的过程中，就一直在学习Vue3.0的知识点了。</p>
<p>本书计划将 <code>Vue3.0</code> 的知识过一遍，所以一些 <code>Vue2.0</code> 就需要的环境配置就不再过多说明，只会提到 <code>Vue3.0</code> 开发环境配置相关的内容，用到的技术有 <code>Vue3.0+Vite+TypeScript+Element-Plus+Less </code>。</p>
<h1 id="第2章-开发环境配置">第2章 开发环境配置</h1>
<h2 id="21-新建项目">2.1 新建项目</h2>
<p>在 <a href="https://cn.vitejs.dev/">Vite官方文档</a> 中，已经提供了很多预设的模板，这里因为只关注当前使用的技术，所以其他模板并不详细说明，使用 <code>Vite</code> 生成 <code>Vue3.0</code> 项目模板，如果是使用 <code>JaveScript</code> 进行开发，使用 <code>vue</code> ，如果是使用 <code>TypeScript</code> 进行开发，使用 <code>vue-ts</code> ，具体命令如下所示：</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-js" data-lang="js"><span class="line"><span class="cl"><span class="err">#</span> <span class="nx">npm</span> <span class="mf">6.</span><span class="nx">x</span>
</span></span><span class="line"><span class="cl"><span class="nx">npm</span> <span class="nx">init</span> <span class="nx">vite</span><span class="err">@</span><span class="nx">latest</span> <span class="nx">my</span><span class="o">-</span><span class="nx">vue</span><span class="o">-</span><span class="nx">app</span> <span class="o">--</span><span class="nx">template</span> <span class="nx">vue</span>
</span></span><span class="line"><span class="cl"><span class="err">#</span> <span class="nx">npm</span> <span class="mi">7</span><span class="o">+</span><span class="p">,</span> <span class="nx">需要额外的双横线</span><span class="err">：</span>
</span></span><span class="line"><span class="cl"><span class="err">#</span> <span class="nx">如果是使用JaveScript开发</span><span class="err">，</span><span class="nx">使用vue</span>
</span></span><span class="line"><span class="cl"><span class="nx">npm</span> <span class="nx">init</span> <span class="nx">vite</span><span class="err">@</span><span class="nx">latest</span> <span class="nx">my</span><span class="o">-</span><span class="nx">vue</span><span class="o">-</span><span class="nx">app</span> <span class="o">--</span> <span class="o">--</span><span class="nx">template</span> <span class="nx">vue</span>
</span></span><span class="line"><span class="cl"><span class="err">#</span> <span class="nx">如果是使用JaveScript开发</span><span class="err">，</span><span class="nx">使用vue</span><span class="o">-</span><span class="nx">ts</span>
</span></span><span class="line"><span class="cl"><span class="nx">npm</span> <span class="nx">init</span> <span class="nx">vite</span><span class="err">@</span><span class="nx">latest</span> <span class="nx">my</span><span class="o">-</span><span class="nx">vue</span><span class="o">-</span><span class="nx">app</span> <span class="o">--</span> <span class="o">--</span><span class="nx">template</span> <span class="nx">vue</span><span class="o">-</span><span class="nx">ts</span>
</span></span></code></pre></div><p><img loading="lazy" src="https://dstweihao-1300388255.cos.ap-guangzhou.myqcloud.com/images/001.PNG"></p>
<p>打开chrome，就会显示项目模板的内容，如下图所示：</p>
<p><img loading="lazy" src="https://dstweihao-1300388255.cos.ap-guangzhou.myqcloud.com/images/002.PNG"></p>
<h2 id="22-chrome-91版本以上跨越问题">2.2 Chrome 91版本以上跨越问题</h2>
<h1 id="第3章-vue30基础知识">第3章 Vue3.0基础知识</h1>
<h2 id="31-router">3.1 Router</h2>
<h2 id="32-comand">3.2 Comand</h2>
<h2 id="33-porps">3.3 Porps</h2>
<h2 id="34-emit">3.4 Emit</h2>
<h2 id="35-vuex">3.5 Vuex</h2>
<h3 id="351-computed">3.5.1 computed</h3>
<p><code>computed</code>主要用于涉及到视图更新的处理，比如用户名username的更新，刷新后，右上角用户名没有赋值成功。在<code>App.vue</code>中已经添加了<code>getUserInfo</code>的网络请求，但是在右上角上赋值显示失败了。</p>
<p>使用方式如下所示，并没有触发视图更新：</p>
<pre tabindex="0"><code>const username = store.state.userInfo.username
</code></pre><p>触发视图更新：</p>
<pre tabindex="0"><code>improt { useStore } from &#39;vuex&#39;
const store = useStore()
const username = computed(() =&gt; {
    return store.state.userInfo.username
})
</code></pre><p>userInfo敲定刷新后的获取策略</p>
<ol>
<li>
<p>通过在App.vue中重新发起请求获取用户信息</p>
<p>问题：1.登录页面刷新因为没有token会报错，解决可以加上判断，但是代码很难看。</p>
<pre><code> 2.每个组件中都需要watch监听usrInfo，很繁琐。
</code></pre>
</li>
<li>
<p>登录后将用户信息保存在localStorage，刷新后通过vuex中获取</p>
<p>问题: 1.如果更新了用户信息,刷新后获取的还是旧的数据</p>
<pre><code> 2.在getters.ts中判断数据为空就重新发起网络请求，获取用户信息，但是因为异步的原因，数据并没有同步。
</code></pre>
</li>
<li>
<p>登录后触发commit，然后在mutations.ts中，将用户信息保存到localStorage，刷新后通过vuex获取。</p>
<p>问题: 1.需解决刷新后还是旧数据的问题，那就需要更新后，通过commit更新localStorage中的用户信息</p>
</li>
<li>
<p>最终确定以方式3实现：</p>
<p>使用方式：</p>
<pre tabindex="0"><code>
 import { useStore } from &#39;vuex&#39;

  let userInfo = store.getters.userInfo
</code></pre></li>
</ol>
<p>在ZHeaderArea.vue中的
let userInfo = computed(() =&gt; {
return store.state.userInfo
})</p>
<p>改为getter获取就报错</p>
<pre tabindex="0"><code>


### 3.5.2 watch

`watch`用于监听数据有变化触发，用于需要对数据进行操作时使用，比如个人中心，刷新后，使用`computed`方式`userInfo`没有成功获取，原因是`&lt;template&gt;`上并没有使用userInfo进行关联。

```tsx
     let userInfo = store.state.userInfo
     setUserInfoListValue(userInfo)
     watch(
         () =&gt; store.state.userInfo,
         (newValue, oldValue) =&gt; {
             userInfo = newValue
             setUserInfoListValue(userInfo)
         }
     )
     function setUserInfoListValue(info: any) {
         userInfoList.forEach((item: any) =&gt; {
             for (var key in info) {
                 if (item.prop === key) {
                     item.content = info[key] ? info[key] : &#39;--&#39;
                 }
             }
         })
     }
</code></pre><h2 id="35-viteconfigts">3.5 Vite.config.ts</h2>
<h3 id="351-如何设置路径别名">3.5.1 如何设置路径别名</h3>
<p>在项目中，因为组件或者ts文件引入，需要指定路径，如果文件层级很深，在开发中就会变得很繁琐，使用别名可以有效的解决这个问题。</p>
<p>第一步，需要在vite.config.ts文件中加上，如下所示：</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-js" data-lang="js"><span class="line"><span class="cl"><span class="kr">const</span> <span class="nx">path</span> <span class="o">=</span> <span class="nx">require</span><span class="p">(</span><span class="s1">&#39;path&#39;</span><span class="p">)</span>
</span></span><span class="line"><span class="cl"><span class="kr">export</span> <span class="k">default</span> <span class="nx">defineConfig</span><span class="p">({</span>
</span></span><span class="line"><span class="cl">  <span class="nx">resolve</span><span class="o">:</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl">    <span class="nx">alias</span><span class="o">:</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl">      <span class="s1">&#39;@&#39;</span><span class="o">:</span> <span class="nx">path</span><span class="p">.</span><span class="nx">resolve</span><span class="p">(</span><span class="nx">__dirname</span><span class="p">,</span> <span class="s1">&#39;./src&#39;</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">    <span class="p">}</span>
</span></span><span class="line"><span class="cl">  <span class="p">}</span>
</span></span><span class="line"><span class="cl">  <span class="p">......</span>
</span></span><span class="line"><span class="cl"><span class="p">})</span>
</span></span></code></pre></div><p>第二步，需要在tsconfig.json文件中加上，如下所示：</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-js" data-lang="js"><span class="line"><span class="cl"><span class="p">{</span>
</span></span><span class="line"><span class="cl">  <span class="s2">&#34;compilerOptions&#34;</span><span class="o">:</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl">    
</span></span><span class="line"><span class="cl">    <span class="p">......</span>
</span></span><span class="line"><span class="cl">    
</span></span><span class="line"><span class="cl">    <span class="s2">&#34;baseUrl&#34;</span><span class="o">:</span> <span class="s2">&#34;./&#34;</span><span class="p">,</span>
</span></span><span class="line"><span class="cl">    <span class="s2">&#34;paths&#34;</span><span class="o">:</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl">      <span class="s2">&#34;@/*&#34;</span><span class="o">:</span><span class="p">[</span><span class="s2">&#34;./src/*&#34;</span><span class="p">]</span>
</span></span><span class="line"><span class="cl">    <span class="p">}</span>
</span></span><span class="line"><span class="cl">  <span class="p">}</span>
</span></span></code></pre></div><p>此时，就可以在项目中使用@了。</p>
<h1 id="第4章-搭建项目框架">第4章 搭建项目框架</h1>
<h2 id="41-container布局容器">4.1 Container布局容器</h2>
<h2 id="41-左侧菜单栏实现">4.1 左侧菜单栏实现</h2>
<ol>
<li>
<p>左侧菜单栏，实现过程中遇到了一个问题，那就是el-aside的宽度默认是300px，项目中需求是200px，这个不难，只需要在<el-aside>中设置width=&ldquo;200px&quot;就可以解决了，然后如果要实现展开和收缩，就需要设置<el-menu>，而它的宽度需要单独设置的 ，设置为200px，实现展开和收缩功能，收缩时宽度变为60px，但是<el-aside>还是200px，其实要实现联动，只需要动态设置width的值就好了，但是实现左侧菜单栏，我们通常是单独抽成组件来使用的，这样要联动就很麻烦，其实要实现也是可以的，使用props就好了，但我还是想着有没有更好的方法，有什么办法能够动态设置<el-aside>的宽度？</p>
<p>因为去掉<el-aside>的宽度属性发现，<el-menu>实现的效果是很理想的，后来发现只需要设置width为auto即可</p>
</li>
<li>
<p>左侧菜单栏，如何使用组件递归实现？</p>
</li>
<li>
<p>el-menu折叠时为何不显示二级菜单？</p>
<p>当菜单栏折叠时，发现首页的图标没有显示，实现的代码如下所示：</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-js" data-lang="js"><span class="line"><span class="cl"><span class="o">&lt;</span><span class="nx">el</span><span class="o">-</span><span class="nx">menu</span><span class="o">-</span><span class="nx">item</span> <span class="nx">v</span><span class="o">-</span><span class="k">if</span><span class="o">=</span><span class="s2">&#34;!item.childrens&#34;</span> <span class="o">:</span><span class="nx">index</span><span class="o">=</span><span class="s2">&#34;`${String(index)}`&#34;</span> <span class="o">:</span><span class="nx">route</span><span class="o">=</span><span class="s2">&#34;item.index&#34;</span><span class="o">&gt;</span>
</span></span><span class="line"><span class="cl">	<span class="o">&lt;</span><span class="nx">template</span> <span class="err">#</span><span class="nx">title</span><span class="o">&gt;</span>
</span></span><span class="line"><span class="cl">		<span class="o">&lt;</span><span class="nx">div</span> <span class="kr">class</span><span class="o">=</span><span class="s2">&#34;zws-aside-menu-item&#34;</span><span class="o">&gt;</span>
</span></span><span class="line"><span class="cl">			<span class="o">&lt;</span><span class="nx">i</span> <span class="o">:</span><span class="kr">class</span><span class="o">=</span><span class="s2">&#34;`zws-aside-menu-item-iconSetting iconfont ${item.icon}`&#34;</span><span class="o">&gt;&lt;</span><span class="err">/i&gt;</span>
</span></span><span class="line"><span class="cl">			<span class="o">&lt;</span><span class="nx">span</span><span class="o">&gt;</span><span class="p">{{</span> <span class="nx">item</span><span class="p">.</span><span class="nx">title</span> <span class="p">}}</span><span class="o">&lt;</span><span class="err">/span&gt;</span>
</span></span><span class="line"><span class="cl">		<span class="o">&lt;</span><span class="err">/div&gt;</span>
</span></span><span class="line"><span class="cl">	<span class="o">&lt;</span><span class="err">/template&gt;</span>
</span></span><span class="line"><span class="cl"><span class="o">&lt;</span><span class="err">/el-menu-item&gt;</span>
</span></span></code></pre></div><p>之前的项目没有这个问题是因为不是使用collapse这个属性实现的，而是动态设置宽度，200和60切换达到的效果。查看官方文档的案例，发现这个写法，当折叠时，是显示图标的，如下所示：</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-js" data-lang="js"><span class="line"><span class="cl"><span class="o">&lt;</span><span class="nx">el</span><span class="o">-</span><span class="nx">menu</span><span class="o">-</span><span class="nx">item</span> <span class="nx">index</span><span class="o">=</span><span class="s2">&#34;4&#34;</span><span class="o">&gt;</span>
</span></span><span class="line"><span class="cl">	<span class="o">&lt;</span><span class="nx">i</span> <span class="kr">class</span><span class="o">=</span><span class="s2">&#34;el-icon-setting&#34;</span><span class="o">&gt;&lt;</span><span class="err">/i&gt;</span>
</span></span><span class="line"><span class="cl">	<span class="o">&lt;</span><span class="nx">span</span> <span class="nx">slot</span><span class="o">=</span><span class="s2">&#34;title&#34;</span><span class="o">&gt;</span><span class="nx">导航四</span><span class="o">&lt;</span><span class="err">/span&gt;</span>
</span></span><span class="line"><span class="cl"><span class="o">&lt;</span><span class="err">/el-menu-item&gt;</span>
</span></span></code></pre></div><p>然后按照官网的写法，将<template>去掉就没再出现这个问题了。</p>
</li>
<li>
<p>点击左侧菜单栏，没有触发路由跳转？</p>
<p>原因是：在<el-menu>组件中忘记加上router了</p>
</li>
<li>
<p>路由跳转到新的页面，怎么让新的页面是在<el-main>组件中的？</p>
<p>需要设置嵌套路由，而且path设置时需要/，但是子路由path前面不用加/。</p>
</li>
<li>
<p>当<el-aside>的width设置为auto时，出现多余边框，如下图所示：</p>
<p><img alt="003" loading="lazy" src="https://dstweihao-1300388255.cos.ap-guangzhou.myqcloud.com/images/003.png"></p>
<p>但是如果把width设置为200px，是没有这个问题的，问题应该出在<el-menu>组件上面，当把它设置width为200px时，实际上<el-aside>的width是201px，这个1px到底是从哪里来的？</p>
</li>
<li></li>
<li></li>
<li></li>
</ol>
<h2 id="42-主题色切换">4.2 主题色切换</h2>
<h3 id="421-在项目中改变-sass-变量">4.2.1 在项目中改变 SASS 变量</h3>
<p>由于Element-Plus<code>处于开发状</code>态，所以官方文档里并没能做到实时更新，导致按照提供的方式，其实出现了很多问题，经过研究，当前版本，正确的配置方式为：</p>
<ol>
<li>
<p>在项目目录新建<code>element-variables.scss</code>文件，并加上覆盖的样式代码：</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-js" data-lang="js"><span class="line"><span class="cl"><span class="cm">/* 改变主题色变量 */</span>
</span></span><span class="line"><span class="cl"><span class="nx">$</span><span class="o">--</span><span class="nx">colors</span><span class="o">:</span> <span class="p">(</span>
</span></span><span class="line"><span class="cl">    <span class="s2">&#34;primary&#34;</span><span class="o">:</span> <span class="p">(</span>
</span></span><span class="line"><span class="cl">        <span class="s2">&#34;base&#34;</span><span class="o">:</span> <span class="err">#</span><span class="mi">80</span><span class="nx">b33f</span><span class="p">,</span>
</span></span><span class="line"><span class="cl">    <span class="p">),</span>
</span></span><span class="line"><span class="cl"><span class="p">);</span>
</span></span><span class="line"><span class="cl"><span class="cm">/* 改变 icon 字体路径变量，必需（将~去掉，不然不显示图标） */</span>
</span></span><span class="line"><span class="cl"><span class="nx">$</span><span class="o">--</span><span class="nx">font</span><span class="o">-</span><span class="nx">path</span><span class="o">:</span> <span class="s2">&#34;element-plus/lib/theme-chalk/fonts&#34;</span><span class="p">;</span>
</span></span><span class="line"><span class="cl"><span class="cm">/* 将~改为node_modules后，确实解决了路径引用报错的问题，但是项目每次刷新都很慢，需持续留意解决方案*/</span>
</span></span><span class="line"><span class="cl"><span class="err">@</span><span class="kr">import</span> <span class="s2">&#34;node_modules/element-plus/packages/theme-chalk/src/index.scss&#34;</span><span class="p">;</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="cm">/* 一般以上就够满足需求了，其他设置*/</span>
</span></span><span class="line"><span class="cl"><span class="nx">$</span><span class="o">--</span><span class="nx">colors</span><span class="o">:</span> <span class="p">(</span>
</span></span><span class="line"><span class="cl">  <span class="s2">&#34;primary&#34;</span><span class="o">:</span> <span class="p">(</span>
</span></span><span class="line"><span class="cl">    <span class="s2">&#34;base&#34;</span><span class="o">:</span> <span class="err">#</span><span class="mi">003261</span><span class="p">,</span>
</span></span><span class="line"><span class="cl">  <span class="p">),</span>
</span></span><span class="line"><span class="cl">  <span class="s2">&#34;success&#34;</span><span class="o">:</span> <span class="p">(</span>
</span></span><span class="line"><span class="cl">    <span class="s2">&#34;base&#34;</span><span class="o">:</span> <span class="err">#</span><span class="mi">21</span><span class="nx">ba45</span><span class="p">,</span>
</span></span><span class="line"><span class="cl">  <span class="p">),</span>
</span></span><span class="line"><span class="cl">  <span class="s2">&#34;warning&#34;</span><span class="o">:</span> <span class="p">(</span>
</span></span><span class="line"><span class="cl">    <span class="s2">&#34;base&#34;</span><span class="o">:</span> <span class="err">#</span><span class="nx">f2711c</span><span class="p">,</span>
</span></span><span class="line"><span class="cl">  <span class="p">),</span>
</span></span><span class="line"><span class="cl">  <span class="s2">&#34;danger&#34;</span><span class="o">:</span> <span class="p">(</span>
</span></span><span class="line"><span class="cl">    <span class="s2">&#34;base&#34;</span><span class="o">:</span> <span class="err">#</span><span class="nx">db2828</span><span class="p">,</span>
</span></span><span class="line"><span class="cl">  <span class="p">),</span>
</span></span><span class="line"><span class="cl">  <span class="s2">&#34;error&#34;</span><span class="o">:</span> <span class="p">(</span>
</span></span><span class="line"><span class="cl">    <span class="s2">&#34;base&#34;</span><span class="o">:</span> <span class="err">#</span><span class="nx">db2828</span><span class="p">,</span>
</span></span><span class="line"><span class="cl">  <span class="p">),</span>
</span></span><span class="line"><span class="cl">  <span class="s2">&#34;info&#34;</span><span class="o">:</span> <span class="p">(</span>
</span></span><span class="line"><span class="cl">    <span class="s2">&#34;base&#34;</span><span class="o">:</span> <span class="err">#</span><span class="mi">42</span><span class="nx">b8dd</span><span class="p">,</span>
</span></span><span class="line"><span class="cl">  <span class="p">),</span>
</span></span><span class="line"><span class="cl"><span class="p">);</span>
</span></span></code></pre></div></li>
<li>
<p>在项目<code>main.ts</code>文件中引入</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-js" data-lang="js"><span class="line"><span class="cl"><span class="kr">import</span> <span class="nx">App</span> <span class="nx">from</span> <span class="s1">&#39;./App.vue&#39;</span><span class="p">;</span>
</span></span><span class="line"><span class="cl"><span class="kr">import</span> <span class="nx">ElementPlus</span> <span class="nx">from</span> <span class="s1">&#39;element-plus&#39;</span><span class="p">;</span>
</span></span><span class="line"><span class="cl"><span class="kr">import</span> <span class="p">{</span> <span class="nx">createApp</span> <span class="p">}</span> <span class="nx">from</span> <span class="s1">&#39;vue&#39;</span>
</span></span><span class="line"><span class="cl"><span class="kr">import</span> <span class="p">{</span> <span class="nx">router</span> <span class="p">}</span> <span class="nx">from</span> <span class="s1">&#39;./router/index&#39;</span><span class="p">;</span>
</span></span><span class="line"><span class="cl"><span class="kr">import</span> <span class="s1">&#39;./assets/iconfont/iconfont.css&#39;</span>
</span></span><span class="line"><span class="cl"><span class="c1">// 引入 element-variables.scss 文件
</span></span></span><span class="line"><span class="cl"><span class="c1"></span><span class="kr">import</span> <span class="s1">&#39;../element-variables.scss&#39;</span>
</span></span><span class="line"><span class="cl"><span class="kr">const</span> <span class="nx">app</span> <span class="o">=</span> <span class="nx">createApp</span><span class="p">(</span><span class="nx">App</span><span class="p">)</span>
</span></span><span class="line"><span class="cl"><span class="nx">app</span><span class="p">.</span><span class="nx">use</span><span class="p">(</span><span class="nx">ElementPlus</span><span class="p">)</span>
</span></span><span class="line"><span class="cl"><span class="nx">app</span><span class="p">.</span><span class="nx">use</span><span class="p">(</span><span class="nx">router</span><span class="p">)</span>
</span></span><span class="line"><span class="cl"><span class="nx">app</span><span class="p">.</span><span class="nx">mount</span><span class="p">(</span><span class="s1">&#39;#app&#39;</span><span class="p">)</span>
</span></span></code></pre></div></li>
</ol>
<h3 id="422-命令行主题工具">4.2.2 命令行主题工具</h3>
<p>如果项目中没有使用SASS，推荐使用这个方式。</p>
<ol>
<li>
<p>在使用Elment-Plus时，打算切换主题色，安装官方文档实现，运行<code>et -i</code>时，显示如下报错信息：</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-js" data-lang="js"><span class="line"><span class="cl"><span class="nx">Run</span> <span class="sb">`npm audit`</span> <span class="k">for</span> <span class="nx">details</span><span class="p">.</span>
</span></span><span class="line"><span class="cl"><span class="nx">weihao</span><span class="err">@</span><span class="nx">weihao</span><span class="o">-</span><span class="nx">mac</span><span class="o">-</span><span class="nx">mini</span> <span class="nx">vue3</span><span class="p">.</span><span class="mi">0</span> <span class="o">%</span> <span class="nx">et</span> <span class="o">-</span><span class="nx">i</span>
</span></span><span class="line"><span class="cl"><span class="nx">fs</span><span class="p">.</span><span class="nx">js</span><span class="o">:</span><span class="mi">45</span>
</span></span><span class="line"><span class="cl"><span class="p">}</span> <span class="o">=</span> <span class="nx">primordials</span><span class="p">;</span>
</span></span><span class="line"><span class="cl">    <span class="o">^</span>
</span></span><span class="line"><span class="cl"><span class="nx">ReferenceError</span><span class="o">:</span> <span class="nx">primordials</span> <span class="nx">is</span> <span class="nx">not</span> <span class="nx">defined</span>
</span></span><span class="line"><span class="cl">    <span class="nx">at</span> <span class="nx">fs</span><span class="p">.</span><span class="nx">js</span><span class="o">:</span><span class="mi">45</span><span class="o">:</span><span class="mi">5</span>
</span></span><span class="line"><span class="cl">    <span class="nx">at</span> <span class="nx">req_</span> <span class="p">(</span><span class="err">/usr/local/lib/node_modules/element-theme/node_modules/natives/index.js:143:24)</span>
</span></span><span class="line"><span class="cl">    <span class="nx">at</span> <span class="nb">Object</span><span class="p">.</span><span class="nx">req</span> <span class="p">[</span><span class="nx">as</span> <span class="nx">require</span><span class="p">]</span> <span class="p">(</span><span class="err">/usr/local/lib/node_modules/element-</span>
</span></span></code></pre></div><p>这个原因是因为Node.js版本过高导致的，官方推荐最好小于12版本。</p>
</li>
</ol>
<h2 id="43-项目部署服务器">4.3 项目部署服务器</h2>
<p>项目部署服务器的时候，发现console里显示报错，没有加载到相关js等等问题，原因是在<code>vite.config.ts</code>文件中少了设置<code>base:'./'</code>,再次部署，加载资源文件没有显示报错，但是页面显示空白，这是因为<code>router/index.ts</code>文件中，指定的路由模式为<code>history: createWebHistory()</code>，需要改为<code>history: createWebHashHistory()</code>,这两种模式的差别可看一下文章：<a href="https://www.xieniao.com/news/content/7156.html">VUE3.0 createWebHistory和createWebHashHistory</a></p>
<h1 id="第5章-其他问题">第5章 其他问题</h1>
<ol>
<li>Vue3.0项目中引入.js文件，打包报错的问题</li>
</ol>
<p><a href="https://blog.csdn.net/Haveyounow/article/details/118819037?utm_medium=distribute.pc_relevant_t0.none-task-blog-2%7Edefault%7ECTRLIST%7Edefault-1.no_search_link&amp;depth_1-utm_source=distribute.pc_relevant_t0.none-task-blog-2%7Edefault%7ECTRLIST%7Edefault-1.no_search_link">https://blog.csdn.net/Haveyounow/article/details/118819037?utm_medium=distribute.pc_relevant_t0.none-task-blog-2%7Edefault%7ECTRLIST%7Edefault-1.no_search_link&amp;depth_1-utm_source=distribute.pc_relevant_t0.none-task-blog-2%7Edefault%7ECTRLIST%7Edefault-1.no_search_link</a></p>
<ol start="2">
<li>
<p>@mouseenter 和 @mouseleave事件闪烁问题</p>
<p>不是后来才了解到，只能父子元素形成，不可以兄弟元素，兄弟元素就会闪烁</p>
</li>
</ol>
<h1 id="本书待补充知识点记录">本书待补充知识点记录</h1>
<ul>
<li>
<p><input disabled="" type="checkbox"> vuex使用指南，pinia使用指南，其与vuex的区别在哪里？</p>
</li>
<li>
<p><input disabled="" type="checkbox"> vue项目，vscode中debug使用指南</p>
</li>
<li>
<p><input disabled="" type="checkbox"> 提供vue学习路线，包括js、html、css、vue、vite、element plus等等</p>
</li>
</ul>
]]></content:encoded>
    </item>
  </channel>
</rss>
