<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
  <title>Aurora`Blog</title>
  <icon>https://www.gravatar.com/avatar/94c6bbdec1db1aac454d6450d5f271b4</icon>
  <subtitle>生活明朗，万物可爱.</subtitle>
  <link href="https://www.aurora0508.top/atom.xml" rel="self"/>
  
  <link href="https://www.aurora0508.top/"/>
  <updated>2024-05-07T09:35:01.924Z</updated>
  <id>https://www.aurora0508.top/</id>
  
  <author>
    <name>Aurora</name>
    <email>2933129083@qq.com</email>
  </author>
  
  <generator uri="https://hexo.io/">Hexo</generator>
  
  <entry>
    <title>H3C 路由器多系列信息泄露漏洞</title>
    <link href="https://www.aurora0508.top/posts/39e46908.html"/>
    <id>https://www.aurora0508.top/posts/39e46908.html</id>
    <published>2024-05-07T09:29:33.051Z</published>
    <updated>2024-05-07T09:35:01.924Z</updated>
    
    <content type="html"><![CDATA[<h2 id="描述"><a href="#描述" class="headerlink" title="描述"></a>描述</h2><p>H3C路由器多系列存在信息泄露漏洞，攻击者可以利用该漏洞获取备份文件中的管理员账户及密码等敏感信息</p><h2 id="查询语法"><a href="#查询语法" class="headerlink" title="查询语法"></a>查询语法</h2><p>fofa：app=”H3C Router Management”<br>hunter-query：app.name=”H3C Router Management”</p><h2 id="POC"><a href="#POC" class="headerlink" title="POC"></a>POC</h2><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br></pre></td><td class="code"><pre><span class="line">/userLogin.asp/../actionpolicy_status/../ER8300G2.cfg</span><br><span class="line">/userLogin.asp/../actionpolicy_status/../M60.cfg</span><br><span class="line">/userLogin.asp/../actionpolicy_status/../GR8300.cfg</span><br><span class="line">/userLogin.asp/../actionpolicy_status/../GR5200.cfg</span><br><span class="line">/userLogin.asp/../actionpolicy_status/../GR3200.cfg</span><br><span class="line">/userLogin.asp/../actionpolicy_status/../GR2200.cfg</span><br><span class="line">/userLogin.asp/../actionpolicy_status/../ER8300G2-X.cfg</span><br><span class="line">/userLogin.asp/../actionpolicy_status/../ER8300G2.cfg</span><br><span class="line">/userLogin.asp/../actionpolicy_status/../ER6300G2.cfg</span><br><span class="line">/userLogin.asp/../actionpolicy_status/../ER5200G2.cfg</span><br><span class="line">/userLogin.asp/../actionpolicy_status/../ER5200.cfg</span><br><span class="line">/userLogin.asp/../actionpolicy_status/../ER5100.cfg</span><br><span class="line">/userLogin.asp/../actionpolicy_status/../ER3260G2.cfg</span><br><span class="line">/userLogin.asp/../actionpolicy_status/../ER3260.cfg</span><br><span class="line">/userLogin.asp/../actionpolicy_status/../ER3200G2.cfg</span><br><span class="line">/userLogin.asp/../actionpolicy_status/../ER3200.cfg</span><br><span class="line">/userLogin.asp/../actionpolicy_status/../ER3108GW.cfg</span><br><span class="line">/userLogin.asp/../actionpolicy_status/../ER3108G.cfg</span><br><span class="line">/userLogin.asp/../actionpolicy_status/../ER3100G2.cfg</span><br><span class="line">/userLogin.asp/../actionpolicy_status/../ER3100.cfg</span><br><span class="line">/userLogin.asp/../actionpolicy_status/../ER2200G2.cfg</span><br></pre></td></tr></table></figure><h2 id="数据包"><a href="#数据包" class="headerlink" title="数据包"></a>数据包</h2><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br></pre></td><td class="code"><pre><span class="line">GET /ER3200G2.cfg HTTP/1.1</span><br><span class="line">Host: </span><br><span class="line">Upgrade-Insecure-Requests: 1</span><br><span class="line">User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/122.0.0.0 Safari/537.36</span><br><span class="line">Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7</span><br><span class="line">Accept-Encoding: gzip, deflate</span><br><span class="line">Accept-Language: zh-CN,zh;q=0.9</span><br><span class="line">If-Modified-Since: Tue Jan 20 22:33:08 1970</span><br></pre></td></tr></table></figure><h2 id="修复建议"><a href="#修复建议" class="headerlink" title="修复建议"></a>修复建议</h2><ol><li>不影响业务或功能的情况下删除或禁止访问泄露敏感信息页面。</li><li>在服务器端对相关敏感信息进行模糊化处理。</li><li>对服务器端返回的数据进行严格的检查，满足查询数据与页面显示数据一致。</li></ol>]]></content>
    
    
      
      
    <summary type="html">&lt;h2 id=&quot;描述&quot;&gt;&lt;a href=&quot;#描述&quot; class=&quot;headerlink&quot; title=&quot;描述&quot;&gt;&lt;/a&gt;描述&lt;/h2&gt;&lt;p&gt;H3C路由器多系列存在信息泄露漏洞，攻击者可以利用该漏洞获取备份文件中的管理员账户及密码等敏感信息&lt;/p&gt;
&lt;h2 id=&quot;查询语法&quot;&gt;&lt;a</summary>
      
    
    
    
    
    <category term="H3C" scheme="https://www.aurora0508.top/tags/H3C/"/>
    
  </entry>
  
  <entry>
    <title>Web逆向</title>
    <link href="https://www.aurora0508.top/posts/65e7e3be.html"/>
    <id>https://www.aurora0508.top/posts/65e7e3be.html</id>
    <published>2024-03-21T03:01:11.186Z</published>
    <updated>2024-03-21T08:22:07.211Z</updated>
    
    <content type="html"><![CDATA[<h2 id="Web逆向"><a href="#Web逆向" class="headerlink" title="Web逆向"></a>Web逆向</h2>]]></content>
    
    
      
      
    <summary type="html">&lt;h2 id=&quot;Web逆向&quot;&gt;&lt;a href=&quot;#Web逆向&quot; class=&quot;headerlink&quot; title=&quot;Web逆向&quot;&gt;&lt;/a&gt;Web逆向&lt;/h2&gt;</summary>
      
    
    
    
    
    <category term="逆向" scheme="https://www.aurora0508.top/tags/%E9%80%86%E5%90%91/"/>
    
  </entry>
  
  <entry>
    <title>win逆向</title>
    <link href="https://www.aurora0508.top/posts/77191e26.html"/>
    <id>https://www.aurora0508.top/posts/77191e26.html</id>
    <published>2024-03-21T03:00:47.329Z</published>
    <updated>2024-03-21T08:18:01.782Z</updated>
    
    <content type="html"><![CDATA[<p>写在前面：<br>逆向从入门到入狱</p><h2 id="win逆向"><a href="#win逆向" class="headerlink" title="win逆向"></a>win逆向</h2><p>工具包：<a href="https://pan.baidu.com/s/1adD0trfqKMNx_iZpECljWA?pwd=niwd#list/path=%2F">https://pan.baidu.com/s/1adD0trfqKMNx_iZpECljWA?pwd=niwd#list/path=%2F</a></p><h3 id="辨析架构"><a href="#辨析架构" class="headerlink" title="辨析架构"></a>辨析架构</h3><p>x32<br>x64<br><img src="image.png" alt="alt text"></p><h3 id="数据存放位置"><a href="#数据存放位置" class="headerlink" title="数据存放位置"></a>数据存放位置</h3><p>内存—-&gt;内存条—&gt;显卡（显存）<br><img src="image-1.png" alt="alt text"></p><h3 id="标题修改，汉化"><a href="#标题修改，汉化" class="headerlink" title="标题修改，汉化"></a>标题修改，汉化</h3><p><img src="image-2.png" alt="alt text"></p><h4 id="PE-OD修改标题（32位）"><a href="#PE-OD修改标题（32位）" class="headerlink" title="PE+OD修改标题（32位）"></a>PE+OD修改标题（32位）</h4><p>以御剑为例：<br><img src="image-3.png" alt="alt text"><br>将.exe加载到OD<br>左下角，内存窗口 搜索 鼠标右键 文本 查找 二进制字符串 二进制编辑 选中 复制到可执行文件 鼠标右键 保存文件<br><img src="image-4.png" alt="alt text"></p><h4 id="CE（搜地址）-OD（保存文件）（32位）"><a href="#CE（搜地址）-OD（保存文件）（32位）" class="headerlink" title="CE（搜地址）+OD（保存文件）（32位）"></a>CE（搜地址）+OD（保存文件）（32位）</h4><p>CE打开进程，调整数值类型为字符串，区分大小写，可写变成方块<br><img src="image-5.png" alt="alt text"><br>修改<br><img src="image-6.png" alt="alt text"><br>拿到地址值在OD中查找，左下角，右键，转到，表达式，输入，选中 复制到可执行文件 鼠标右键 保存文件<br><img src="image-7.png" alt="alt text"></p><h4 id="x64dbg（64位）"><a href="#x64dbg（64位）" class="headerlink" title="x64dbg（64位）"></a>x64dbg（64位）</h4><p><img src="image-8.png" alt="alt text"><br>cpu、内存布局、引用<br>在搜索结果中测试，创可贴，补丁，修补文件，保存<br><img src="image-9.png" alt="alt text"><br><img src="image-10.png" alt="alt text"><br><img src="image-11.png" alt="alt text"><br>二进制编辑<br><img src="image-12.png" alt="alt text"><br><img src="image-13.png" alt="alt text"></p>]]></content>
    
    
      
      
    <summary type="html">&lt;p&gt;写在前面：&lt;br&gt;逆向从入门到入狱&lt;/p&gt;
&lt;h2 id=&quot;win逆向&quot;&gt;&lt;a href=&quot;#win逆向&quot; class=&quot;headerlink&quot; title=&quot;win逆向&quot;&gt;&lt;/a&gt;win逆向&lt;/h2&gt;&lt;p&gt;工具包：&lt;a href=&quot;https://pan.baidu.co</summary>
      
    
    
    
    
    <category term="逆向" scheme="https://www.aurora0508.top/tags/%E9%80%86%E5%90%91/"/>
    
  </entry>
  
  <entry>
    <title>sql注入漏洞</title>
    <link href="https://www.aurora0508.top/posts/1c1d07d2.html"/>
    <id>https://www.aurora0508.top/posts/1c1d07d2.html</id>
    <published>2024-03-21T02:05:58.003Z</published>
    <updated>2024-03-21T02:34:49.628Z</updated>
    
    <content type="html"><![CDATA[<h1 id="SQL注入漏洞"><a href="#SQL注入漏洞" class="headerlink" title="SQL注入漏洞"></a>SQL注入漏洞</h1><h2 id="1-原理"><a href="#1-原理" class="headerlink" title="1.原理"></a>1.原理</h2><p>SQL注入是一种常见的安全漏洞，它允许攻击者通过在应用程序的输入字段中插入恶意的SQL代码来执行未经授权的数据库操作。SQL注入的原理是利用应用程序对用户输入数据的不正确处理，使得攻击者能够向数据库发送恶意的SQL查询，从而绕过应用程序的访问控制并访问、修改或删除数据库中的数据。</p><p>以下是SQL注入的一般工作原理：</p><ul><li>用户输入数据的不正确处理：应用程序未正确过滤或转义用户输入的数据，将用户输入直接拼接到SQL查询中，而不是使用参数化查询或其他安全的方式来处理输入数据。</li><li>构造恶意的SQL查询：攻击者利用应用程序的漏洞，向输入字段中插入恶意的SQL代码。这可以是通过表单输入、URL参数、Cookie等方式注入恶意代码。</li><li>SQL查询的执行：一旦恶意SQL代码被插入到查询中，应用程序会将整个SQL查询发送到数据库服务器执行，包括攻击者注入的恶意部分。</li><li>数据库执行恶意代码：数据库服务器执行了恶意注入的SQL代码，这可能导致数据库泄露敏感数据、修改数据、删除数据，甚至完全控制数据库服务器。</li><li>攻击者获取数据或控制：通过成功的SQL注入攻击，攻击者可以获取敏感数据，如用户凭证、个人信息，或者控制数据库服务器执行任意操作</li></ul><h2 id="SQL注入的诱因"><a href="#SQL注入的诱因" class="headerlink" title="SQL注入的诱因"></a>SQL注入的诱因</h2><p>特殊函数<br><figure class="highlight php"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br></pre></td><td class="code"><pre><span class="line"><span class="title function_ invoke__">addslashes</span>() <span class="comment"># 将单引号转义了，在单引号前面加了个\</span></span><br><span class="line"><span class="title function_ invoke__">htmlspecialchars</span>() <span class="comment"># 将特殊符号转换为html实体编码，处理xss漏洞的一个防御函数</span></span><br><span class="line"><span class="title function_ invoke__">str_replace</span>() <span class="comment">#  将单引号替换成\加上单引号</span></span><br><span class="line"><span class="title function_ invoke__">intval</span>() <span class="comment"># 将其中的字符给去掉</span></span><br><span class="line"><span class="title function_ invoke__">is_numeric</span>() </span><br><span class="line"><span class="title function_ invoke__">urldecode</span>()</span><br><span class="line"><span class="comment">// ,if(1=1,sleep(1),0)</span></span><br><span class="line"><span class="comment">// and(if(1=1,sleeep(1),0))</span></span><br><span class="line"><span class="comment">// BY id &#123;asc,if(1=1,sleep(1),1)&#125;;</span></span><br><span class="line"><span class="comment">// 预编译</span></span><br><span class="line"></span><br><span class="line"><span class="keyword">include_once</span>(<span class="string">&#x27;./common.php&#x27;</span>);</span><br><span class="line"></span><br><span class="line"><span class="keyword">try</span>&#123;</span><br><span class="line">    <span class="variable">$name</span> = <span class="variable">$_GET</span>[<span class="string">&#x27;name&#x27;</span>];</span><br><span class="line"></span><br><span class="line">    <span class="variable">$query</span> = <span class="string">&quot;SELECT name, age, email, country FROM user_details where name = ?;&quot;</span>;</span><br><span class="line">    <span class="keyword">echo</span> <span class="variable">$query</span>.<span class="string">&quot;&lt;br&gt;&quot;</span>;</span><br><span class="line">    <span class="comment">// </span></span><br><span class="line">    <span class="variable">$stmt</span> = <span class="variable">$conn</span>-&gt;<span class="title function_ invoke__">prepare</span>(<span class="variable">$query</span>); </span><br><span class="line">    <span class="variable">$stmt</span>-&gt;<span class="title function_ invoke__">bindValue</span>(<span class="string">&quot;name&quot;</span>, <span class="variable">$name</span>);</span><br><span class="line"></span><br><span class="line">    <span class="variable">$stmt</span>-&gt;<span class="title function_ invoke__">execute</span>();</span><br><span class="line">    <span class="variable">$stmt</span>-&gt;<span class="title function_ invoke__">bind_result</span>(<span class="variable">$name</span>, <span class="variable">$age</span>,<span class="variable">$email</span>,<span class="variable">$country</span>);</span><br><span class="line"></span><br><span class="line">    <span class="keyword">while</span> (<span class="variable">$stmt</span>-&gt;<span class="title function_ invoke__">fetch</span>())&#123;</span><br><span class="line">        <span class="keyword">echo</span> <span class="string">&quot;<span class="subst">$email</span>&quot;</span>.<span class="string">&quot;&lt;br&gt;&quot;</span>;</span><br><span class="line">    &#125;</span><br><span class="line"></span><br><span class="line">&#125; <span class="keyword">catch</span> (PDOException <span class="variable">$e</span>) &#123;</span><br><span class="line">    <span class="keyword">echo</span> <span class="variable">$e</span>-&gt;<span class="title function_ invoke__">getMessage</span>();</span><br><span class="line">&#125;</span><br><span class="line">-------------------------------------------------------------------------------</span><br><span class="line"><span class="variable">$name</span> = <span class="title function_ invoke__">addslashes</span>(<span class="variable">$_GET</span>[<span class="string">&#x27;name&#x27;</span>]);</span><br><span class="line"><span class="variable">$name</span>  = <span class="title function_ invoke__">urldecode</span>(<span class="variable">$name</span>);</span><br><span class="line"><span class="comment">// &#x27; ==&gt; %27 #单次url编码   因为浏览器会自动解码一次</span></span><br><span class="line">SELECT name, age, email, country FROM user_details where name = <span class="string">&#x27;&#123;一号%25%32%37 union select 1,2,user(),4 %23&#125;&#x27;</span>;</span><br></pre></td></tr></table></figure></p>]]></content>
    
    
      
      
    <summary type="html">&lt;h1 id=&quot;SQL注入漏洞&quot;&gt;&lt;a href=&quot;#SQL注入漏洞&quot; class=&quot;headerlink&quot; title=&quot;SQL注入漏洞&quot;&gt;&lt;/a&gt;SQL注入漏洞&lt;/h1&gt;&lt;h2 id=&quot;1-原理&quot;&gt;&lt;a href=&quot;#1-原理&quot; class=&quot;headerlink&quot; titl</summary>
      
    
    
    
    
    <category term="漏洞" scheme="https://www.aurora0508.top/tags/%E6%BC%8F%E6%B4%9E/"/>
    
  </entry>
  
  <entry>
    <title>木马病毒分析</title>
    <link href="https://www.aurora0508.top/posts/63d5a9.html"/>
    <id>https://www.aurora0508.top/posts/63d5a9.html</id>
    <published>2024-03-20T00:56:25.369Z</published>
    <updated>2024-03-20T08:44:21.299Z</updated>
    
    <content type="html"><![CDATA[<h1 id="木马病毒分析"><a href="#木马病毒分析" class="headerlink" title="木马病毒分析"></a>木马病毒分析</h1><h2 id="基本概念"><a href="#基本概念" class="headerlink" title="基本概念"></a>基本概念</h2><p>木马病毒是计算机黑客用于远程控制计算机的程序，将控制程序寄生于被控制的计算机系统中，里应外合，对被感染木马病毒的计算机实施操作。一般的木马病毒程序主要是寻找计算机后门，伺机窃取被控计算机中的密码和重要文件等。可以对被控计算机实施监控、资料修改等非法操作。木马病毒具有很强的隐蔽性，可以根据黑客意图突然发起攻击</p><p>计算机木马病毒是指隐藏在正常程序中的一段具有特殊功能的恶意代码，是具备破坏和删除文件、发送密码、记录键盘和攻击Dos等特殊功能的后门程序。</p><h3 id="原理"><a href="#原理" class="headerlink" title="原理"></a>原理</h3><p>木马病毒通常是基于计算机网络的，是基于客户端和服务端的通信、监控程序。客户端的程序用于黑客远程控制，可以发出控制命令，接收服务端传来的信息。服务端程序运行在被控计算机上，一般隐藏在被控计算机中，可以接收客户端发来的命令并执行，将客户端需要的信息发回，也就是常说的木马程序。</p><h3 id="种类"><a href="#种类" class="headerlink" title="种类"></a>种类</h3><ol><li>网游木马</li><li>网银木马</li><li>下载类</li><li>代理类</li><li>FTP木马</li><li><p>通讯软件类</p><ul><li>发送消息型</li><li>盗号型</li><li>传播自身型</li></ul></li><li><p>网页点击类</p></li></ol><h3 id="特征"><a href="#特征" class="headerlink" title="特征"></a>特征</h3><p>隐蔽性、欺骗性、顽固性、危害性</p><h3 id="传播方式"><a href="#传播方式" class="headerlink" title="传播方式"></a>传播方式</h3><p>木马病毒的传播方式比较多，主要有：<br>（1）利用下载进行传播，在下载的过程中进入程序，当下载完毕打开文件就将病毒植入到电脑中；<br>（2）利用系统漏洞进行传播，当计算机存在漏洞，就成为木马病毒攻击的对象；<br>（3）利用邮件进行传播，很多陌生邮件里面就掺杂了病毒种子，一旦邮件被打开，病毒就被激活；<br>（4）利用远程连接进行传播；<br>（5）利用网页进行传播，在浏览网页时会经常出现很多跳出来的页面，这种页面就是病毒驻扎的地方；<br>（6）利用蠕虫病毒进行传播等。</p><h3 id="伪装方式"><a href="#伪装方式" class="headerlink" title="伪装方式"></a>伪装方式</h3><p>修改图标、捆绑文件、出错显示、定制端口、自我销毁、木马更名</p><h3 id="木马防范"><a href="#木马防范" class="headerlink" title="木马防范"></a>木马防范</h3><p>检测和寻找木马隐藏的位置、防范端口、删除可疑程序、安装防火墙、健全网站和网络游戏的管理、防范意识</p><h2 id="云沙箱木马检测"><a href="#云沙箱木马检测" class="headerlink" title="云沙箱木马检测"></a>云沙箱木马检测</h2><h3 id="微步"><a href="#微步" class="headerlink" title="微步"></a>微步</h3><p><img src="image.png" alt="alt text"><br><img src="image-1.png" alt="alt text"><br>动态行为检测、威胁情报检测、多引擎检测、云文件检测、定制化检测，</p><h3 id="奇安信"><a href="#奇安信" class="headerlink" title="奇安信"></a>奇安信</h3><p><img src="image-2.png" alt="alt text"><br><img src="image-3.png" alt="alt text"></p><h2 id="样本分析"><a href="#样本分析" class="headerlink" title="样本分析"></a>样本分析</h2><p><a href="https://www.52pojie.cn/forum-32-2.html">https://www.52pojie.cn/forum-32-2.html</a></p><h3 id="msf生成的木马分析"><a href="#msf生成的木马分析" class="headerlink" title="msf生成的木马分析"></a>msf生成的木马分析</h3><p>样本信息：<br>文件: C:\ts4yqj4\1709112706.exe<br>大小: 194048 bytes<br>修改时间: 2024/03/20<br>MD5: b05eee61f528fe95b812edc6b9c89978<br>SHA1: bff4d76f63588b89c778f34c839b640b75aecc53<br>CRC32: 5016C0EE<br><img src="image-4.png" alt="alt text"><br>1.查壳<br>工具：detect it easy<br><img src="image-5.png" alt="alt text"><br>2.IDA进行分析<br>IDA下载地址：<a href="https://down.52pojie.cn/Tools/Disassemblers/IDA_Pro_v8.3_Portable.zip">https://down.52pojie.cn/Tools/Disassemblers/IDA_Pro_v8.3_Portable.zip</a></p><h3 id="逆向CS生成exe木马"><a href="#逆向CS生成exe木马" class="headerlink" title="逆向CS生成exe木马"></a>逆向CS生成exe木马</h3><p>cs生产后门<br><img src="image-6.png" alt="alt text"><br><img src="image-7.png" alt="alt text"><br>CS生成的exe其实是一个loder，也就是加载器，加载器加载里面的shellcode来运行主要功能，所以我们进行逆向分析的时候也分成两个步骤：外层loder分析和内层shellcode分析。、<br>1.外层loder分析<br>查壳<br><img src="image-8.png" alt="alt text"><br>无壳。接下来扔进IDA进行静态分析。<br><img src="image-9.png" alt="alt text"><br>main函数这里调用了两个函数之后调用了一个Sleep，跟进27F0发现没什么东西，我们直接看1840<br><img src="image-10.png" alt="alt text"></p>]]></content>
    
    
      
      
    <summary type="html">&lt;h1 id=&quot;木马病毒分析&quot;&gt;&lt;a href=&quot;#木马病毒分析&quot; class=&quot;headerlink&quot; title=&quot;木马病毒分析&quot;&gt;&lt;/a&gt;木马病毒分析&lt;/h1&gt;&lt;h2 id=&quot;基本概念&quot;&gt;&lt;a href=&quot;#基本概念&quot; class=&quot;headerlink&quot; title=&quot;基</summary>
      
    
    
    
    
    <category term="病毒" scheme="https://www.aurora0508.top/tags/%E7%97%85%E6%AF%92/"/>
    
  </entry>
  
  <entry>
    <title>app逆向</title>
    <link href="https://www.aurora0508.top/posts/fcd6e84e.html"/>
    <id>https://www.aurora0508.top/posts/fcd6e84e.html</id>
    <published>2024-03-17T16:00:00.000Z</published>
    <updated>2024-03-19T09:36:36.760Z</updated>
    
    <content type="html"><![CDATA[<p>什么是逆向：<a href="https://blog.csdn.net/eastmount/article/details/107591832">https://blog.csdn.net/eastmount/article/details/107591832</a></p><h1 id="app逆向"><a href="#app逆向" class="headerlink" title="app逆向"></a>app逆向</h1><h2 id="环境安装"><a href="#环境安装" class="headerlink" title="环境安装"></a>环境安装</h2><h3 id="Magisk"><a href="#Magisk" class="headerlink" title="Magisk"></a>Magisk</h3><p>安装包：<a href="https://www.123pan.com/s/6zyrVv-kxor3.html">https://www.123pan.com/s/6zyrVv-kxor3.html</a></p><p><img src="./image/c80bde6f334fc52665035b1c4dc8f57.png" alt="alt text"><br><img src="./image/3053df0761f510717c0874af5d3c636.png" alt="alt text"></p><p>Magisk 是一套用于定制 Android 的开源软件，支持高于 Android 5.0 的设备。</p><p>以下是一些功能亮点：</p><ul><li>MagiskSU：为应用程序提供 root 访问权限</li><li>Magisk 模块：通过安装模块修改只读分区</li><li>MagiskHide：从根检测 / 系统完整性检查中隐藏 Magisk(Shamiko)</li><li>MagiskBoot : 最完整的安卓启动镜像解包和重新打包工具</li></ul><h3 id="LSPosed"><a href="#LSPosed" class="headerlink" title="LSPosed"></a>LSPosed</h3><p>安装包<a href="https://www.123pan.com/s/6zyrVv-kxor3.html">https://www.123pan.com/s/6zyrVv-kxor3.html</a></p><p>1.模拟器打开电脑共享文件夹，将LSPosed拖进去，返回Masisk点击模块<br><img src="./image/image.png" alt="alt text"><br><img src="./image/image-1.png" alt="alt text"><br>2.安装模块，重启模拟器<br><img src="./image/image-2.png" alt="alt text"><br><img src="./image/image-3.png" alt="alt text"></p><h2 id="初识APK文件结构、双开、汉化、基础修"><a href="#初识APK文件结构、双开、汉化、基础修" class="headerlink" title="初识APK文件结构、双开、汉化、基础修"></a>初识APK文件结构、双开、汉化、基础修</h2><h3 id="文件结构"><a href="#文件结构" class="headerlink" title="文件结构"></a>文件结构</h3><p>apk 全称 Android Package，它相当于一个压缩文件，只要在电脑上将apk后缀改为zip即可解压。<br><img src="./image/image-4.png" alt="alt text"><br><img src="./image/image-5.png" alt="alt text"></p><h3 id="应用双开原理"><a href="#应用双开原理" class="headerlink" title="应用双开原理"></a>应用双开原理</h3><p>双开：简单来说，就是手机同时运行两个或多个相同的应用，例如同时运行两个微信<br><img src="./image/image-6.png" alt="alt text"></p><p>反编译工具MT：<br>下载地址：<a href="https://pan.baidu.com/s/1cFWTLn14jeWfpXxlx3syYw?pwd=nqu9#list/path=%2F">https://pan.baidu.com/s/1cFWTLn14jeWfpXxlx3syYw?pwd=nqu9#list/path=%2F</a><br>反编译工具NP：<br>下载地址：<a href="https://pan.quark.cn/s/b787f4b2430d#/list/share/4d0fc36179b44457901685bef40abb47-14663">https://pan.quark.cn/s/b787f4b2430d#/list/share/4d0fc36179b44457901685bef40abb47-14663</a><br><img src="./image/image-8.png" alt="alt text"><br><img src="./image/image-7.png" alt="alt text"></p><p>1.双开<br><img src="./image/image-9.png" alt="alt text"><br><img src="./image/image-10.png" alt="alt text"></p><p>通过修改包名达到双开<br><img src="./image/image-11.png" alt="alt text"><br><img src="./image/image-12.png" alt="alt text"><br><img src="./image/image-14.png" alt="alt text"><br><img src="./image/image-13.png" alt="alt text"></p><p>【VirtualAPP 双开系列08】如何实现多开 - UID<br><a href="https://blog.csdn.net/u014294681/article/details/116270479">https://blog.csdn.net/u014294681/article/details/116270479</a></p><h3 id="汉化"><a href="#汉化" class="headerlink" title="汉化"></a>汉化</h3><p><img src="./image/image-15.png" alt="alt text"></p><p>测试<br><img src="./image/image-16.png" alt="alt text"><br><img src="./image/image-17.png" alt="alt text"></p><h4 id="xml"><a href="#xml" class="headerlink" title="xml"></a>xml</h4><p>回到MT,查看</p><p><img src="./image/image-18.png" alt="alt text"></p><p>搜索，高级搜索</p><p><img src="./image/image-19.png" alt="alt text"><br><img src="./image/image-20.png" alt="alt text"><br><img src="./image/image-21.png" alt="alt text"></p><p>点击反编译</p><p><img src="./image/image-22.png" alt="alt text"><br><img src="./image/image-23.png" alt="alt text"></p><p>翻译后重新安装</p><p><img src="./image/image-24.png" alt="alt text"></p><p>保存修改后，签名会发生变化，导致安装不成功</p><p><img src="./image/image-25.png" alt="alt text"><br><img src="./image/image-26.png" alt="alt text"></p><p>关闭签名校验，还是不行，（这里需要核心破解）</p><p><img src="./image/image-27.png" alt="alt text"></p><p>卸载掉原来的app在安装</p><p><img src="./image/image-28.png" alt="alt text"><br><img src="./image/image-29.png" alt="alt text"></p><h4 id="Arsc"><a href="#Arsc" class="headerlink" title="Arsc"></a>Arsc</h4><p>使用开发者助手进行识别翻译</p><p><img src="./image/image-30.png" alt="alt text"><br><img src="./image/image-31.png" alt="alt text"></p><p>回到MT搜索</p><p><img src="./image/image-32.png" alt="alt text"><br><img src="./image/image-33.png" alt="alt text"></p><p>选择翻译模式<br><img src="./image/image-34.png" alt="alt text"><br>点第一个</p><p><img src="./image/image-35.png" alt="alt text"><br><img src="./image/image-36.png" alt="alt text"></p><p>修改</p><p><img src="./image/image-37.png" alt="alt text"><br><img src="./image/image-38.png" alt="alt text"><br><img src="./image/image-39.png" alt="alt text"></p><h3 id="dex"><a href="#dex" class="headerlink" title="dex"></a>dex</h3><p><img src="./image/image-40.png" alt="alt text"><br><img src="./image/image-41.png" alt="alt text"><br><img src="./image/image-42.png" alt="alt text"></p><p>搜索到后进行修改</p><p><img src="./image/image-43.png" alt="alt text"><br><img src="./image/image-44.png" alt="alt text"></p><p>保存并退出</p><p><img src="./image/image-45.png" alt="alt text"></p><p>安装启动</p><p><img src="./image/image-46.png" alt="alt text"></p><h2 id="AndroidManifest-xml"><a href="#AndroidManifest-xml" class="headerlink" title="AndroidManifest.xml"></a>AndroidManifest.xml</h2><p>AndroidManifest.xml文件是整个应用程序的信息描述文件，定义了应用程序中包含的Activity,Service,Content provider和BroadcastReceiver组件信息。每个应用程序在根目录下必须包含一个AndroidManifest.xml文件，且文件名不能修改。它描述了package中暴露的组件，他们各自的实现类，各种能被处理的数据和启动位置。</p><p><img src="image.png" alt="alt text"><br><img src="image-1.png" alt="alt text"><br><img src="image-2.png" alt="alt text"></p><p>使用NP修改图标，名字等</p><p><img src="image-3.png" alt="alt text"><br><img src="image-4.png" alt="alt text"></p><p>将图标复制到共享文件夹</p><p><img src="image-5.png" alt="alt text"><br><img src="image-6.png" alt="alt text"></p><p>修改</p><p><img src="image-7.png" alt="alt text"><br><img src="image-8.png" alt="alt text"></p><h2 id="smali，vip终结者"><a href="#smali，vip终结者" class="headerlink" title="smali，vip终结者"></a>smali，vip终结者</h2><p>1.了解JVM、Dalvik、ART<br>2.初识smali语法<br>3.修改smali</p><h3 id="工具"><a href="#工具" class="headerlink" title="工具"></a>工具</h3><h4 id="MT-NP"><a href="#MT-NP" class="headerlink" title="MT/NP"></a>MT/NP</h4><h4 id="jadx-gui"><a href="#jadx-gui" class="headerlink" title="jadx-gui"></a>jadx-gui</h4><ol><li><p>下载地址：<a href="https://download.fastgit.org/skylot/jadx/releases/download/v1.2.0/jadx-gui-1.2.0-with-jre-win.zip">https://download.fastgit.org/skylot/jadx/releases/download/v1.2.0/jadx-gui-1.2.0-with-jre-win.zip</a><br><img src="image-9.png" alt="alt text"><br><img src="image-10.png" alt="alt text"></p></li><li><p>打开.apk反编译<br><img src="image-11.png" alt="alt text"></p></li></ol><h4 id="核心破解"><a href="#核心破解" class="headerlink" title="核心破解"></a>核心破解</h4><ol><li>安装核心破解并激活<br><img src="image-12.png" alt="alt text"><br><img src="image-13.png" alt="alt text"></li><li>JVM、Dalvik、ART</li></ol><ul><li>JVM是JAVA虚拟机，运行JAVA字节码程序</li><li>Dalvik是Google专门为Android设计的一个虚拟机，Dalvik有专属的文件执行格式dex(Dalvik executable)</li><li>Art(Android Runtime)相当于Dalvik的升级版，本质与Dalvik无异</li></ul><ol><li>smali及其语法<br>smali是Dalvik的寄存器语言，smali代码是dex反编译而来的。<br><img src="image-17.png" alt="alt text"><br>数据类型对应<br><img src="image-18.png" alt="alt text"><br>常用指令<br><img src="image-19.png" alt="alt text"><br>修改方法：修改判断、强制跳转、修改寄存器的值<br><img src="image-20.png" alt="alt text"></li><li>寄存器<br>在smali里的所有操作都必须经过寄存器来进行:本地寄存器用v开头数字结尾的符号来表示，如v0、 v1、v2。 参数寄存器则使用p开头数字结尾的符号来表示，如p0、p1、p2。特别注意的是，p0不一定是函数中的第一个参数，在非static函数中，p0代指“this”，p1表示函数的第一个 参数，p2代表函数中的第二个参数。而在static函数中p0才对应第一个参数(因为Java的static方法中没有this方法)</li><li>demo测试<br>需要会员<br><img src="image-14.png" alt="alt text"><br>反编译，搜索关键词（大会员），这里需要注意如果识别不了就将中文编译成unicode码<br><img src="image-15.png" alt="alt text"><br><img src="image-16.png" alt="alt text"></li></ol><p>对于开发者而言，在打包应用时，最好对代码进行混淆，否则逆向人员轻而易举得进行Crack，或者说在写代码的时候就不要用isvip、getvip等易辨识的单词作为方法名</p>]]></content>
    
    
      
      
    <summary type="html">&lt;p&gt;什么是逆向：&lt;a href=&quot;https://blog.csdn.net/eastmount/article/details/107591832&quot;&gt;https://blog.csdn.net/eastmount/article/details/107591832&lt;/a&gt;&lt;/</summary>
      
    
    
    
    
    <category term="逆向" scheme="https://www.aurora0508.top/tags/%E9%80%86%E5%90%91/"/>
    
  </entry>
  
  <entry>
    <title>ES6学习</title>
    <link href="https://www.aurora0508.top/posts/89126f01.html"/>
    <id>https://www.aurora0508.top/posts/89126f01.html</id>
    <published>2022-10-01T16:00:00.000Z</published>
    <updated>2024-03-18T07:50:26.743Z</updated>
    
    <content type="html"><![CDATA[<h3 id="ECMAScript6-0-ES6"><a href="#ECMAScript6-0-ES6" class="headerlink" title="ECMAScript6.0 (ES6)"></a>ECMAScript6.0 (ES6)</h3><blockquote><p>ECMA（European computer manufactures association，欧洲计算机制造联合会）</p></blockquote><h4 id="var"><a href="#var" class="headerlink" title="var"></a>var</h4><ol><li>全局作用</li><li>变量提升</li></ol><h4 id="let"><a href="#let" class="headerlink" title="let"></a>let</h4><ol><li>变量不能重复声明</li><li>块级作用域</li><li>不存在变量提升</li><li>不影响作用域链</li></ol><h4 id="const"><a href="#const" class="headerlink" title="const"></a>const</h4><ol><li>声明常量（不能重复）</li><li>必须初始化</li><li>不能修改</li><li>块级作用域</li><li>常量数组可修改</li></ol><h4 id="解构赋值"><a href="#解构赋值" class="headerlink" title="解构赋值"></a>解构赋值</h4><blockquote><p>可以是数组，对象<br><figure class="highlight js"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">const</span> arr = [<span class="number">1</span>, <span class="number">2</span>, <span class="number">3</span>]</span><br><span class="line"><span class="keyword">let</span> [a, b, c] = arr</span><br><span class="line"><span class="variable language_">console</span>.<span class="title function_">log</span>(a, b);</span><br><span class="line"></span><br><span class="line"><span class="keyword">const</span> p = &#123;</span><br><span class="line">    <span class="attr">name</span>: <span class="string">&#x27;张三&#x27;</span>,</span><br><span class="line">    <span class="attr">age</span>: <span class="number">10</span>,</span><br><span class="line">    <span class="attr">run</span>: <span class="keyword">function</span> (<span class="params"></span>) &#123;</span><br><span class="line">        <span class="variable language_">console</span>.<span class="title function_">log</span>(<span class="string">&#x27;run run run&#x27;</span>);</span><br><span class="line">    &#125;</span><br><span class="line"></span><br><span class="line">&#125;</span><br><span class="line"><span class="keyword">let</span> &#123; name, age, run &#125; = p</span><br><span class="line"><span class="variable language_">console</span>.<span class="title function_">log</span>(name)</span><br><span class="line"><span class="title function_">run</span>();</span><br></pre></td></tr></table></figure></p></blockquote><h4 id="模板字符串"><a href="#模板字符串" class="headerlink" title="模板字符串"></a>模板字符串</h4><ol><li>``,反引号</li><li>可换行</li><li>变量拼接</li></ol><h4 id="对象的简化写法"><a href="#对象的简化写法" class="headerlink" title="对象的简化写法"></a>对象的简化写法</h4><figure class="highlight js"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">let</span> name = <span class="string">&#x27;张三&#x27;</span></span><br><span class="line"><span class="keyword">let</span> change = <span class="keyword">function</span> (<span class="params"></span>) &#123;</span><br><span class="line">    <span class="variable language_">console</span>.<span class="title function_">log</span>(<span class="string">&#x27;change change&#x27;</span>);</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line"><span class="keyword">let</span> obj = &#123;</span><br><span class="line">    name,</span><br><span class="line">    change,</span><br><span class="line">    <span class="title function_">running</span>(<span class="params"></span>) &#123;</span><br><span class="line">        <span class="variable language_">console</span>.<span class="title function_">log</span>(<span class="string">&#x27;running&#x27;</span>);</span><br><span class="line">    &#125;</span><br><span class="line">&#125;</span><br><span class="line"><span class="variable language_">console</span>.<span class="title function_">log</span>(obj);</span><br><span class="line">obj.<span class="title function_">change</span>()</span><br></pre></td></tr></table></figure><h4 id="箭头函数"><a href="#箭头函数" class="headerlink" title="箭头函数"></a>箭头函数</h4><ol><li>this的静态属性，永远指向windows</li><li>不能作为构造函数实例化对象</li><li>不能使用arguments参数列表</li><li>简写<figure class="highlight js"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment">// 简写</span></span><br><span class="line"><span class="keyword">function</span> <span class="title function_">pow</span>(<span class="params">n</span>)&#123;</span><br><span class="line">    <span class="keyword">return</span> n*n </span><br><span class="line">&#125;</span><br><span class="line"><span class="comment">// </span></span><br><span class="line"><span class="keyword">let</span> <span class="title function_">pow</span> = n =&gt; n * n</span><br><span class="line"><span class="variable language_">console</span>.<span class="title function_">log</span>(<span class="title function_">pow</span>(<span class="number">9</span>));</span><br></pre></td></tr></table></figure></li><li>适合于this无关的调用，如定时器，数组的方法回调</li><li>不适合与this有关的调用，事件回调，对象方法</li></ol><h4 id="rest参数"><a href="#rest参数" class="headerlink" title="rest参数"></a>rest参数</h4><p>必须要方法参数最后<br><figure class="highlight js"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br></pre></td><td class="code"><pre><span class="line"> <span class="keyword">function</span> <span class="title function_">fn1</span>(<span class="params"></span>) &#123;</span><br><span class="line">    <span class="variable language_">console</span>.<span class="title function_">log</span>(<span class="variable language_">arguments</span>);</span><br><span class="line">&#125;</span><br><span class="line"><span class="title function_">fn1</span>(<span class="number">12</span>, <span class="number">3</span>, <span class="number">3</span>, <span class="number">4</span>, <span class="number">5</span>)</span><br><span class="line"></span><br><span class="line"></span><br><span class="line"><span class="keyword">function</span> <span class="title function_">fn2</span>(<span class="params">...args</span>) &#123;</span><br><span class="line">    <span class="variable language_">console</span>.<span class="title function_">log</span>(args);</span><br><span class="line">&#125;</span><br><span class="line"><span class="title function_">fn2</span>(<span class="number">1</span>, <span class="number">2</span>, <span class="number">3</span>, <span class="number">4</span>)</span><br></pre></td></tr></table></figure></p><h4 id="扩展运算符-…"><a href="#扩展运算符-…" class="headerlink" title="扩展运算符[…]"></a>扩展运算符[…]</h4><ol><li>数组合并</li><li>数组克隆</li><li>将伪数组变为真正的数组<figure class="highlight js"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">let</span> arr = [<span class="number">1</span>, <span class="number">2</span>, <span class="number">3</span>, <span class="number">4</span>]</span><br><span class="line"><span class="keyword">function</span> <span class="title function_">fn</span>(<span class="params"></span>) &#123;</span><br><span class="line">    <span class="variable language_">console</span>.<span class="title function_">log</span>(<span class="variable language_">arguments</span>);</span><br><span class="line">&#125;</span><br><span class="line"><span class="title function_">fn</span>(arr)</span><br><span class="line"><span class="title function_">fn</span>(...arr)</span><br><span class="line"><span class="comment">// 数组合并</span></span><br><span class="line"><span class="keyword">let</span> arr1 = [<span class="string">&#x27;abc&#x27;</span>, <span class="string">&#x27;def&#x27;</span>, <span class="string">&#x27;ghi&#x27;</span>]</span><br><span class="line"><span class="keyword">let</span> arr2 = [<span class="string">&#x27;jkl&#x27;</span>, <span class="string">&#x27;mno&#x27;</span>]</span><br><span class="line"><span class="keyword">let</span> res1 = arr1.<span class="title function_">concat</span>(arr2)</span><br><span class="line"><span class="keyword">let</span> res2 = [...arr1, ...arr2]</span><br><span class="line"><span class="variable language_">console</span>.<span class="title function_">log</span>(res1);</span><br><span class="line"><span class="variable language_">console</span>.<span class="title function_">log</span>(res2);</span><br><span class="line"></span><br><span class="line"><span class="comment">// 数组克隆</span></span><br><span class="line"><span class="keyword">const</span> color = [<span class="string">&#x27;R&#x27;</span>, <span class="string">&#x27;G&#x27;</span>, <span class="string">&#x27;B&#x27;</span>, <span class="string">&#x27;A&#x27;</span>]</span><br><span class="line"><span class="keyword">const</span> c = [...color]</span><br><span class="line"><span class="variable language_">console</span>.<span class="title function_">log</span>(c);</span><br><span class="line"><span class="comment">// 将伪数组变为真正的数组</span></span><br><span class="line"><span class="keyword">let</span> divs = <span class="variable language_">document</span>.<span class="title function_">querySelectorAll</span>(<span class="string">&#x27;div&#x27;</span>)</span><br><span class="line"><span class="variable language_">console</span>.<span class="title function_">log</span>(divs);</span><br><span class="line"><span class="keyword">let</span> divArr = [...divs]</span><br><span class="line"><span class="variable language_">console</span>.<span class="title function_">log</span>(divArr);</span><br></pre></td></tr></table></figure></li></ol><h4 id="Symbol"><a href="#Symbol" class="headerlink" title="Symbol"></a>Symbol</h4><ol><li>表示独一无二的值，它是JavaScript中的第七种数据类型(其余数据类型：USONB—-&gt;you are so NB，对，就是你狠牛逼😄，相信聪明的你一定想出来了<code>u:undefined,s:string,o:object,n:null、number,b:boolean</code>)，是一种类似于字符串的数据类型</li><li>值唯一，解决命名冲突</li><li>不能与其他数据进行运算</li><li>定义的对象属性不能用for…in遍历，但是可以使用Reflect.ownKeys来获取对象的所有属性<br><a href="https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Symbol">MDN</a></li></ol><h4 id="迭代器"><a href="#迭代器" class="headerlink" title="迭代器"></a>迭代器</h4><p><code>for...of</code></p><ol><li>创建一个指针对象，指向当前数据结构的起始位置</li><li>第一次调用next方法指针自动指向数据结构的第一个成员</li><li>接下来不断调用next方法，指针一直后移，直到指向最后一个成员</li><li>每调用next方法返回一个包含value和done属性对象 </li></ol><figure class="highlight js"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">let</span> arr = [<span class="number">1</span>, <span class="number">2</span>, <span class="number">3</span>, <span class="number">4</span>]</span><br><span class="line"></span><br><span class="line"><span class="keyword">for</span> (<span class="keyword">let</span> item <span class="keyword">of</span> arr) &#123;</span><br><span class="line">    <span class="variable language_">console</span>.<span class="title function_">log</span>(item);</span><br><span class="line">&#125;</span><br><span class="line"><span class="keyword">let</span> iter = arr[<span class="title class_">Symbol</span>.<span class="property">iterator</span>]()</span><br><span class="line"><span class="variable language_">console</span>.<span class="title function_">log</span>(iter.<span class="title function_">next</span>());</span><br><span class="line"><span class="variable language_">console</span>.<span class="title function_">log</span>(iter.<span class="title function_">next</span>());</span><br><span class="line"><span class="variable language_">console</span>.<span class="title function_">log</span>(iter.<span class="title function_">next</span>());</span><br><span class="line"><span class="variable language_">console</span>.<span class="title function_">log</span>(iter.<span class="title function_">next</span>());</span><br><span class="line"><span class="variable language_">console</span>.<span class="title function_">log</span>(iter.<span class="title function_">next</span>());</span><br></pre></td></tr></table></figure><ol><li>对象不可遍历，给对象加迭代器</li></ol><figure class="highlight js"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">let</span> obj = &#123;</span><br><span class="line">        <span class="attr">name</span>: <span class="string">&#x27;一班&#x27;</span>,</span><br><span class="line">        <span class="attr">stus</span>: [<span class="number">1</span>, <span class="number">2</span>, <span class="number">3</span>, <span class="number">34</span>, <span class="number">4</span>, <span class="number">5</span>],</span><br><span class="line">        <span class="comment">// 因为对象没用迭代器，所以造一个</span></span><br><span class="line">        [<span class="title class_">Symbol</span>.<span class="property">iterator</span>]() &#123;</span><br><span class="line">            <span class="keyword">let</span> index = <span class="number">0</span></span><br><span class="line">            <span class="keyword">let</span> _this = <span class="variable language_">this</span></span><br><span class="line">            <span class="keyword">return</span> &#123;</span><br><span class="line">                <span class="attr">next</span>: <span class="keyword">function</span> (<span class="params"></span>) &#123;</span><br><span class="line">                    <span class="keyword">if</span> (index &lt; _this.<span class="property">stus</span>.<span class="property">length</span>) &#123;</span><br><span class="line">                        index++</span><br><span class="line">                        <span class="keyword">return</span> &#123; <span class="attr">value</span>: _this.<span class="property">stus</span>[index], <span class="attr">done</span>: <span class="literal">false</span> &#125;</span><br><span class="line">                    &#125; <span class="keyword">else</span> &#123;</span><br><span class="line">                        <span class="keyword">return</span> &#123; <span class="attr">value</span>: <span class="literal">undefined</span>, <span class="attr">done</span>: <span class="literal">true</span> &#125;</span><br><span class="line">                    &#125;</span><br><span class="line">                &#125;</span><br><span class="line">            &#125;</span><br><span class="line"></span><br><span class="line">        &#125;</span><br><span class="line">    &#125;</span><br><span class="line">    <span class="comment">// 遍历对象中的数组</span></span><br><span class="line">    <span class="keyword">for</span> (<span class="keyword">let</span> v <span class="keyword">of</span> obj) &#123;</span><br><span class="line">        <span class="variable language_">console</span>.<span class="title function_">log</span>(v);</span><br><span class="line">    &#125;</span><br></pre></td></tr></table></figure><h4 id="生成器"><a href="#生成器" class="headerlink" title="生成器"></a>生成器</h4><blockquote><p>一个特殊的函数</p></blockquote><figure class="highlight js"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment">// 一个特殊的函数</span></span><br><span class="line"><span class="comment">// 异步编程 ajax,node,fs</span></span><br><span class="line"><span class="comment">/* function* gen() &#123;</span></span><br><span class="line"><span class="comment">    console.log(&#x27;哈哈哈&#x27;);</span></span><br><span class="line"><span class="comment">&#125;</span></span><br><span class="line"><span class="comment">console.log(gen().next()); */</span></span><br><span class="line"><span class="keyword">function</span>* <span class="title function_">gen</span>(<span class="params"></span>) &#123;</span><br><span class="line">    <span class="comment">// yield函数代码的分割符</span></span><br><span class="line">    <span class="keyword">yield</span> <span class="number">1</span></span><br><span class="line">    <span class="variable language_">console</span>.<span class="title function_">log</span>(<span class="number">111</span>);</span><br><span class="line"></span><br><span class="line">    <span class="keyword">yield</span> <span class="number">2</span></span><br><span class="line">    <span class="variable language_">console</span>.<span class="title function_">log</span>(<span class="number">222</span>);</span><br><span class="line"></span><br><span class="line">    <span class="keyword">yield</span> <span class="number">3</span></span><br><span class="line">    <span class="variable language_">console</span>.<span class="title function_">log</span>(<span class="number">333</span>);</span><br><span class="line">&#125;</span><br><span class="line"><span class="keyword">let</span> iter = <span class="title function_">gen</span>()</span><br><span class="line"><span class="variable language_">console</span>.<span class="title function_">log</span>(iter.<span class="title function_">next</span>());</span><br><span class="line"><span class="variable language_">console</span>.<span class="title function_">log</span>(iter.<span class="title function_">next</span>());</span><br><span class="line"><span class="variable language_">console</span>.<span class="title function_">log</span>(iter.<span class="title function_">next</span>());</span><br><span class="line"><span class="variable language_">console</span>.<span class="title function_">log</span>(iter.<span class="title function_">next</span>());</span><br><span class="line"></span><br><span class="line"><span class="keyword">for</span> (<span class="keyword">let</span> v <span class="keyword">of</span> <span class="title function_">gen</span>()) &#123;</span><br><span class="line">    <span class="variable language_">console</span>.<span class="title function_">log</span>(v);</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><h4 id="Promise"><a href="#Promise" class="headerlink" title="Promise"></a>Promise</h4><h4 id="set"><a href="#set" class="headerlink" title="set"></a>set</h4><p><code>let s=new Set()</code></p><ol><li>元素个数：<code>size</code></li><li>添加：<code>add()</code></li><li>删除：<code>delete()</code></li><li>检测：<code>xxx.has(&#39;xxx&#39;)</code></li><li>清空：<code>xxx.clear()</code></li><li>遍历：<code>for(let v of xxx)</code></li><li>数组去重，交集，并集，差集</li></ol><h4 id="map"><a href="#map" class="headerlink" title="map"></a>map</h4><p><code>let m=new Map()</code></p><ol><li>m.set(key,value)  key可以是对象，value可以是数组或者函数</li><li>m.get(key)</li><li>m.size</li><li>m.delete(key)</li><li>m.clear()</li><li>for(let v of m){}</li></ol><h4 id="class"><a href="#class" class="headerlink" title="class"></a>class</h4><p><a href="http://javascript.ruanyifeng.com/oop/prototype.html#toc4">http://javascript.ruanyifeng.com/oop/prototype.html#toc4</a></p><ol><li>静态成员或静态方法用static修饰</li><li>继承通过super()关键字</li><li>gettter()和setter()</li></ol><h4 id="数值"><a href="#数值" class="headerlink" title="数值"></a>数值</h4><ol><li>精度问题（0.1+0.2）</li><li>进制（0b,0o,0d,0x）</li><li>isNaN()</li><li>parseInt()</li><li>parseFloat()</li><li>Number.isInteger()</li><li>Math.trunc() 抹掉小数</li><li>Math.sign()  放回 1 0 -1 分别表示1 0 -1</li></ol><h4 id="对象方法"><a href="#对象方法" class="headerlink" title="对象方法"></a>对象方法</h4><ol><li>Object.is(val1,val2) 判断两个值是否完全相等</li><li>Object.assign()  对象的合并</li><li>Object.setPrototypeOf()  设置原型对象</li></ol><h4 id="模块化"><a href="#模块化" class="headerlink" title="模块化"></a>模块化</h4><ol><li>防止命名冲突</li><li>代码复用</li><li>高维护性</li></ol><blockquote><p>export</p></blockquote><p>对外接口<br><figure class="highlight js"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br></pre></td><td class="code"><pre><span class="line"></span><br><span class="line"><span class="comment">// 分别暴露(m1.js)</span></span><br><span class="line"><span class="keyword">export</span> <span class="keyword">const</span> name=<span class="string">&#x27;张三&#x27;</span></span><br><span class="line"></span><br><span class="line"><span class="keyword">export</span> <span class="keyword">function</span> <span class="title function_">test</span>(<span class="params"></span>)&#123;</span><br><span class="line">    <span class="variable language_">console</span>.<span class="title function_">log</span>(<span class="string">&#x27;test模块化&#x27;</span>);</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line"><span class="comment">// 同一暴露(m2.js)</span></span><br><span class="line"><span class="keyword">const</span> name = <span class="string">&#x27;张三&#x27;</span></span><br><span class="line"></span><br><span class="line"><span class="keyword">function</span> <span class="title function_">test</span>(<span class="params"></span>) &#123;</span><br><span class="line">    <span class="variable language_">console</span>.<span class="title function_">log</span>(<span class="string">&#x27;test模块化&#x27;</span>);</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line"><span class="keyword">export</span> &#123;</span><br><span class="line">    name,</span><br><span class="line">    test</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line"><span class="comment">// 默认暴露(m3.js)</span></span><br><span class="line"><span class="keyword">export</span> <span class="keyword">default</span> &#123;</span><br><span class="line">    <span class="attr">school</span>: <span class="string">&#x27;清华&#x27;</span>,</span><br><span class="line">    <span class="attr">change</span>: <span class="keyword">function</span> (<span class="params"></span>) &#123;</span><br><span class="line">        <span class="variable language_">console</span>.<span class="title function_">log</span>(<span class="string">&#x27;chage&#x27;</span>);</span><br><span class="line">    &#125;</span><br><span class="line">&#125;</span><br><span class="line"></span><br></pre></td></tr></table></figure></p><blockquote><p>import</p></blockquote><figure class="highlight js"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment">// 通用导入（导入全部）</span></span><br><span class="line"><span class="keyword">import</span> * <span class="keyword">as</span> m1 <span class="keyword">from</span> <span class="string">&#x27;m1.js&#x27;</span></span><br><span class="line"><span class="comment">// 机构赋值（分别暴露）</span></span><br><span class="line"><span class="keyword">import</span> &#123; name, test &#125; <span class="keyword">from</span> <span class="string">&#x27;m2.js&#x27;</span></span><br><span class="line"><span class="keyword">import</span> &#123;<span class="keyword">default</span> <span class="keyword">as</span> m3&#125; <span class="keyword">from</span> <span class="string">&#x27;m3.js&#x27;</span></span><br><span class="line"><span class="comment">// 简便形式</span></span><br><span class="line"><span class="keyword">import</span> m3 <span class="keyword">from</span> <span class="string">&#x27;m3.js&#x27;</span></span><br></pre></td></tr></table></figure><h4 id="ES7新特性"><a href="#ES7新特性" class="headerlink" title="ES7新特性"></a>ES7新特性</h4><ol><li>判断数组中有没有子项 <ul><li><code>indexOf</code>:返回索引，存在返回第一次出现的索引，不存在返回-1</li><li><code>includes</code>:true or false</li></ul></li></ol><h4 id="async"><a href="#async" class="headerlink" title="async"></a>async</h4><ol><li>返回结果为pormise对象</li><li>返回结果为promise<figure class="highlight js"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">async</span> <span class="keyword">function</span> <span class="title function_">test</span>(<span class="params"></span>)&#123;</span><br><span class="line">    </span><br><span class="line">    <span class="comment">/* return 111;</span></span><br><span class="line"><span class="comment">    return &#x27;xxx&#x27;;</span></span><br><span class="line"><span class="comment">    throw new Error(&#x27;xxx&#x27;) */</span></span><br><span class="line"></span><br><span class="line">    <span class="keyword">return</span> <span class="keyword">new</span> <span class="title class_">Promise</span>((resolve,reject)&#123;</span><br><span class="line">        <span class="title function_">resolve</span>(<span class="string">&#x27;成功&#x27;</span>)</span><br><span class="line">        <span class="comment">// reject(&#x27;失败&#x27;)</span></span><br><span class="line">    &#125;)</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure></li></ol><h4 id="await"><a href="#await" class="headerlink" title="await"></a>await</h4><ol><li>必须和async一起使用</li><li>await右侧表达式一般为pormise对象</li><li>await返回成功后的值</li><li>失败就会抛出异常，需用try…catch捕获</li></ol><h4 id="async和await结合读取文件"><a href="#async和await结合读取文件" class="headerlink" title="async和await结合读取文件"></a>async和await结合读取文件</h4><figure class="highlight js"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br><span class="line">41</span><br><span class="line">42</span><br><span class="line">43</span><br><span class="line">44</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">const</span> fs = <span class="built_in">require</span>(<span class="string">&#x27;fs&#x27;</span>)</span><br><span class="line"><span class="keyword">const</span> path = <span class="built_in">require</span>(<span class="string">&#x27;path&#x27;</span>)</span><br><span class="line"></span><br><span class="line"><span class="keyword">function</span> <span class="title function_">readFile01</span>(<span class="params"></span>) &#123;</span><br><span class="line"></span><br><span class="line">    <span class="keyword">return</span> <span class="keyword">new</span> <span class="title class_">Promise</span>(<span class="function">(<span class="params">resolve, reject</span>) =&gt;</span> &#123;</span><br><span class="line">        fs.<span class="title function_">readFile</span>(path.<span class="title function_">join</span>(__dirname, <span class="string">&#x27;../files/001.txt&#x27;</span>), <span class="string">&#x27;utf-8&#x27;</span>, <span class="function">(<span class="params">err, data</span>) =&gt;</span> &#123;</span><br><span class="line">            <span class="keyword">if</span> (err) <span class="title function_">reject</span>(err)</span><br><span class="line">            <span class="title function_">resolve</span>(data)</span><br><span class="line">        &#125;)</span><br><span class="line">    &#125;)</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line"><span class="keyword">function</span> <span class="title function_">readFile02</span>(<span class="params"></span>) &#123;</span><br><span class="line"></span><br><span class="line">    <span class="keyword">return</span> <span class="keyword">new</span> <span class="title class_">Promise</span>(<span class="function">(<span class="params">resolve, reject</span>) =&gt;</span> &#123;</span><br><span class="line">        fs.<span class="title function_">readFile</span>(path.<span class="title function_">join</span>(__dirname, <span class="string">&#x27;../files/002.txt&#x27;</span>), <span class="string">&#x27;utf-8&#x27;</span>, <span class="function">(<span class="params">err, data</span>) =&gt;</span> &#123;</span><br><span class="line">            <span class="keyword">if</span> (err) <span class="title function_">reject</span>(err)</span><br><span class="line">            <span class="title function_">resolve</span>(data)</span><br><span class="line">        &#125;)</span><br><span class="line">    &#125;)</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line"><span class="keyword">function</span> <span class="title function_">readFile03</span>(<span class="params"></span>) &#123;</span><br><span class="line"></span><br><span class="line">    <span class="keyword">return</span> <span class="keyword">new</span> <span class="title class_">Promise</span>(<span class="function">(<span class="params">resolve, reject</span>) =&gt;</span> &#123;</span><br><span class="line">        fs.<span class="title function_">readFile</span>(path.<span class="title function_">join</span>(__dirname, <span class="string">&#x27;../files/003.txt&#x27;</span>), <span class="string">&#x27;utf-8&#x27;</span>, <span class="function">(<span class="params">err, data</span>) =&gt;</span> &#123;</span><br><span class="line">            <span class="keyword">if</span> (err) <span class="title function_">reject</span>(err)</span><br><span class="line">            <span class="title function_">resolve</span>(data)</span><br><span class="line">        &#125;)</span><br><span class="line">    &#125;)</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line"><span class="keyword">async</span> <span class="keyword">function</span> <span class="title function_">getData</span>(<span class="params"></span>) &#123;</span><br><span class="line">    <span class="keyword">let</span> data1 = <span class="keyword">await</span> <span class="title function_">readFile01</span>()</span><br><span class="line">    <span class="keyword">let</span> data2 = <span class="keyword">await</span> <span class="title function_">readFile02</span>()</span><br><span class="line">    <span class="keyword">let</span> data3 = <span class="keyword">await</span> <span class="title function_">readFile03</span>()</span><br><span class="line">    <span class="variable language_">console</span>.<span class="title function_">log</span>(data1);</span><br><span class="line">    <span class="variable language_">console</span>.<span class="title function_">log</span>(data2);</span><br><span class="line">    <span class="variable language_">console</span>.<span class="title function_">log</span>(data3);</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line"><span class="title function_">getData</span>()</span><br><span class="line"></span><br></pre></td></tr></table></figure>]]></content>
    
    
    <summary type="html">ES6，ECMAScript,ES11语法</summary>
    
    
    
    
    <category term="ES6" scheme="https://www.aurora0508.top/tags/ES6/"/>
    
  </entry>
  
  <entry>
    <title>Vue2复习</title>
    <link href="https://www.aurora0508.top/posts/a324b661.html"/>
    <id>https://www.aurora0508.top/posts/a324b661.html</id>
    <published>2022-09-19T16:00:00.000Z</published>
    <updated>2024-03-18T07:50:26.751Z</updated>
    
    <content type="html"><![CDATA[<h3 id="JavaScript基础知识"><a href="#JavaScript基础知识" class="headerlink" title="JavaScript基础知识"></a>JavaScript基础知识</h3><ul><li>ES6语法规范</li><li>ES6模块化</li><li>包管理</li><li>原型、原型链</li><li>数组</li><li>axios</li><li>promise</li></ul><h3 id="组件化开发"><a href="#组件化开发" class="headerlink" title="组件化开发"></a>组件化开发</h3><blockquote><p>数据—-&gt;虚拟DOM—&gt;真实DOM</p></blockquote><h3 id="Vue模板语法"><a href="#Vue模板语法" class="headerlink" title="Vue模板语法"></a>Vue模板语法</h3><ol><li>插值：<code>&#123;&#123;&#125;&#125;</code></li><li><p>指令: </p><ul><li><code>v-bind</code>，单向绑定</li><li><code>v-mode</code>，用于表单，双向绑定</li><li></li></ul></li><li><p>el和data的两种写法</p><figure class="highlight js"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment">// el</span></span><br><span class="line"><span class="keyword">new</span> <span class="title class_">Vue</span>(&#123;</span><br><span class="line">    <span class="attr">el</span>: <span class="string">&quot;#app&quot;</span>,</span><br><span class="line">    <span class="attr">data</span>: &#123;</span><br><span class="line">        <span class="attr">value</span>: <span class="number">123</span></span><br><span class="line">    &#125;</span><br><span class="line">&#125;)</span><br><span class="line"></span><br><span class="line"><span class="keyword">new</span> <span class="title class_">Vue</span>(&#123;</span><br><span class="line">    <span class="attr">data</span>: &#123;</span><br><span class="line">        <span class="attr">value</span>: <span class="number">123</span></span><br><span class="line">    &#125;</span><br><span class="line">&#125;).$mount(<span class="string">&#x27;#app&#x27;</span>)</span><br><span class="line"></span><br><span class="line"><span class="comment">//data</span></span><br><span class="line"><span class="keyword">new</span> <span class="title class_">Vue</span>(&#123;</span><br><span class="line">    <span class="attr">el</span>: <span class="string">&quot;#app&quot;</span>,</span><br><span class="line">    <span class="attr">data</span>: &#123;</span><br><span class="line">        <span class="attr">value</span>: <span class="number">123</span></span><br><span class="line">    &#125;</span><br><span class="line">&#125;)</span><br><span class="line"></span><br><span class="line"><span class="keyword">new</span> <span class="title class_">Vue</span>(&#123;</span><br><span class="line">    <span class="attr">el</span>: <span class="string">&quot;#app&quot;</span>,</span><br><span class="line">    <span class="title function_">data</span>(<span class="params"></span>)&#123;</span><br><span class="line">        <span class="keyword">return</span>&#123;</span><br><span class="line">            <span class="attr">value</span>:<span class="number">123</span></span><br><span class="line">        &#125;</span><br><span class="line">    &#125;</span><br><span class="line">&#125;)</span><br></pre></td></tr></table></figure></li></ol><h3 id="MVVM"><a href="#MVVM" class="headerlink" title="MVVM"></a>MVVM</h3><p>View ViewModel model<br>DOM   </p><h3 id="数据代理"><a href="#数据代理" class="headerlink" title="数据代理"></a>数据代理</h3><blockquote><p>通过一个对象代理对另一个对象中属性的操作</p></blockquote><figure class="highlight js"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br></pre></td><td class="code"><pre><span class="line">&lt;script&gt;</span><br><span class="line">       <span class="keyword">let</span> num = <span class="number">10</span></span><br><span class="line">       <span class="keyword">let</span> obj = &#123;</span><br><span class="line">           <span class="attr">name</span>: <span class="string">&#x27;lang&#x27;</span>,</span><br><span class="line">           <span class="attr">add</span>: <span class="string">&#x27;兰州&#x27;</span></span><br><span class="line">       &#125;</span><br><span class="line">       <span class="title class_">Object</span>.<span class="title function_">defineProperty</span>(obj, <span class="string">&#x27;age&#x27;</span>, &#123;</span><br><span class="line">           <span class="comment">// value: 18,</span></span><br><span class="line">           <span class="comment">// enumerable: true, // 控制属性可枚举，可遍历</span></span><br><span class="line">           <span class="comment">// writable: true, // 可修</span></span><br><span class="line">           <span class="comment">// configurable: true, // 控制是否可被删除</span></span><br><span class="line">           <span class="title function_">get</span>(<span class="params"></span>) &#123;</span><br><span class="line">               <span class="keyword">return</span> num</span><br><span class="line">           &#125;,</span><br><span class="line">           <span class="title function_">set</span>(<span class="params">value</span>) &#123;</span><br><span class="line">               num = value</span><br><span class="line">           &#125;</span><br><span class="line"></span><br><span class="line"></span><br><span class="line">       &#125;)</span><br><span class="line">       <span class="variable language_">console</span>.<span class="title function_">log</span>(<span class="title class_">Object</span>.<span class="title function_">keys</span>(obj));</span><br><span class="line"></span><br><span class="line">       <span class="comment">/* for (key in obj) &#123;</span></span><br><span class="line"><span class="comment">           console.log(obj[key]);</span></span><br><span class="line"><span class="comment">       &#125; */</span></span><br><span class="line">       <span class="variable language_">console</span>.<span class="title function_">log</span>(obj);</span><br><span class="line">   &lt;/script&gt;</span><br><span class="line"></span><br></pre></td></tr></table></figure><h3 id="事件"><a href="#事件" class="headerlink" title="事件"></a>事件</h3><p>@click<br>@scroll 滚动条<br>@wheel  滚轮  @wheel.passive 阻止回调函数，让默认行为先执行</p><h4 id="事件修饰符"><a href="#事件修饰符" class="headerlink" title="事件修饰符"></a>事件修饰符</h4><blockquote><p>prevent stop once capture self passive</p></blockquote><h4 id="键盘事件"><a href="#键盘事件" class="headerlink" title="键盘事件"></a>键盘事件</h4><blockquote><p>enter deleter esc space tab up down left right配和keyup<br>ctrl alt shift meta配合keydown</p></blockquote><figure class="highlight html"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line"><span class="tag">&lt;<span class="name">input</span> <span class="attr">type</span>=<span class="string">&quot;text&quot;</span> <span class="attr">placeholder</span>=<span class="string">&quot;请输入&quot;</span> <span class="attr">name</span>=<span class="string">&quot;&quot;</span> <span class="attr">id</span>=<span class="string">&quot;&quot;</span> @<span class="attr">keyup.right</span>=<span class="string">&quot;showInfo&quot;</span>&gt;</span></span><br></pre></td></tr></table></figure><h3 id="计算属性"><a href="#计算属性" class="headerlink" title="计算属性"></a>计算属性</h3><blockquote><p>可被缓存、直接读取相当于属性</p></blockquote><h3 id="监视属性"><a href="#监视属性" class="headerlink" title="监视属性"></a>监视属性</h3><figure class="highlight js"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br></pre></td><td class="code"><pre><span class="line">&lt;script&gt;</span><br><span class="line"> <span class="attr">watch</span>: &#123;</span><br><span class="line">    <span class="attr">info</span>: &#123;</span><br><span class="line">        <span class="attr">immediate</span>: <span class="literal">true</span>, <span class="comment">// 立即执行</span></span><br><span class="line">        <span class="attr">deep</span>:<span class="literal">true</span>,<span class="comment">// 深度监视</span></span><br><span class="line">        <span class="title function_">handler</span>(<span class="params">newVal, oldVal</span>) &#123;</span><br><span class="line">            <span class="variable language_">console</span>.<span class="title function_">log</span>(newVal, oldVal);</span><br><span class="line">        &#125;</span><br><span class="line">    &#125;</span><br><span class="line">&#125;</span><br><span class="line">&lt;/script&gt;</span><br></pre></td></tr></table></figure><h3 id="Style样式"><a href="#Style样式" class="headerlink" title="Style样式"></a>Style样式</h3><ol><li>class<br><code>:class=&quot;xxx&quot;</code>,xxx可以是字符串，对象数组</li><li>style<br><code>:style=&quot;&#123;&#125;&quot;</code>,<code>:style=&quot;[]&quot;</code></li></ol><h3 id="条件渲染"><a href="#条件渲染" class="headerlink" title="条件渲染"></a>条件渲染</h3><p><code>v-if</code>: 销毁和创建,文档中不存在<br><code>v-show</code>:调整display:none/block，还存在于文档中<br><strong>变化频繁使用v-show</strong></p><blockquote><p>template 不会被渲染，但是能配合<code>v-if</code></p></blockquote><figure class="highlight html"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><span class="line"><span class="tag">&lt;<span class="name">template</span> <span class="attr">v-if</span>=<span class="string">&quot;&quot;</span>&gt;</span></span><br><span class="line">    <span class="tag">&lt;<span class="name">h2</span>&gt;</span><span class="tag">&lt;/<span class="name">h2</span>&gt;</span></span><br><span class="line">    <span class="tag">&lt;<span class="name">h2</span>&gt;</span><span class="tag">&lt;/<span class="name">h2</span>&gt;</span></span><br><span class="line">    <span class="tag">&lt;<span class="name">h2</span>&gt;</span><span class="tag">&lt;/<span class="name">h2</span>&gt;</span></span><br><span class="line"><span class="tag">&lt;/<span class="name">template</span>&gt;</span></span><br></pre></td></tr></table></figure><h3 id="v-for-key"><a href="#v-for-key" class="headerlink" title="v-for key"></a>v-for key</h3><p>可遍历数组，对象，字符串，范围（0-10）</p><blockquote><p>如果值是展示类表则可以用index作为:key<br>如果用输入框，删除等操作，则必须要用唯一标识</p></blockquote><h3 id="响应式-Vue-set"><a href="#响应式-Vue-set" class="headerlink" title="响应式 Vue.set()"></a>响应式 Vue.set()</h3><p>Vue会监视data中所有层的数据</p><p>vue2的响应式是通过object.defineproperty实现的，JavaScript对象传入vue实例时，vue会遍历对象的所有property，并通过object.defineproperty把这些property转化为getter和setter，数据发生变化时，就会触发视图的更新；不过这种方式有点缺陷，就是不能监测到对象属性的添加和删除，因此需要用vue.set()来添加和删除。并且也不能监听数组的变化后添加的数据做响应式</p><blockquote><p>vue.set(target,key,val)方法target不能是Vue实例，或者Vue实例对象的根数据对象<br><code>Vue.set(target,key,val)</code>,<code>vm.$set(target,key,val)</code></p></blockquote><h3 id="过滤器"><a href="#过滤器" class="headerlink" title="过滤器"></a>过滤器</h3><p>不会改变原始数据<br><figure class="highlight js"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br></pre></td><td class="code"><pre><span class="line"></span><br><span class="line"><span class="comment">// 局部</span></span><br><span class="line"><span class="attr">filters</span>: &#123;</span><br><span class="line">    <span class="title function_">timeFormat</span>(<span class="params">value, str = <span class="string">&#x27;YYYY-MM-DD HH:mm:ss&#x27;</span></span>) &#123;</span><br><span class="line">        <span class="keyword">return</span> <span class="title function_">dayjs</span>(value).<span class="title function_">format</span>(str)</span><br><span class="line">    &#125;,</span><br><span class="line">    <span class="comment">/* mySlice(value) &#123;</span></span><br><span class="line"><span class="comment">        // 1970 - 07 - 27 10: 33: 59</span></span><br><span class="line"><span class="comment">        return value.slice(0, 4)</span></span><br><span class="line"><span class="comment">    &#125; */</span></span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line"><span class="comment">// 全局过滤器</span></span><br><span class="line"></span><br><span class="line"><span class="title class_">Vue</span>.<span class="title function_">filter</span>(<span class="string">&#x27;mySlice&#x27;</span>, <span class="keyword">function</span> (<span class="params">value</span>) &#123;</span><br><span class="line">    <span class="keyword">return</span> value.<span class="title function_">slice</span>(<span class="number">0</span>, <span class="number">4</span>)</span><br><span class="line">&#125;)</span><br></pre></td></tr></table></figure></p><h3 id="指令梳理"><a href="#指令梳理" class="headerlink" title="指令梳理"></a>指令梳理</h3><blockquote><p>v-bind<br>v-model<br>v-for<br>v-if&gt;<br>v-else-if<br>v-else<br>v-show</p></blockquote><h4 id="v-text"><a href="#v-text" class="headerlink" title="v-text"></a>v-text</h4><p>会替换标签中的所有内容</p><h4 id="v-html"><a href="#v-html" class="headerlink" title="v-html"></a>v-html</h4><ol><li>可识别html结构</li><li>在网站上动态渲染html是非常危险的，容易造成XSS攻击</li><li>不要在用户提交的内容上渲染</li></ol><h4 id="v-clock"><a href="#v-clock" class="headerlink" title="v-clock"></a>v-clock</h4><figure class="highlight html"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br></pre></td><td class="code"><pre><span class="line"><span class="tag">&lt;<span class="name">style</span>&gt;</span><span class="language-css"></span></span><br><span class="line"><span class="language-css">    <span class="selector-attr">[v-clock]</span>&#123;</span></span><br><span class="line"><span class="language-css">        <span class="attribute">display</span>:none</span></span><br><span class="line"><span class="language-css">    &#125;</span></span><br><span class="line"><span class="language-css"></span><span class="tag">&lt;/<span class="name">style</span>&gt;</span></span><br><span class="line"><span class="tag">&lt;<span class="name">h2</span> <span class="attr">v-clock</span>&gt;</span>&#123;&#123;name&#125;&#125;<span class="tag">&lt;/<span class="name">h2</span>&gt;</span></span><br></pre></td></tr></table></figure><h4 id="v-once"><a href="#v-once" class="headerlink" title="v-once"></a>v-once</h4><p>初次动态渲染后就会成为静态内容了</p><h4 id="v-pre"><a href="#v-pre" class="headerlink" title="v-pre"></a>v-pre</h4><p>跳过器所在结点编译过程，跳过没有指令语法的标签</p><h3 id="自定义指令"><a href="#自定义指令" class="headerlink" title="自定义指令"></a>自定义指令</h3><figure class="highlight js"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br></pre></td><td class="code"><pre><span class="line"><span class="attr">directives</span>:&#123;</span><br><span class="line">   <span class="title function_">big</span>(<span class="params">element, bingding</span>) &#123;</span><br><span class="line">       <span class="variable language_">console</span>.<span class="title function_">log</span>(element)</span><br><span class="line">       <span class="variable language_">console</span>.<span class="title function_">log</span>(bingding);</span><br><span class="line">       element.<span class="property">innerHTML</span> = bingding.<span class="property">value</span> * <span class="number">10</span></span><br><span class="line">   &#125;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><blockquote><p>big函数何时会被调用？指令与元素成功绑定时，指令所在的模板被重新解析时</p></blockquote><figure class="highlight html"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br></pre></td><td class="code"><pre><span class="line"><span class="tag">&lt;<span class="name">input</span> <span class="attr">type</span>=<span class="string">&quot;text&quot;</span> <span class="attr">name</span>=<span class="string">&quot;&quot;</span> <span class="attr">id</span>=<span class="string">&quot;&quot;</span> <span class="attr">v-fbind</span>=<span class="string">&quot;num&quot;</span>&gt;</span></span><br><span class="line"></span><br><span class="line"><span class="tag">&lt;<span class="name">script</span>&gt;</span><span class="language-javascript"></span></span><br><span class="line"><span class="language-javascript">    <span class="keyword">new</span> <span class="title class_">Vue</span>(&#123;</span></span><br><span class="line"><span class="language-javascript">        <span class="attr">el</span>:<span class="string">&#x27;xxx&#x27;</span>,</span></span><br><span class="line"><span class="language-javascript">        <span class="attr">data</span>:&#123;&#125;,</span></span><br><span class="line"><span class="language-javascript">        <span class="attr">fbind</span>: &#123;</span></span><br><span class="line"><span class="language-javascript">            <span class="comment">// 指令与元素成功绑定(页面一上来)</span></span></span><br><span class="line"><span class="language-javascript">            <span class="title function_">bind</span>(<span class="params">element, binding</span>) &#123;</span></span><br><span class="line"><span class="language-javascript">                element.<span class="property">value</span> = binding.<span class="property">value</span></span></span><br><span class="line"><span class="language-javascript">                <span class="variable language_">console</span>.<span class="title function_">log</span>(<span class="string">&#x27;bind&#x27;</span>);</span></span><br><span class="line"><span class="language-javascript">            &#125;,</span></span><br><span class="line"><span class="language-javascript">            <span class="comment">// 指令所在页面被插入页面</span></span></span><br><span class="line"><span class="language-javascript">            <span class="title function_">inserted</span>(<span class="params">element, binding</span>) &#123;</span></span><br><span class="line"><span class="language-javascript">                element.<span class="title function_">focus</span>()</span></span><br><span class="line"><span class="language-javascript">                <span class="variable language_">console</span>.<span class="title function_">log</span>(<span class="string">&#x27;inserted&#x27;</span>);</span></span><br><span class="line"><span class="language-javascript">            &#125;,</span></span><br><span class="line"><span class="language-javascript">            <span class="comment">// 指令所在模板被重新解析</span></span></span><br><span class="line"><span class="language-javascript">            <span class="title function_">update</span>(<span class="params">element, binding</span>) &#123;</span></span><br><span class="line"><span class="language-javascript">                element.<span class="property">value</span> = binding.<span class="property">value</span></span></span><br><span class="line"><span class="language-javascript">                <span class="variable language_">console</span>.<span class="title function_">log</span>(<span class="string">&#x27;updated&#x27;</span>);</span></span><br><span class="line"><span class="language-javascript">            &#125;,</span></span><br><span class="line"><span class="language-javascript">        &#125;</span></span><br><span class="line"><span class="language-javascript">    &#125;)</span></span><br><span class="line"><span class="language-javascript"></span><span class="tag">&lt;/<span class="name">script</span>&gt;</span></span><br><span class="line"></span><br></pre></td></tr></table></figure><p>注意：自定义指令里面的this指向windows</p><h4 id="全局指令"><a href="#全局指令" class="headerlink" title="全局指令"></a>全局指令</h4><figure class="highlight html"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br></pre></td><td class="code"><pre><span class="line"><span class="tag">&lt;<span class="name">p</span>&gt;</span><span class="tag">&lt;<span class="name">span</span> <span class="attr">v-big</span>=<span class="string">&quot;num&quot;</span>&gt;</span><span class="tag">&lt;/<span class="name">span</span>&gt;</span><span class="tag">&lt;/<span class="name">p</span>&gt;</span></span><br><span class="line"></span><br><span class="line"><span class="tag">&lt;<span class="name">script</span>&gt;</span><span class="language-javascript"></span></span><br><span class="line"><span class="language-javascript">    <span class="title class_">Vue</span>.<span class="title function_">directive</span>(<span class="string">&#x27;big&#x27;</span>, <span class="keyword">function</span> (<span class="params">element, binding</span>) &#123;</span></span><br><span class="line"><span class="language-javascript">        element.<span class="property">innerHTML</span> = binding.<span class="property">value</span> * <span class="number">10</span></span></span><br><span class="line"><span class="language-javascript">    &#125;)</span></span><br><span class="line"><span class="language-javascript">    <span class="keyword">new</span> <span class="title class_">Vue</span>(&#123;</span></span><br><span class="line"><span class="language-javascript">        <span class="attr">el</span>:<span class="string">&#x27;xxx&#x27;</span>,</span></span><br><span class="line"><span class="language-javascript">        <span class="attr">data</span>:&#123;&#125;,</span></span><br><span class="line"><span class="language-javascript">    &#125;)</span></span><br><span class="line"><span class="language-javascript"></span><span class="tag">&lt;/<span class="name">script</span>&gt;</span></span><br></pre></td></tr></table></figure><h3 id="生命周期"><a href="#生命周期" class="headerlink" title="生命周期"></a>生命周期</h3><p><img src="https://vuejs.bootcss.com/images/lifecycle.png" alt="生命周期"></p><figure class="highlight html"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br><span class="line">41</span><br><span class="line">42</span><br><span class="line">43</span><br><span class="line">44</span><br><span class="line">45</span><br><span class="line">46</span><br><span class="line">47</span><br><span class="line">48</span><br><span class="line">49</span><br><span class="line">50</span><br><span class="line">51</span><br><span class="line">52</span><br><span class="line">53</span><br></pre></td><td class="code"><pre><span class="line"><span class="tag">&lt;<span class="name">script</span>&gt;</span><span class="language-javascript"></span></span><br><span class="line"><span class="language-javascript"><span class="keyword">new</span> <span class="title class_">Vue</span>(&#123;</span></span><br><span class="line"><span class="language-javascript">        <span class="attr">el</span>: <span class="string">&quot;#app&quot;</span>,</span></span><br><span class="line"><span class="language-javascript">        <span class="attr">data</span>: &#123;</span></span><br><span class="line"><span class="language-javascript">            <span class="attr">num</span>: <span class="number">1</span>,</span></span><br><span class="line"><span class="language-javascript"></span></span><br><span class="line"><span class="language-javascript">        &#125;,</span></span><br><span class="line"><span class="language-javascript">        <span class="attr">methods</span>: &#123;</span></span><br><span class="line"><span class="language-javascript">            <span class="title function_">add</span>(<span class="params"></span>) &#123;</span></span><br><span class="line"><span class="language-javascript">                <span class="variable language_">console</span>.<span class="title function_">log</span>(<span class="string">&#x27;add&#x27;</span>);</span></span><br><span class="line"><span class="language-javascript">                <span class="variable language_">this</span>.<span class="property">num</span>++</span></span><br><span class="line"><span class="language-javascript">            &#125;,</span></span><br><span class="line"><span class="language-javascript">            <span class="title function_">bye</span>(<span class="params"></span>) &#123;</span></span><br><span class="line"><span class="language-javascript">                <span class="variable language_">console</span>.<span class="title function_">log</span>(<span class="string">&#x27;bye&#x27;</span>);</span></span><br><span class="line"><span class="language-javascript">                <span class="variable language_">this</span>.$destroy()</span></span><br><span class="line"><span class="language-javascript">            &#125;</span></span><br><span class="line"><span class="language-javascript">        &#125;,</span></span><br><span class="line"><span class="language-javascript">        <span class="attr">watch</span>: &#123;</span></span><br><span class="line"><span class="language-javascript">            <span class="title function_">num</span>(<span class="params"></span>) &#123;</span></span><br><span class="line"><span class="language-javascript">                <span class="variable language_">console</span>.<span class="title function_">log</span>(<span class="string">&#x27;num变了&#x27;</span>);</span></span><br><span class="line"><span class="language-javascript">            &#125;</span></span><br><span class="line"><span class="language-javascript">        &#125;,</span></span><br><span class="line"><span class="language-javascript"></span></span><br><span class="line"><span class="language-javascript">        <span class="title function_">beforeCreate</span>(<span class="params"></span>) &#123;</span></span><br><span class="line"><span class="language-javascript">            <span class="variable language_">console</span>.<span class="title function_">log</span>(<span class="string">&#x27;beforeCreate&#x27;</span>, <span class="string">&#x27;num&#x27;</span>, <span class="variable language_">this</span>.<span class="property">num</span>);</span></span><br><span class="line"><span class="language-javascript">        &#125;,</span></span><br><span class="line"><span class="language-javascript">        <span class="title function_">created</span>(<span class="params"></span>) &#123;</span></span><br><span class="line"><span class="language-javascript">            <span class="variable language_">console</span>.<span class="title function_">log</span>(<span class="string">&quot;created&quot;</span>, <span class="string">&#x27;num&#x27;</span>, <span class="variable language_">this</span>.<span class="property">num</span>);</span></span><br><span class="line"><span class="language-javascript">        &#125;,</span></span><br><span class="line"><span class="language-javascript">        <span class="title function_">beforeMount</span>(<span class="params"></span>) &#123;</span></span><br><span class="line"><span class="language-javascript">            <span class="variable language_">console</span>.<span class="title function_">log</span>(<span class="string">&#x27;beforeMount&#x27;</span>, <span class="string">&quot;num&quot;</span>, <span class="variable language_">this</span>.<span class="property">num</span>);</span></span><br><span class="line"><span class="language-javascript">        &#125;,</span></span><br><span class="line"><span class="language-javascript">        <span class="title function_">mounted</span>(<span class="params"></span>) &#123;</span></span><br><span class="line"><span class="language-javascript">            <span class="variable language_">console</span>.<span class="title function_">log</span>(<span class="string">&#x27;mounted&#x27;</span>, <span class="string">&quot;num&quot;</span>, <span class="variable language_">this</span>.<span class="property">num</span>);</span></span><br><span class="line"><span class="language-javascript">        &#125;,</span></span><br><span class="line"><span class="language-javascript">        <span class="title function_">beforeUpdate</span>(<span class="params"></span>) &#123;</span></span><br><span class="line"><span class="language-javascript">            <span class="variable language_">console</span>.<span class="title function_">log</span>(<span class="variable language_">this</span>);</span></span><br><span class="line"><span class="language-javascript">            <span class="variable language_">console</span>.<span class="title function_">log</span>(<span class="string">&#x27;beforeUpdate，更新数据，不更新dom&#x27;</span>);</span></span><br><span class="line"><span class="language-javascript">        &#125;,</span></span><br><span class="line"><span class="language-javascript">        <span class="title function_">updated</span>(<span class="params"></span>) &#123;</span></span><br><span class="line"><span class="language-javascript">            <span class="variable language_">console</span>.<span class="title function_">log</span>(<span class="variable language_">this</span>);</span></span><br><span class="line"><span class="language-javascript">            <span class="variable language_">console</span>.<span class="title function_">log</span>(<span class="string">&#x27;updated,更新数据和dom&#x27;</span>);</span></span><br><span class="line"><span class="language-javascript">        &#125;,</span></span><br><span class="line"><span class="language-javascript">        <span class="title function_">beforeDestroy</span>(<span class="params"></span>) &#123;</span></span><br><span class="line"><span class="language-javascript">            <span class="variable language_">this</span>.<span class="title function_">add</span>() <span class="comment">// 可调用，但不可执行</span></span></span><br><span class="line"><span class="language-javascript">            <span class="variable language_">console</span>.<span class="title function_">log</span>(<span class="string">&#x27;beforeDestroy&#x27;</span>, <span class="string">&#x27;num&#x27;</span>, <span class="variable language_">this</span>.<span class="property">num</span>);</span></span><br><span class="line"><span class="language-javascript">        &#125;,</span></span><br><span class="line"><span class="language-javascript">        <span class="title function_">destroyed</span>(<span class="params"></span>) &#123;</span></span><br><span class="line"><span class="language-javascript">            <span class="variable language_">console</span>.<span class="title function_">log</span>(<span class="string">&#x27;destroyed&#x27;</span>, <span class="string">&#x27;num&#x27;</span>, <span class="variable language_">this</span>.<span class="property">num</span>);</span></span><br><span class="line"><span class="language-javascript">        &#125;,</span></span><br><span class="line"><span class="language-javascript"></span></span><br><span class="line"><span class="language-javascript">    &#125;)</span></span><br><span class="line"><span class="language-javascript"></span><span class="tag">&lt;/<span class="name">script</span>&gt;</span></span><br></pre></td></tr></table></figure><blockquote><p>常用生命周期钩子</p></blockquote><ol><li>mounted:发送ajax请求、启动定时器、绑定自定义事件、订阅消息</li><li><p>beforeDestroy: 清除定时器、解绑自定义事件、取消订阅【收尾工作】</p></li><li><p>关于销毁vue实例</p><ul><li>销毁后借助vue开发者工具看不到任何消息</li><li>销毁后自定义事件会失效，但原生dom事件依然存在</li><li>一般不会再 beforeDestroy 操作数据，因为即便操作数据，也不会触发更新流程</li></ul></li></ol><h3 id="组件化"><a href="#组件化" class="headerlink" title="组件化"></a>组件化</h3><h4 id="非单页面组件"><a href="#非单页面组件" class="headerlink" title="非单页面组件"></a>非单页面组件</h4><blockquote><p>使用Vue.extend(options)创建组件<br>data必须写为函数——-避免组件被复用时，数据存在引用关系<br>使用template可配置组件的结构</p></blockquote><figure class="highlight html"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br><span class="line">41</span><br><span class="line">42</span><br><span class="line">43</span><br><span class="line">44</span><br><span class="line">45</span><br><span class="line">46</span><br><span class="line">47</span><br><span class="line">48</span><br><span class="line">49</span><br><span class="line">50</span><br><span class="line">51</span><br><span class="line">52</span><br><span class="line">53</span><br><span class="line">54</span><br><span class="line">55</span><br><span class="line">56</span><br><span class="line">57</span><br><span class="line">58</span><br><span class="line">59</span><br><span class="line">60</span><br><span class="line">61</span><br><span class="line">62</span><br><span class="line">63</span><br><span class="line">64</span><br><span class="line">65</span><br><span class="line">66</span><br><span class="line">67</span><br><span class="line">68</span><br><span class="line">69</span><br><span class="line">70</span><br><span class="line">71</span><br><span class="line">72</span><br><span class="line">73</span><br><span class="line">74</span><br><span class="line">75</span><br><span class="line">76</span><br><span class="line">77</span><br><span class="line">78</span><br><span class="line">79</span><br></pre></td><td class="code"><pre><span class="line"><span class="tag">&lt;<span class="name">body</span>&gt;</span></span><br><span class="line">    <span class="tag">&lt;<span class="name">div</span> <span class="attr">id</span>=<span class="string">&quot;app&quot;</span>&gt;</span></span><br><span class="line">        <span class="comment">&lt;!--3. 引用组件 --&gt;</span></span><br><span class="line">        <span class="tag">&lt;<span class="name">hello</span>&gt;</span><span class="tag">&lt;/<span class="name">hello</span>&gt;</span></span><br><span class="line">        <span class="tag">&lt;<span class="name">school</span>&gt;</span><span class="tag">&lt;/<span class="name">school</span>&gt;</span></span><br><span class="line">        <span class="tag">&lt;<span class="name">hr</span>&gt;</span></span><br><span class="line">        <span class="tag">&lt;<span class="name">student</span>&gt;</span><span class="tag">&lt;/<span class="name">student</span>&gt;</span></span><br><span class="line">        <span class="tag">&lt;<span class="name">hr</span>&gt;</span></span><br><span class="line">        <span class="tag">&lt;<span class="name">student</span>&gt;</span><span class="tag">&lt;/<span class="name">student</span>&gt;</span></span><br><span class="line">        <span class="tag">&lt;<span class="name">hr</span>&gt;</span></span><br><span class="line">    <span class="tag">&lt;/<span class="name">div</span>&gt;</span></span><br><span class="line">    <span class="tag">&lt;<span class="name">div</span> <span class="attr">id</span>=<span class="string">&quot;app2&quot;</span>&gt;</span></span><br><span class="line">        <span class="tag">&lt;<span class="name">hello</span>&gt;</span><span class="tag">&lt;/<span class="name">hello</span>&gt;</span></span><br><span class="line">    <span class="tag">&lt;/<span class="name">div</span>&gt;</span></span><br><span class="line"></span><br><span class="line"></span><br><span class="line">    <span class="tag">&lt;<span class="name">script</span> <span class="attr">src</span>=<span class="string">&quot;../../../js/vue.js&quot;</span>&gt;</span><span class="tag">&lt;/<span class="name">script</span>&gt;</span></span><br><span class="line">    <span class="tag">&lt;<span class="name">script</span>&gt;</span><span class="language-handlebars"><span class="language-xml"></span></span></span><br><span class="line"><span class="language-xml"><span class="language-handlebars">        // 1.创建组件</span></span></span><br><span class="line"><span class="language-xml"><span class="language-handlebars">        const school = Vue.extend(&#123;</span></span></span><br><span class="line"><span class="language-xml"><span class="language-handlebars">            template: `</span></span></span><br><span class="line"><span class="language-xml"><span class="language-handlebars">            <span class="tag">&lt;<span class="name">div</span>&gt;</span></span></span></span><br><span class="line"><span class="language-xml"><span class="language-handlebars">                <span class="tag">&lt;<span class="name">h3</span>&gt;</span>schoolname:</span><span class="template-variable">&#123;&#123;<span class="name">name</span>&#125;&#125;</span><span class="language-xml"><span class="tag">&lt;/<span class="name">h3</span>&gt;</span></span></span></span><br><span class="line"><span class="language-xml"><span class="language-handlebars">                <span class="tag">&lt;<span class="name">h3</span>&gt;</span>address:</span><span class="template-variable">&#123;&#123;<span class="name">addr</span>&#125;&#125;</span><span class="language-xml"><span class="tag">&lt;/<span class="name">h3</span>&gt;</span></span></span></span><br><span class="line"><span class="language-xml"><span class="language-handlebars">            <span class="tag">&lt;/<span class="name">div</span>&gt;</span></span></span></span><br><span class="line"><span class="language-xml"><span class="language-handlebars">            </span></span></span><br><span class="line"><span class="language-xml"><span class="language-handlebars">            `,</span></span></span><br><span class="line"><span class="language-xml"><span class="language-handlebars">            data() &#123;</span></span></span><br><span class="line"><span class="language-xml"><span class="language-handlebars">                return &#123;</span></span></span><br><span class="line"><span class="language-xml"><span class="language-handlebars">                    name: &#x27;清华&#x27;,</span></span></span><br><span class="line"><span class="language-xml"><span class="language-handlebars">                    addr: &#x27;北京&#x27;</span></span></span><br><span class="line"><span class="language-xml"><span class="language-handlebars">                &#125;</span></span></span><br><span class="line"><span class="language-xml"><span class="language-handlebars">            &#125;</span></span></span><br><span class="line"><span class="language-xml"><span class="language-handlebars">        &#125;)</span></span></span><br><span class="line"><span class="language-xml"><span class="language-handlebars"></span></span></span><br><span class="line"><span class="language-xml"><span class="language-handlebars">        const student = Vue.extend(&#123;</span></span></span><br><span class="line"><span class="language-xml"><span class="language-handlebars">            template: `</span></span></span><br><span class="line"><span class="language-xml"><span class="language-handlebars">                <span class="tag">&lt;<span class="name">div</span>&gt;</span></span></span></span><br><span class="line"><span class="language-xml"><span class="language-handlebars">                    <span class="tag">&lt;<span class="name">h3</span>&gt;</span>name:</span><span class="template-variable">&#123;&#123;<span class="name">name</span>&#125;&#125;</span><span class="language-xml"><span class="tag">&lt;/<span class="name">h3</span>&gt;</span></span></span></span><br><span class="line"><span class="language-xml"><span class="language-handlebars">                    <span class="tag">&lt;<span class="name">h3</span>&gt;</span>address:</span><span class="template-variable">&#123;&#123;<span class="name">age</span>&#125;&#125;</span><span class="language-xml"><span class="tag">&lt;/<span class="name">h3</span>&gt;</span></span></span></span><br><span class="line"><span class="language-xml"><span class="language-handlebars">                <span class="tag">&lt;/<span class="name">div</span>&gt;</span></span></span></span><br><span class="line"><span class="language-xml"><span class="language-handlebars">            `,</span></span></span><br><span class="line"><span class="language-xml"><span class="language-handlebars">            data() &#123;</span></span></span><br><span class="line"><span class="language-xml"><span class="language-handlebars">                return &#123;</span></span></span><br><span class="line"><span class="language-xml"><span class="language-handlebars">                    name: &#x27;张三&#x27;,</span></span></span><br><span class="line"><span class="language-xml"><span class="language-handlebars">                    age: 19</span></span></span><br><span class="line"><span class="language-xml"><span class="language-handlebars">                &#125;</span></span></span><br><span class="line"><span class="language-xml"><span class="language-handlebars">            &#125;</span></span></span><br><span class="line"><span class="language-xml"><span class="language-handlebars">        &#125;)</span></span></span><br><span class="line"><span class="language-xml"><span class="language-handlebars"></span></span></span><br><span class="line"><span class="language-xml"><span class="language-handlebars">        const hello = Vue.extend(&#123;</span></span></span><br><span class="line"><span class="language-xml"><span class="language-handlebars">            template: `</span></span></span><br><span class="line"><span class="language-xml"><span class="language-handlebars">                <span class="tag">&lt;<span class="name">div</span>&gt;</span></span></span></span><br><span class="line"><span class="language-xml"><span class="language-handlebars">                    <span class="tag">&lt;<span class="name">h1</span>&gt;</span>hello,</span><span class="template-variable">&#123;&#123;<span class="name">name</span>&#125;&#125;</span><span class="language-xml"><span class="tag">&lt;/<span class="name">h1</span>&gt;</span></span></span></span><br><span class="line"><span class="language-xml"><span class="language-handlebars">                <span class="tag">&lt;/<span class="name">div</span>&gt;</span></span></span></span><br><span class="line"><span class="language-xml"><span class="language-handlebars">            `,</span></span></span><br><span class="line"><span class="language-xml"><span class="language-handlebars">            data() &#123;</span></span></span><br><span class="line"><span class="language-xml"><span class="language-handlebars">                return &#123;</span></span></span><br><span class="line"><span class="language-xml"><span class="language-handlebars">                    name: &#x27;Tom&#x27;</span></span></span><br><span class="line"><span class="language-xml"><span class="language-handlebars">                &#125;</span></span></span><br><span class="line"><span class="language-xml"><span class="language-handlebars">            &#125;,</span></span></span><br><span class="line"><span class="language-xml"><span class="language-handlebars">        &#125;)</span></span></span><br><span class="line"><span class="language-xml"><span class="language-handlebars"></span></span></span><br><span class="line"><span class="language-xml"><span class="language-handlebars">        // 将hello注册为全局组件</span></span></span><br><span class="line"><span class="language-xml"><span class="language-handlebars">        Vue.component(&#x27;hello&#x27;, hello)</span></span></span><br><span class="line"><span class="language-xml"><span class="language-handlebars">        new Vue(&#123;</span></span></span><br><span class="line"><span class="language-xml"><span class="language-handlebars">            el: &#x27;#app&#x27;,</span></span></span><br><span class="line"><span class="language-xml"><span class="language-handlebars">            // 2.注册组件</span></span></span><br><span class="line"><span class="language-xml"><span class="language-handlebars">            components: &#123;</span></span></span><br><span class="line"><span class="language-xml"><span class="language-handlebars">                school,</span></span></span><br><span class="line"><span class="language-xml"><span class="language-handlebars">                student</span></span></span><br><span class="line"><span class="language-xml"><span class="language-handlebars">            &#125;</span></span></span><br><span class="line"><span class="language-xml"><span class="language-handlebars">        &#125;)</span></span></span><br><span class="line"><span class="language-xml"><span class="language-handlebars"></span></span></span><br><span class="line"><span class="language-xml"><span class="language-handlebars">        new Vue(&#123;</span></span></span><br><span class="line"><span class="language-xml"><span class="language-handlebars">            el: &#x27;#app2&#x27;</span></span></span><br><span class="line"><span class="language-xml"><span class="language-handlebars">        &#125;)</span></span></span><br><span class="line"><span class="language-xml"><span class="language-handlebars">    </span></span><span class="tag">&lt;/<span class="name">script</span>&gt;</span></span><br><span class="line"><span class="tag">&lt;/<span class="name">body</span>&gt;</span></span><br></pre></td></tr></table></figure><div class="tip warning"><ol><li>组件的命名：如MySchool—-&gt;my-school,(MySchool需在vue-cli中使用)</li><li>在html中的写法<my-school>&lt;/my-school&gt;,&lt;/my-school&gt;</li></ol></div><h4 id="组件的嵌套"><a href="#组件的嵌套" class="headerlink" title="组件的嵌套"></a>组件的嵌套</h4><h4 id="VueComponent"><a href="#VueComponent" class="headerlink" title="VueComponent"></a>VueComponent</h4><ol><li>组件中的this指向VueComponent实例对象</li><li>new Vue(options)中的this指向Vue实例对象</li></ol><h4 id="内置关系"><a href="#内置关系" class="headerlink" title="内置关系"></a>内置关系</h4><figure class="highlight html"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br></pre></td><td class="code"><pre><span class="line"><span class="tag">&lt;<span class="name">script</span>&gt;</span><span class="language-javascript"></span></span><br><span class="line"><span class="language-javascript"></span></span><br><span class="line"><span class="language-javascript">    <span class="title class_">Vue</span>.<span class="property"><span class="keyword">prototype</span></span>.<span class="property">a</span> = <span class="number">18</span></span></span><br><span class="line"><span class="language-javascript"></span></span><br><span class="line"><span class="language-javascript">    <span class="keyword">const</span> demo = <span class="title class_">Vue</span>.<span class="title function_">extend</span>(&#123;</span></span><br><span class="line"><span class="language-javascript">        <span class="attr">template</span>: <span class="string">`</span></span></span><br><span class="line"><span class="string"><span class="language-javascript">            &lt;div&gt;</span></span></span><br><span class="line"><span class="string"><span class="language-javascript">                &lt;h2&gt;&#123;&#123;msg&#125;&#125;&lt;/h2&gt;</span></span></span><br><span class="line"><span class="string"><span class="language-javascript">            &lt;/div&gt;</span></span></span><br><span class="line"><span class="string"><span class="language-javascript">        `</span>,</span></span><br><span class="line"><span class="language-javascript">        <span class="title function_">data</span>(<span class="params"></span>) &#123;</span></span><br><span class="line"><span class="language-javascript">            <span class="keyword">return</span> &#123;</span></span><br><span class="line"><span class="language-javascript">                <span class="attr">msg</span>: <span class="string">&#x27;demo&#x27;</span></span></span><br><span class="line"><span class="language-javascript">            &#125;</span></span><br><span class="line"><span class="language-javascript">        &#125;,</span></span><br><span class="line"><span class="language-javascript">        <span class="title function_">mounted</span>(<span class="params"></span>) &#123;</span></span><br><span class="line"><span class="language-javascript">            <span class="variable language_">console</span>.<span class="title function_">log</span>(<span class="variable language_">this</span>.<span class="property">a</span>); <span class="comment">// VueComponent(prototype)---&gt;Vue(prototype)----&gt;Object(prototype.a)</span></span></span><br><span class="line"><span class="language-javascript">        &#125;,</span></span><br><span class="line"><span class="language-javascript">    &#125;)</span></span><br><span class="line"><span class="language-javascript">    <span class="comment">// 定义一各构造函数</span></span></span><br><span class="line"><span class="language-javascript">    <span class="keyword">function</span> <span class="title function_">Demo</span>(<span class="params"></span>) &#123;</span></span><br><span class="line"><span class="language-javascript">        <span class="variable language_">this</span>.<span class="property">a</span> = <span class="number">1</span></span></span><br><span class="line"><span class="language-javascript">        <span class="variable language_">this</span>.<span class="property">b</span> = <span class="number">2</span></span></span><br><span class="line"><span class="language-javascript">    &#125;</span></span><br><span class="line"><span class="language-javascript">    <span class="variable language_">console</span>.<span class="title function_">log</span>(<span class="title class_">Demo</span>.<span class="property"><span class="keyword">prototype</span></span>);  <span class="comment">// 显示原型属性</span></span></span><br><span class="line"><span class="language-javascript">    <span class="comment">// 创建实例对象</span></span></span><br><span class="line"><span class="language-javascript">    <span class="keyword">let</span> d = <span class="keyword">new</span> <span class="title class_">Demo</span>()</span></span><br><span class="line"><span class="language-javascript">    <span class="variable language_">console</span>.<span class="title function_">log</span>(d.<span class="property">__proto__</span>);   <span class="comment">// 隐式原型属性</span></span></span><br><span class="line"><span class="language-javascript">    <span class="variable language_">console</span>.<span class="title function_">log</span>(<span class="title class_">Demo</span>.<span class="property"><span class="keyword">prototype</span></span> === d.<span class="property">__proto__</span>);</span></span><br><span class="line"><span class="language-javascript">    <span class="title class_">Demo</span>.<span class="property"><span class="keyword">prototype</span></span>.<span class="property">x</span> = <span class="number">100</span></span></span><br><span class="line"><span class="language-javascript">    <span class="variable language_">console</span>.<span class="title function_">log</span>(d);</span></span><br><span class="line"><span class="language-javascript">    <span class="variable language_">console</span>.<span class="title function_">log</span>(d.<span class="property">x</span>);</span></span><br><span class="line"><span class="language-javascript"></span><span class="tag">&lt;/<span class="name">script</span>&gt;</span></span><br></pre></td></tr></table></figure><p><code>VueComponent.prototype.__proto__==Vue.prototype</code></p><h4 id="单文件组件"><a href="#单文件组件" class="headerlink" title="单文件组件"></a>单文件组件</h4><h3 id="Vue-cli-command-line-interface—命令行结构工具-脚手架"><a href="#Vue-cli-command-line-interface—命令行结构工具-脚手架" class="headerlink" title="Vue-cli(command line interface—命令行结构工具) 脚手架"></a>Vue-cli(command line interface—命令行结构工具) 脚手架</h3><p><code>vue.js</code>:是完整版Vue，包括核心功能+模板解析器<br><code>vue.runtime.xxx.js</code>：运行时的Vue,只包含核心功能</p><h4 id="render渲染函数"><a href="#render渲染函数" class="headerlink" title="render渲染函数"></a>render渲染函数</h4><figure class="highlight html"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br><span class="line">41</span><br><span class="line">42</span><br><span class="line">43</span><br><span class="line">44</span><br></pre></td><td class="code"><pre><span class="line"><span class="tag">&lt;<span class="name">script</span>&gt;</span><span class="language-javascript"></span></span><br><span class="line"><span class="language-javascript">    <span class="comment">/* </span></span></span><br><span class="line"><span class="comment"><span class="language-javascript">      项目的入口文件</span></span></span><br><span class="line"><span class="comment"><span class="language-javascript">    */</span></span></span><br><span class="line"><span class="language-javascript">    <span class="comment">// 精简版vue配合render函数使用</span></span></span><br><span class="line"><span class="language-javascript">    <span class="keyword">import</span> <span class="title class_">Vue</span> <span class="keyword">from</span> <span class="string">&#x27;vue&#x27;</span></span></span><br><span class="line"><span class="language-javascript">    <span class="comment">// 引入根组件</span></span></span><br><span class="line"><span class="language-javascript">    <span class="keyword">import</span> <span class="title class_">App</span> <span class="keyword">from</span> <span class="string">&#x27;./App.vue&#x27;</span></span></span><br><span class="line"><span class="language-javascript">    <span class="comment">// 关闭生产提示</span></span></span><br><span class="line"><span class="language-javascript">    <span class="title class_">Vue</span>.<span class="property">config</span>.<span class="property">productionTip</span> = <span class="literal">false</span></span></span><br><span class="line"><span class="language-javascript"></span></span><br><span class="line"><span class="language-javascript">    <span class="comment">// 创建Vue实例vm</span></span></span><br><span class="line"><span class="language-javascript">    <span class="comment">// 1.import Vue from &#x27;vue&#x27;</span></span></span><br><span class="line"><span class="language-javascript">    <span class="comment">/* new Vue(&#123;</span></span></span><br><span class="line"><span class="comment"><span class="language-javascript">        el: &quot;#app&quot;,</span></span></span><br><span class="line"><span class="comment"><span class="language-javascript">        render(h) &#123;</span></span></span><br><span class="line"><span class="comment"><span class="language-javascript">            return h(&#x27;h1&#x27;, &#x27;你好&#x27;)</span></span></span><br><span class="line"><span class="comment"><span class="language-javascript">        &#125;,</span></span></span><br><span class="line"><span class="comment"><span class="language-javascript">    &#125;)</span></span></span><br><span class="line"><span class="comment"><span class="language-javascript">    */</span></span></span><br><span class="line"><span class="language-javascript"></span></span><br><span class="line"><span class="language-javascript">    <span class="comment">//2.import Vue from &#x27;vue&#x27;</span></span></span><br><span class="line"><span class="language-javascript">    <span class="comment">/* new Vue(&#123;</span></span></span><br><span class="line"><span class="comment"><span class="language-javascript">        el: &quot;#app&quot;,</span></span></span><br><span class="line"><span class="comment"><span class="language-javascript">        render(h) &#123;</span></span></span><br><span class="line"><span class="comment"><span class="language-javascript">            return h(App)</span></span></span><br><span class="line"><span class="comment"><span class="language-javascript">        &#125;,</span></span></span><br><span class="line"><span class="comment"><span class="language-javascript">    &#125;)</span></span></span><br><span class="line"><span class="comment"><span class="language-javascript">    */</span></span></span><br><span class="line"><span class="language-javascript"></span></span><br><span class="line"><span class="language-javascript">    <span class="comment">// 3. 需要引入完成版vue,含有模板解析器</span></span></span><br><span class="line"><span class="language-javascript">    <span class="comment">/* import Vue from &#x27;vue/dist/vue&#x27;</span></span></span><br><span class="line"><span class="comment"><span class="language-javascript">        new Vue(&#123;</span></span></span><br><span class="line"><span class="comment"><span class="language-javascript">        el: &quot;#app&quot;,</span></span></span><br><span class="line"><span class="comment"><span class="language-javascript">        template: `&lt;App&gt;&lt;/App&gt;`,</span></span></span><br><span class="line"><span class="comment"><span class="language-javascript">        components: &#123; App &#125;,</span></span></span><br><span class="line"><span class="comment"><span class="language-javascript">    &#125;) */</span></span></span><br><span class="line"><span class="language-javascript"></span></span><br><span class="line"><span class="language-javascript">    <span class="comment">// 4. import Vue from &#x27;vue&#x27;</span></span></span><br><span class="line"><span class="language-javascript">    <span class="keyword">new</span> <span class="title class_">Vue</span>(&#123;</span></span><br><span class="line"><span class="language-javascript">        <span class="attr">render</span>: <span class="function"><span class="params">h</span> =&gt;</span> <span class="title function_">h</span>(<span class="title class_">App</span>)</span></span><br><span class="line"><span class="language-javascript">    &#125;).$mount(<span class="string">&#x27;#app&#x27;</span>)</span></span><br><span class="line"><span class="language-javascript"></span></span><br><span class="line"><span class="language-javascript"></span><span class="tag">&lt;/<span class="name">script</span>&gt;</span></span><br></pre></td></tr></table></figure><h4 id="配置文件，输出配置文件"><a href="#配置文件，输出配置文件" class="headerlink" title="配置文件，输出配置文件"></a>配置文件，输出配置文件</h4><p>输出配置文件：<code>vue inspect &gt; output.js</code><br><a href="https://cli.vuejs.org/zh/config/">配置文件</a></p><h4 id="ref属性"><a href="#ref属性" class="headerlink" title="ref属性"></a>ref属性</h4><ol><li>被用来给元素或子组件注册引用信息（id的替代者）</li><li>应用在html标签上获取doc元素，应用在组件上获取实例对象（VueComponent）</li><li>使用：<code>&lt;p ref=&quot;xxx&quot;&gt;&lt;/p&gt;</code>,<code>this.$refs.xxx</code> </li></ol><h4 id="props"><a href="#props" class="headerlink" title="props"></a>props</h4><ol><li>父向子传值</li><li>只读（不能修改，若业务需要修改，那么复制一份到data中，让后修改data中的数据）<figure class="highlight html"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br></pre></td><td class="code"><pre><span class="line"><span class="tag">&lt;<span class="name">script</span>&gt;</span><span class="language-javascript"></span></span><br><span class="line"><span class="language-javascript"></span></span><br><span class="line"><span class="language-javascript">    <span class="comment">// 1.简单传值，只做接受</span></span></span><br><span class="line"><span class="language-javascript">    <span class="attr">props</span>: [<span class="string">&#x27;name&#x27;</span>, <span class="string">&#x27;age&#x27;</span>],</span></span><br><span class="line"><span class="language-javascript"></span></span><br><span class="line"><span class="language-javascript">    <span class="comment">// 2. 限制类型</span></span></span><br><span class="line"><span class="language-javascript">    <span class="attr">props</span>: &#123;</span></span><br><span class="line"><span class="language-javascript">        <span class="attr">name</span>: <span class="title class_">String</span>,</span></span><br><span class="line"><span class="language-javascript">        <span class="attr">age</span>: <span class="title class_">Number</span></span></span><br><span class="line"><span class="language-javascript">    &#125;,</span></span><br><span class="line"><span class="language-javascript">    <span class="comment">// 3. 限制类型，限制必要性，指定默认值</span></span></span><br><span class="line"><span class="language-javascript">    <span class="attr">props</span>: &#123;</span></span><br><span class="line"><span class="language-javascript">        <span class="attr">name</span>: &#123;</span></span><br><span class="line"><span class="language-javascript">        <span class="attr">type</span>: <span class="title class_">String</span>,</span></span><br><span class="line"><span class="language-javascript">        <span class="attr">required</span>: <span class="literal">true</span></span></span><br><span class="line"><span class="language-javascript">        &#125;,</span></span><br><span class="line"><span class="language-javascript">        <span class="attr">age</span>: &#123;</span></span><br><span class="line"><span class="language-javascript">        <span class="attr">type</span>: <span class="title class_">Number</span>,</span></span><br><span class="line"><span class="language-javascript">        <span class="attr">default</span>: <span class="number">99</span> <span class="comment">// 默认值</span></span></span><br><span class="line"><span class="language-javascript">        &#125;</span></span><br><span class="line"><span class="language-javascript">    &#125;,</span></span><br><span class="line"><span class="language-javascript"></span><span class="tag">&lt;/<span class="name">script</span>&gt;</span></span><br></pre></td></tr></table></figure></li></ol><h4 id="mixin-混入"><a href="#mixin-混入" class="headerlink" title="mixin(混入)"></a>mixin(混入)</h4><ol><li>可以把多个组件的共用配置提取在一个混入对象中</li><li>定义<figure class="highlight js"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">export</span> <span class="keyword">const</span> mixin = &#123;</span><br><span class="line">    <span class="title function_">data</span>(<span class="params"></span>) &#123;</span><br><span class="line">        <span class="keyword">return</span> &#123;</span><br><span class="line">            <span class="attr">x</span>: <span class="number">10</span>,</span><br><span class="line">            <span class="attr">y</span>: <span class="number">20</span></span><br><span class="line">        &#125;</span><br><span class="line">    &#125;,</span><br><span class="line">    <span class="attr">methods</span>: &#123;</span><br><span class="line">        <span class="title function_">showName</span>(<span class="params"></span>) &#123;</span><br><span class="line">            <span class="title function_">alert</span>(<span class="variable language_">this</span>.<span class="property">name</span>)</span><br><span class="line">        &#125;</span><br><span class="line">    &#125;,</span><br><span class="line">    <span class="title function_">mounted</span>(<span class="params"></span>) &#123;</span><br><span class="line">        <span class="variable language_">console</span>.<span class="title function_">log</span>(<span class="number">888888</span>);</span><br><span class="line">    &#125;,</span><br><span class="line">   </span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure></li><li>使用<ul><li>全局引入：<code>Vue.mixin(xxx)</code></li><li>局部引入：<code>mixins:[xxx,xxx]</code></li></ul></li></ol><h4 id="插件"><a href="#插件" class="headerlink" title="插件"></a>插件</h4><ol><li><code>plugins.js</code></li></ol><figure class="highlight js"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br><span class="line">41</span><br><span class="line">42</span><br><span class="line">43</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">export</span> <span class="keyword">default</span> &#123;</span><br><span class="line">    <span class="title function_">install</span>(<span class="params">Vue, x, y</span>) &#123;</span><br><span class="line">        <span class="variable language_">console</span>.<span class="title function_">log</span>(x, y);</span><br><span class="line">        <span class="comment">// 过滤器</span></span><br><span class="line">        <span class="title class_">Vue</span>.<span class="title function_">filter</span>(<span class="string">&#x27;mySlice&#x27;</span>, <span class="keyword">function</span> (<span class="params">value</span>) &#123;</span><br><span class="line">            <span class="keyword">return</span> value.<span class="title function_">slice</span>(<span class="number">0</span>, <span class="number">4</span>)</span><br><span class="line">        &#125;)</span><br><span class="line">        <span class="comment">// 自定义指令</span></span><br><span class="line">        <span class="title class_">Vue</span>.<span class="title function_">directive</span>(<span class="string">&#x27;fbind&#x27;</span>, &#123;</span><br><span class="line"></span><br><span class="line">            <span class="comment">// 指令与元素成功绑定(页面一上来)</span></span><br><span class="line">            <span class="title function_">bind</span>(<span class="params">element, binding</span>) &#123;</span><br><span class="line">                element.<span class="property">value</span> = binding.<span class="property">value</span></span><br><span class="line"></span><br><span class="line">            &#125;,</span><br><span class="line">            <span class="comment">// 指令所在页面被插入页面</span></span><br><span class="line">            <span class="title function_">inserted</span>(<span class="params">element, binding</span>) &#123;</span><br><span class="line">                element.<span class="title function_">focus</span>()</span><br><span class="line">            &#125;,</span><br><span class="line">            <span class="comment">// 指令所在模板被重新解析</span></span><br><span class="line">            <span class="title function_">update</span>(<span class="params">element, binding</span>) &#123;</span><br><span class="line">                element.<span class="property">value</span> = binding.<span class="property">value</span></span><br><span class="line">                <span class="variable language_">console</span>.<span class="title function_">log</span>(<span class="string">&#x27;updated&#x27;</span>);</span><br><span class="line">            &#125;,</span><br><span class="line"></span><br><span class="line">        &#125;)</span><br><span class="line"></span><br><span class="line">        <span class="comment">// 混入</span></span><br><span class="line">        <span class="title class_">Vue</span>.<span class="title function_">mixin</span>(&#123;</span><br><span class="line">            <span class="title function_">data</span>(<span class="params"></span>) &#123;</span><br><span class="line">                <span class="keyword">return</span> &#123;</span><br><span class="line">                    <span class="attr">x</span>: <span class="number">10</span>,</span><br><span class="line">                    <span class="attr">y</span>: <span class="number">20</span></span><br><span class="line">                &#125;</span><br><span class="line">            &#125;,</span><br><span class="line">        &#125;)</span><br><span class="line"></span><br><span class="line">        <span class="comment">// </span></span><br><span class="line">        <span class="title class_">Vue</span>.<span class="property"><span class="keyword">prototype</span></span>.<span class="property">hello</span> = <span class="function">() =&gt;</span> &#123;</span><br><span class="line">            <span class="title function_">alert</span>(<span class="number">666</span>)</span><br><span class="line">        &#125;</span><br><span class="line">    &#125;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><ol><li><code>main.js</code></li></ol><figure class="highlight js"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">import</span> <span class="title class_">Vue</span> <span class="keyword">from</span> <span class="string">&quot;vue&quot;</span>;</span><br><span class="line"><span class="keyword">import</span> plugins <span class="keyword">from</span> <span class="string">&quot;./plugins&quot;</span>;</span><br><span class="line"><span class="title class_">Vue</span>.<span class="title function_">use</span>(plugins,<span class="number">1</span>,<span class="number">2</span>)</span><br></pre></td></tr></table></figure><h4 id="scoped-样式"><a href="#scoped-样式" class="headerlink" title="scoped 样式"></a>scoped 样式</h4><blockquote><p>让样式局部生效，<code>&lt;style scoped&gt;</code></p></blockquote><h4 id="todoList案例"><a href="#todoList案例" class="headerlink" title="todoList案例"></a>todoList案例</h4><blockquote><p>eventBus,消息订阅,Vuex===&gt;兄弟之间数据通信</p><ol><li>组件化编码流程<ul><li>拆分为各个组件</li><li>数据传输，共享</li></ul></li><li>props适用<ul><li>父=====&gt;子</li><li>子=====&gt;父 通信（要求父先给子一个函数）</li></ul></li><li>适用v-model是切记，v-model绑定的值不能是props（只读）传过来的值</li></ol></blockquote><ol><li>props传过来的若是对象类型，修改的对象中的属性时Vue不会报错，但是不推荐这么做</li></ol><h4 id="web-Storage"><a href="#web-Storage" class="headerlink" title="web Storage"></a>web Storage</h4><ol><li>存储的内容大小一般为（5MB）左右（依浏览器）</li><li>浏览器通过,<code>sessionStorage</code>,<code>localStorage</code>,属性实现本地存储</li><li>相关api:<code>xxxStorage.setItem(&#39;key&#39;,&#39;val&#39;)</code>设置存储的键值,<code>xxxStorage.getItem(&#39;key&#39;)</code>获取键对应的值,<code>xxxStorage.removeItem(&#39;key&#39;)</code>移除键值,<code>xxxStorage.clear()</code>清空存储的所有数据</li><li>备注：<ul><li>sessionStorage存储的内容会随浏览器窗口的关闭而自动清除</li><li>localStorage存储的内容（永久性），需手动清除</li><li><code>getItem(&#39;key&#39;)</code>，如果key对应的值不存在则返回null</li><li>若存储的是对象记得用 <code>JSON.Stringify()</code>转为字符串，使用的时候用<code>JSON.parse()</code>解析为对象</li></ul></li></ol><h4 id="组件的自定义事件（通信方式）"><a href="#组件的自定义事件（通信方式）" class="headerlink" title="组件的自定义事件（通信方式）"></a>组件的自定义事件（通信方式）</h4><ol><li>适用于：子—-&gt;父</li><li>第一种：子父组件中<code>&lt;Demo @test=&quot;test&quot;&gt;&lt;/Demo&gt;</code>,@test表示子组件的自定义事件，test表示父组件接受的事件</li><li>第二种<figure class="highlight js"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line"><span class="title function_">mounted</span>(<span class="params"></span>)&#123;</span><br><span class="line">    <span class="variable language_">this</span>.<span class="property">$refs</span>.<span class="property">xxx</span>.<span class="title function_">on</span>(<span class="string">&#x27;xxx&#x27;</span>,<span class="variable language_">this</span>.<span class="property">test</span>)</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure></li><li>若想让自定义事件执行一次需要用<code>once</code>,或<code>$once</code></li><li>触发自定义事件<code>this.$emit(&#39;xxx&#39;,数据)</code>,解绑自定义事件<code>this.$off(&#39;xxx&#39;)</code></li><li>组件绑定原生DOM事件，需要用native修饰符</li><li>通过<code>this.$refs.xxx.$on(&#39;xxx&#39;,回调)</code>，<strong>回调要么配置在methods中要么用箭头函数，否则this指向会出问题</strong></li></ol><h4 id="全局事件总线（GlobalEventBus）"><a href="#全局事件总线（GlobalEventBus）" class="headerlink" title="全局事件总线（GlobalEventBus）"></a>全局事件总线（GlobalEventBus）</h4><ol><li>适应于任意组之间的同信</li><li><p>安装</p><figure class="highlight js"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">new</span> <span class="title class_">Vue</span>(&#123;</span><br><span class="line">    <span class="attr">el</span>: <span class="string">&#x27;#app&#x27;</span>,</span><br><span class="line">    <span class="attr">render</span>: <span class="function"><span class="params">h</span> =&gt;</span> <span class="title function_">h</span>(<span class="title class_">App</span>),</span><br><span class="line">    <span class="title function_">beforeCreate</span>(<span class="params"></span>) &#123;</span><br><span class="line">        <span class="title class_">Vue</span>.<span class="property"><span class="keyword">prototype</span></span>.<span class="property">$bus</span> = <span class="variable language_">this</span></span><br><span class="line">    &#125;</span><br><span class="line">&#125;)</span><br></pre></td></tr></table></figure></li><li><p>使用</p><blockquote><p>发送数据</p></blockquote></li></ol><figure class="highlight js"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><span class="line"><span class="attr">methods</span>: &#123;</span><br><span class="line">   <span class="title function_">giveVal</span>(<span class="params"></span>) &#123;</span><br><span class="line">     <span class="variable language_">this</span>.<span class="property">$bus</span>.$emit(<span class="string">&#x27;test&#x27;</span>, 数据)</span><br><span class="line">   &#125;</span><br><span class="line"> &#125;</span><br></pre></td></tr></table></figure><blockquote><p>接受数据</p></blockquote><figure class="highlight js"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><span class="line"><span class="title function_">mounted</span>(<span class="params"></span>) &#123;</span><br><span class="line">    <span class="variable language_">this</span>.<span class="property">$bus</span>.$on(<span class="string">&#x27;test&#x27;</span>, <span class="function">(<span class="params">val</span>)=&gt;</span>&#123;</span><br><span class="line">        <span class="variable language_">console</span>.<span class="title function_">log</span>(val);</span><br><span class="line">    &#125;)</span><br><span class="line">  &#125;,</span><br></pre></td></tr></table></figure><ol><li>最好在<code>beforeDestroy</code>中，用<code>$off</code>解除当前绑定的事件</li></ol><h4 id="消息订阅与发布（pubsub）"><a href="#消息订阅与发布（pubsub）" class="headerlink" title="消息订阅与发布（pubsub）"></a>消息订阅与发布（pubsub）</h4><ol><li>适用于任意组件同信</li><li>安装:<code>npm i pubsub-js</code>，引入：<code>import pubsub from &#39;pubsub-js&#39;</code></li><li>发布消息<figure class="highlight js"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">pubsub.<span class="title function_">publish</span>(<span class="string">&#x27;xxx&#x27;</span>,数据)</span><br></pre></td></tr></table></figure></li><li>订阅消息<figure class="highlight js"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br></pre></td><td class="code"><pre><span class="line"><span class="title function_">mounted</span>(<span class="params"></span>)&#123;</span><br><span class="line">    <span class="variable language_">this</span>.<span class="property">pid</span>=pubsub.<span class="title function_">subscribe</span>(<span class="string">&#x27;xxx&#x27;</span>,<span class="function">(<span class="params">msgData,data</span>)=&gt;</span>&#123;</span><br><span class="line">        <span class="comment">// msgData 订阅号（xxx）</span></span><br><span class="line">        <span class="comment">// data 订阅的东西（数据）</span></span><br><span class="line">    &#125;)</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure></li><li>取消订阅：在<code>beforeDestroy</code>里,<code>pubsub.unsubscribe(this.pid)</code></li></ol><h4 id="nextTick"><a href="#nextTick" class="headerlink" title="$nextTick"></a>$nextTick</h4><ol><li><code>this.$nextTick(callback)</code></li><li>在下一次dom更新后执行其回调</li><li>当改变数据后，要基于更新后的dom进行某些操作，要用到nextTick</li></ol><h4 id="Vue过度和动画"><a href="#Vue过度和动画" class="headerlink" title="Vue过度和动画"></a>Vue过度和动画</h4><ol><li>内部组件<code>transition</code></li><li><a href="https://animate.style/">第三方库</a>,<code>npm install animate.css --save</code>,<code>animate.css</code><figure class="highlight html"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br></pre></td><td class="code"><pre><span class="line"><span class="tag">&lt;<span class="name">transition-group</span> <span class="attr">name</span>=<span class="string">&quot;h&quot;</span> <span class="attr">appear</span>=<span class="string">&quot;&quot;</span>&gt;</span></span><br><span class="line">    <span class="tag">&lt;<span class="name">h2</span> <span class="attr">v-show</span>=<span class="string">&quot;!isShow&quot;</span> <span class="attr">key</span>=<span class="string">&quot;1&quot;</span> <span class="attr">class</span>=<span class="string">&quot;rounded&quot;</span>&gt;</span>Hello1<span class="tag">&lt;/<span class="name">h2</span>&gt;</span></span><br><span class="line">    <span class="tag">&lt;<span class="name">h2</span> <span class="attr">v-show</span>=<span class="string">&quot;isShow&quot;</span> <span class="attr">key</span>=<span class="string">&quot;2&quot;</span> <span class="attr">class</span>=<span class="string">&quot;rounded&quot;</span>&gt;</span>Hello2<span class="tag">&lt;/<span class="name">h2</span>&gt;</span></span><br><span class="line"><span class="tag">&lt;/<span class="name">transition-group</span>&gt;</span></span><br></pre></td></tr></table></figure></li></ol><h3 id="配置代理-axios"><a href="#配置代理-axios" class="headerlink" title="配置代理 axios"></a>配置代理 axios</h3><h4 id="跨域"><a href="#跨域" class="headerlink" title="跨域"></a>跨域</h4><ol><li>cors</li><li>jsonp</li><li>代理Proxy  nginx 代理服务器反向代理，负载均衡</li></ol><h4 id="插槽"><a href="#插槽" class="headerlink" title="插槽"></a>插槽</h4><blockquote><p>子组件挖坑，父组件填坑</p></blockquote><ol><li>默认插槽<br><code>&lt;slot&gt;&lt;/slot&gt;</code>,占位</li><li>具名插槽<br><code>&lt;slot name=&#39;xxx&#39;&gt;&lt;/slot&gt;</code></li><li>作用域插槽<ul><li><code>&lt;slot :test=&quot;test&quot;&gt;&lt;/slot&gt;</code></li><li><code>&lt;template scope=&quot;getData&quot;&gt;&lt;/template&gt;</code>,使用<code>&#123;&#123;getData.data&#125;&#125;</code></li></ul></li></ol><h4 id="Vuex"><a href="#Vuex" class="headerlink" title="Vuex"></a>Vuex</h4><p><img src="https://pic3.zhimg.com/v2-d5e3226d81d48374b57d525e6a94f6fa_r.jpg" alt="vuex"><br><a href="https://www.cnblogs.com/qianduan-Wu/p/16725680.html">vuex</a></p><ol><li>多个组件依赖于同一状态</li><li>来自不同组件的行为需要变更同一状态</li></ol><figure class="highlight js"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">import</span> <span class="title class_">Vuex</span> <span class="keyword">from</span> <span class="string">&#x27;vuex&#x27;</span></span><br><span class="line"></span><br><span class="line"><span class="keyword">export</span> <span class="keyword">default</span> <span class="keyword">new</span> <span class="title class_">Vuex</span>.<span class="title class_">Store</span>(&#123;</span><br><span class="line">    <span class="attr">state</span>: &#123;</span><br><span class="line">        <span class="comment">// 定义了应用状态的数据结构，可以在这里设置默认的初始状态</span></span><br><span class="line">    &#125;,</span><br><span class="line">    <span class="attr">getters</span>: &#123;</span><br><span class="line">        <span class="comment">// 定义了应用状态的数据结构，可以在这里设置默认的初始状态</span></span><br><span class="line">        <span class="comment">// 加工数据相当于计算属性</span></span><br><span class="line">    &#125;,</span><br><span class="line">    <span class="attr">mutations</span>: &#123;</span><br><span class="line">       <span class="comment">// commit</span></span><br><span class="line">       <span class="comment">// 唯一更改store中状态的方法，且必须是同步函数；</span></span><br><span class="line">    &#125;,</span><br><span class="line">    <span class="attr">actions</span>: &#123;</span><br><span class="line">       <span class="comment">// dispatch</span></span><br><span class="line">       <span class="comment">// 用于提交mutation，而不是直接更改状态，包含异步操作；</span></span><br><span class="line">    &#125;,</span><br><span class="line">    <span class="attr">modules</span>: &#123;</span><br><span class="line">        <span class="comment">// 允许将单一的store拆分为多个store且同时保存在单一的状态树。</span></span><br><span class="line">    &#125;</span><br><span class="line">&#125;)</span><br></pre></td></tr></table></figure><blockquote><p>state</p><ol><li>全局数据共享状态，相当于data</li><li>读取数据,映射为计算属性<ul><li><code>this.$store.state.num</code></li><li><code>...mapState(&#123;&#125;)</code> 对象形式</li><li><code>...mapState([])</code> 数组形式</li></ul></li></ol><p>getters</p></blockquote><ol><li>对state中的数据进行加工，相当于计算属性</li><li>读取数据<ul><li><code>this.$store.getters.xxx</code></li><li><code>...mapGetters(&#123;&#125;)</code></li><li><code>...mapGetters([])</code></li></ul></li></ol><blockquote><p>mutations</p></blockquote><ol><li>在methods中， 唯一更改store中状态的方法（同步）</li><li>读取数据<ul><li><code>this.$store.commit()</code><br><code>...mapMutations(&#123;&#125;)</code></li><li><code>...mapMutations([])</code></li></ul></li></ol><blockquote><p>actions</p></blockquote><ol><li>用于提交mutation（异步）</li><li>读取数据<ul><li><code>this.$store.dispatch()</code></li><li><code>...mapActions(&#123;&#125;)</code></li><li><code>...mapActions([])</code></li></ul></li></ol><blockquote><p>modules</p></blockquote><ol><li>将单一的store拆分为多个store<figure class="highlight js"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br></pre></td><td class="code"><pre><span class="line"></span><br><span class="line"><span class="keyword">const</span> modeleA = &#123;</span><br><span class="line">    <span class="attr">state</span>: &#123;</span><br><span class="line">        <span class="attr">s</span>: <span class="string">&#x27;I am modelueA&#x27;</span></span><br><span class="line">    &#125;,</span><br><span class="line">    <span class="attr">getters</span>: &#123;</span><br><span class="line"></span><br><span class="line">    &#125;,</span><br><span class="line"></span><br><span class="line">    <span class="attr">mutations</span>: &#123;</span><br><span class="line"></span><br><span class="line">    &#125;,</span><br><span class="line">    <span class="attr">actions</span>: &#123;</span><br><span class="line"></span><br><span class="line">    &#125;</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line"><span class="keyword">const</span> modeluB = &#123;</span><br><span class="line">    <span class="attr">state</span>: &#123;</span><br><span class="line"></span><br><span class="line">    &#125;,</span><br><span class="line">    <span class="attr">getters</span>: &#123;</span><br><span class="line"></span><br><span class="line">    &#125;,</span><br><span class="line"></span><br><span class="line">    <span class="attr">mutations</span>: &#123;</span><br><span class="line"></span><br><span class="line">    &#125;,</span><br><span class="line">    <span class="attr">actions</span>: &#123;</span><br><span class="line"></span><br><span class="line">    &#125;</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line"><span class="keyword">export</span> <span class="keyword">default</span> <span class="keyword">new</span> <span class="title class_">Vuex</span>.<span class="title class_">Store</span>(&#123;</span><br><span class="line">    <span class="attr">modules</span>: &#123;</span><br><span class="line">        <span class="attr">a</span>: modeleA,</span><br><span class="line">        <span class="attr">b</span>: modeluB</span><br><span class="line">    &#125;</span><br><span class="line">&#125;)</span><br></pre></td></tr></table></figure></li></ol><h5 id="Vuex模块化-namesapce"><a href="#Vuex模块化-namesapce" class="headerlink" title="Vuex模块化+namesapce"></a>Vuex模块化+namesapce</h5><ol><li><p>开启命名空间</p><figure class="highlight js"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">const</span> testModule = &#123;</span><br><span class="line">    <span class="attr">namespaced</span>: <span class="literal">true</span>,</span><br><span class="line">    <span class="attr">state</span>: &#123;</span><br><span class="line">    &#125;,</span><br><span class="line">    <span class="attr">getters</span>: &#123;</span><br><span class="line">    &#125;,</span><br><span class="line">    <span class="attr">mutations</span>: &#123;</span><br><span class="line">       </span><br><span class="line">    &#125;,</span><br><span class="line">    <span class="attr">actions</span>: &#123;</span><br><span class="line">    &#125;,</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure></li><li><p>组件中读取state数据</p><ul><li><code>this.$store.state.testModule.num</code></li><li><code>...mapState(&#39;testModule&#39;,[&#39;num&#39;,&#39;xxx&#39;])</code></li></ul></li><li>组件中读取getters数据<ul><li><code>this.$store.getters[&#39;testModule/xxx&#39;]</code></li><li><code>...mapGetters(&#39;testModule&#39;,[&#39;xxx&#39;])</code></li></ul></li><li>组件中调用commit<ul><li><code>this.$store.commit(&#39;testModule/xxx&#39;)</code></li><li><code>...mapMutations(&#39;testModule&#39;,[&#39;xxx&#39;,&#39;xxx&#39;])</code></li></ul></li><li>组件中调用dispatch<ul><li><code>this.$store.dispatch(&#39;testModule/xxx&#39;)</code></li><li><code>...mapActions(&#39;testModule&#39;,[&#39;xxx&#39;,&#39;xxx&#39;])</code></li></ul></li></ol><h4 id="路由"><a href="#路由" class="headerlink" title="路由"></a>路由</h4><p><a href="https://router.vuejs.org/zh/">官网</a></p><p>SPA(single page web application)</p><ol><li>安装：<code>npm i vue-router@3</code> Vue2安装3版本</li><li>应用：Vue.use(VueRouter)</li><li>配置</li></ol><figure class="highlight js"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">import</span> <span class="title class_">VueRouter</span> <span class="keyword">from</span> <span class="string">&quot;vue-router&quot;</span>;</span><br><span class="line"><span class="keyword">const</span> routes = [</span><br><span class="line">    &#123; <span class="attr">path</span>: <span class="string">&#x27;/&#x27;</span>, <span class="attr">name</span>: <span class="string">&#x27;Home&#x27;</span>, <span class="attr">component</span>: <span class="function">() =&gt;</span> <span class="title function_">import</span>(<span class="string">&#x27;../views/Home&#x27;</span>) &#125;,</span><br><span class="line">    &#123; <span class="attr">path</span>: <span class="string">&#x27;/about&#x27;</span>, <span class="attr">name</span>: <span class="string">&#x27;About&#x27;</span>, <span class="attr">component</span>: <span class="function">() =&gt;</span> <span class="title function_">import</span>(<span class="string">&#x27;../views/About&#x27;</span>) &#125;</span><br><span class="line">]</span><br><span class="line"><span class="keyword">export</span> <span class="keyword">default</span> <span class="keyword">new</span> <span class="title class_">VueRouter</span>(&#123;</span><br><span class="line">    routes</span><br><span class="line">&#125;)</span><br><span class="line"></span><br></pre></td></tr></table></figure><ol><li><code>&lt;router-link to=&quot;&quot; active-class=&quot;&quot;&gt;&lt;/router-link&gt;</code> 配置路由切换</li><li><code>&lt;router-view&gt;&lt;/router-view&gt;</code>  组件的呈现位置</li><li>每次切换都伴随着组件的销毁和挂载</li><li>每个组件都有自己的$route属性，记录着自己的路由信息</li><li>整个应用只有一个router,可以通过组件的$router属性获取</li><li><p>多级路由，嵌套</p><figure class="highlight js"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br></pre></td><td class="code"><pre><span class="line">&#123;</span><br><span class="line">    <span class="attr">path</span>: <span class="string">&#x27;/home&#x27;</span>,</span><br><span class="line">    <span class="attr">name</span>: <span class="string">&#x27;Home&#x27;</span>,</span><br><span class="line">    <span class="attr">component</span>: <span class="function">() =&gt;</span> <span class="title function_">import</span>(<span class="string">&#x27;../views/Home&#x27;</span>),</span><br><span class="line">    <span class="attr">directive</span>: <span class="string">&#x27;/message&#x27;</span>,</span><br><span class="line">    <span class="attr">children</span>: [</span><br><span class="line">        &#123; <span class="attr">path</span>: <span class="string">&#x27;message&#x27;</span>, <span class="attr">name</span>: <span class="string">&#x27;Message&#x27;</span>, <span class="attr">component</span>: <span class="function">() =&gt;</span> <span class="title function_">import</span>(<span class="string">&#x27;../views/Message&#x27;</span>) &#125;,</span><br><span class="line">        &#123; <span class="attr">path</span>: <span class="string">&#x27;news&#x27;</span>, <span class="attr">name</span>: <span class="string">&#x27;News&#x27;</span>, <span class="attr">component</span>: <span class="function">() =&gt;</span> <span class="title function_">import</span>(<span class="string">&#x27;../views/News&#x27;</span>) &#125;</span><br><span class="line">    ]</span><br><span class="line">&#125;,</span><br></pre></td></tr></table></figure></li><li><p><code>&lt;router-link class=&quot;nav-link&quot; active-class=&quot;active&quot; aria-current=&quot;page&quot; to=&quot;/home/message&quot;&gt;message&lt;/router-link&gt;</code></p></li></ol><h5 id="简化路由"><a href="#简化路由" class="headerlink" title="简化路由"></a>简化路由</h5><ol><li>给routes里的每一项加name属性</li><li>原来写法：<code>&lt;router-link :to=&quot;/home/message/detail?id=$&#123;lst.id&#125;&amp;title=$&#123;lst.title&#125;&quot;&gt;&#123;&#123;lst.title&#125;&#125;&lt;/router-link&gt;</code></li><li>现在写法：<code>&lt;router-link :to=&quot;&#123;name:&#39;detail&#39;,query:&#123;id:lst.id,title:lst.title&#125;&#125;&quot;&gt;&#123;&#123;lst.title&#125;&#125;&lt;/router-link&gt;</code></li></ol><h5 id="路由的参数携带"><a href="#路由的参数携带" class="headerlink" title="路由的参数携带"></a>路由的参数携带</h5><ol><li>query</li></ol><figure class="highlight html"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br></pre></td><td class="code"><pre><span class="line">// 1.直接传递</span><br><span class="line"> <span class="tag">&lt;<span class="name">router-link</span> <span class="attr">:to</span>=<span class="string">&quot;`/home/message/detail?id=$&#123;lst.id&#125;&amp;title=$&#123;lst.title&#125;`&quot;</span>&gt;</span></span><br><span class="line">    &#123;&#123;lst.title&#125;&#125;</span><br><span class="line"><span class="tag">&lt;/<span class="name">router-link</span>&gt;</span> </span><br><span class="line"></span><br><span class="line">// 2.对象形式</span><br><span class="line"><span class="tag">&lt;<span class="name">router-link</span> <span class="attr">:to</span>=<span class="string">&quot;&#123;</span></span></span><br><span class="line"><span class="string"><span class="tag">    name:&#x27;detail&#x27;,</span></span></span><br><span class="line"><span class="string"><span class="tag">    // path:&#x27;/home/message/detail&#x27;,</span></span></span><br><span class="line"><span class="string"><span class="tag">    query:&#123;</span></span></span><br><span class="line"><span class="string"><span class="tag">        id:lst.id,</span></span></span><br><span class="line"><span class="string"><span class="tag">        title:lst.title</span></span></span><br><span class="line"><span class="string"><span class="tag">    &#125;</span></span></span><br><span class="line"><span class="string"><span class="tag">&#125;&quot;</span>&gt;</span></span><br><span class="line">    &#123;&#123;lst.title&#125;&#125;</span><br><span class="line"><span class="tag">&lt;/<span class="name">router-link</span>&gt;</span></span><br></pre></td></tr></table></figure><ol><li>params</li></ol><figure class="highlight html"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br></pre></td><td class="code"><pre><span class="line">// 1.直接传递</span><br><span class="line"> <span class="tag">&lt;<span class="name">router-link</span> <span class="attr">:to</span>=<span class="string">&quot;`/home/message/detail/$&#123;lst.id&#125;/$&#123;lst.title&#125;`&quot;</span>&gt;</span></span><br><span class="line">    &#123;&#123;lst.title&#125;&#125;</span><br><span class="line"><span class="tag">&lt;/<span class="name">router-link</span>&gt;</span> </span><br><span class="line"></span><br><span class="line">// 2.对象形式</span><br><span class="line"> <span class="tag">&lt;<span class="name">router-link</span> <span class="attr">:to</span>=<span class="string">&quot;&#123;</span></span></span><br><span class="line"><span class="string"><span class="tag">    name:&#x27;detail&#x27;,</span></span></span><br><span class="line"><span class="string"><span class="tag">    params:&#123;</span></span></span><br><span class="line"><span class="string"><span class="tag">        id:lst.id,</span></span></span><br><span class="line"><span class="string"><span class="tag">        title:lst.title</span></span></span><br><span class="line"><span class="string"><span class="tag">    &#125;</span></span></span><br><span class="line"><span class="string"><span class="tag">&#125;&quot;</span>&gt;</span></span><br><span class="line">    &#123;&#123;lst.title&#125;&#125;</span><br><span class="line"><span class="tag">&lt;/<span class="name">router-link</span>&gt;</span></span><br></pre></td></tr></table></figure><ol><li>接收数据🎉<br><code>this.$route.query/params.xxx</code></li></ol><h5 id="路由props"><a href="#路由props" class="headerlink" title="路由props"></a>路由props</h5><figure class="highlight html"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br></pre></td><td class="code"><pre><span class="line"></span><br><span class="line"> <span class="tag">&lt;<span class="name">router-link</span> <span class="attr">:to</span>=<span class="string">&quot;&#123;</span></span></span><br><span class="line"><span class="string"><span class="tag">    name:&#x27;detail&#x27;,</span></span></span><br><span class="line"><span class="string"><span class="tag">    // path:&#x27;/home/message/detail&#x27;,</span></span></span><br><span class="line"><span class="string"><span class="tag">    query/params:&#123;</span></span></span><br><span class="line"><span class="string"><span class="tag">        id:lst.id,</span></span></span><br><span class="line"><span class="string"><span class="tag">        title:lst.title</span></span></span><br><span class="line"><span class="string"><span class="tag">    &#125;</span></span></span><br><span class="line"><span class="string"><span class="tag">&#125;&quot;</span>&gt;</span></span><br><span class="line">    &#123;&#123;lst.title&#125;&#125;</span><br><span class="line"><span class="tag">&lt;/<span class="name">router-link</span>&gt;</span></span><br></pre></td></tr></table></figure><figure class="highlight js"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br></pre></td><td class="code"><pre><span class="line"></span><br><span class="line">&#123;</span><br><span class="line">    <span class="attr">path</span>: <span class="string">&#x27;detail&#x27;</span>,</span><br><span class="line">    <span class="comment">// path: &#x27;detail/:id/:title&#x27;, params传递</span></span><br><span class="line">    <span class="attr">name</span>: <span class="string">&#x27;detail&#x27;</span>,</span><br><span class="line">    <span class="attr">component</span>: <span class="function">() =&gt;</span> <span class="title function_">import</span>(<span class="string">&#x27;../views/Detail&#x27;</span>),</span><br><span class="line">    <span class="comment">// props第一种写法，值为对象，该对象中所有key-value都会以props的形式传递给Detail组件</span></span><br><span class="line">    <span class="comment">// props: &#123; id: &#x27;id&#x27;, title: &#x27;title&#x27; &#125;  东西是写死的不好</span></span><br><span class="line"></span><br><span class="line">    <span class="comment">// prosp第二种，boolean,若为真，会把给路由的params参数传递给组件,query不行</span></span><br><span class="line">    <span class="attr">props</span>: <span class="literal">true</span>,</span><br><span class="line"></span><br><span class="line">    <span class="comment">// props第三种,作为函数</span></span><br><span class="line">    <span class="title function_">props</span>(<span class="params">$route</span>) &#123;</span><br><span class="line">        <span class="keyword">return</span> &#123;</span><br><span class="line">            <span class="attr">id</span>: $route.<span class="property">query</span>.<span class="property">id</span>,</span><br><span class="line">            <span class="attr">title</span>: $route.<span class="property">query</span>.<span class="property">title</span></span><br><span class="line">        &#125;</span><br><span class="line">    &#125;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><h5 id="lt-router-link-gt-的replaces属性"><a href="#lt-router-link-gt-的replaces属性" class="headerlink" title="&lt;/router-link&gt;的replaces属性"></a><router-link>&lt;/router-link&gt;的replaces属性</h5><ol><li>控制路由跳转是操作浏览器历史记录的模式</li><li>浏览器的历史记录有两种:<code>push</code>,<code>repalce</code>,<code>push</code>是追加记录模式，<code>replace</code>是替换当前记录模式，默认为push</li><li>开启<code>replace</code>,<code>&lt;router-link repalce&gt;&lt;/router-link&gt;</code></li><li>就是一个入栈与出站的操作</li></ol><h5 id="编程式路由导航"><a href="#编程式路由导航" class="headerlink" title="编程式路由导航"></a>编程式路由导航</h5><ol><li><code>push</code>,<code>replace</code></li></ol><figure class="highlight js"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br></pre></td><td class="code"><pre><span class="line"><span class="attr">methods</span>: &#123;</span><br><span class="line">    <span class="title function_">pushShow</span>(<span class="params">lst</span>) &#123;</span><br><span class="line">      <span class="variable language_">this</span>.<span class="property">$router</span>.<span class="title function_">push</span>(&#123;</span><br><span class="line">        <span class="attr">name</span>: <span class="string">&#x27;detail&#x27;</span>,</span><br><span class="line">        <span class="comment">// path:&#x27;/home/message/detail&#x27;,</span></span><br><span class="line">        <span class="attr">query</span>: &#123;</span><br><span class="line">          <span class="attr">id</span>: lst.<span class="property">id</span>,</span><br><span class="line">          <span class="attr">title</span>: lst.<span class="property">title</span></span><br><span class="line">        &#125;</span><br><span class="line">      &#125;)</span><br><span class="line">    &#125;,</span><br><span class="line">    <span class="title function_">replaceShow</span>(<span class="params">lst</span>) &#123;</span><br><span class="line">      <span class="variable language_">this</span>.<span class="property">$router</span>.<span class="title function_">replace</span>(&#123;</span><br><span class="line">        <span class="attr">name</span>: <span class="string">&#x27;detail&#x27;</span>,</span><br><span class="line">        <span class="attr">query</span>: &#123;</span><br><span class="line">          <span class="attr">id</span>: lst.<span class="property">id</span>,</span><br><span class="line">          <span class="attr">title</span>: lst.<span class="property">title</span></span><br><span class="line">        &#125;</span><br><span class="line">      &#125;)</span><br><span class="line">    &#125;</span><br><span class="line">  &#125;</span><br></pre></td></tr></table></figure><ol><li><code>back()</code>,<code>forward()</code>,<code>go()</code><figure class="highlight js"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br></pre></td><td class="code"><pre><span class="line"><span class="attr">methods</span>: &#123;</span><br><span class="line">    <span class="comment">// 后退</span></span><br><span class="line">    <span class="title function_">back</span>(<span class="params"></span>) &#123;</span><br><span class="line">        <span class="variable language_">this</span>.<span class="property">$router</span>.<span class="title function_">back</span>()</span><br><span class="line">    &#125;,</span><br><span class="line">    <span class="comment">// 前进</span></span><br><span class="line">    <span class="title function_">forward</span>(<span class="params"></span>) &#123;</span><br><span class="line">        <span class="variable language_">this</span>.<span class="property">$router</span>.<span class="title function_">forward</span>()</span><br><span class="line">    &#125;,</span><br><span class="line">    <span class="title function_">go</span>(<span class="params"></span>) &#123;</span><br><span class="line">        <span class="comment">//前进或，后退n步</span></span><br><span class="line">        <span class="variable language_">this</span>.<span class="property">$router</span>.<span class="title function_">go</span>(-<span class="number">2</span>)</span><br><span class="line">    &#125;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure></li></ol><h5 id="缓存"><a href="#缓存" class="headerlink" title="缓存"></a>缓存</h5><blockquote><p>让对应组件路由保持挂载，不销毁</p></blockquote><figure class="highlight html"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br></pre></td><td class="code"><pre><span class="line"> <span class="comment">&lt;!-- 缓存include=&#x27;xxx&#x27; xxx是组件名也就是组件中的name属性--&gt;</span></span><br><span class="line"><span class="tag">&lt;<span class="name">keep-alive</span> <span class="attr">include</span>=<span class="string">&quot;xxx&quot;</span>&gt;</span></span><br><span class="line">    <span class="tag">&lt;<span class="name">router-view</span>&gt;</span><span class="tag">&lt;/<span class="name">router-view</span>&gt;</span></span><br><span class="line"><span class="tag">&lt;/<span class="name">keep-alive</span>&gt;</span></span><br></pre></td></tr></table></figure>]]></content>
    
    
      
      
    <summary type="html">&lt;h3 id=&quot;JavaScript基础知识&quot;&gt;&lt;a href=&quot;#JavaScript基础知识&quot; class=&quot;headerlink&quot; title=&quot;JavaScript基础知识&quot;&gt;&lt;/a&gt;JavaScript基础知识&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;ES6语法规范&lt;/li&gt;
&lt;li</summary>
      
    
    
    
    
    <category term="Vue2" scheme="https://www.aurora0508.top/tags/Vue2/"/>
    
  </entry>
  
  <entry>
    <title>node.js的基本使用</title>
    <link href="https://www.aurora0508.top/posts/822e8c32.html"/>
    <id>https://www.aurora0508.top/posts/822e8c32.html</id>
    <published>2022-09-18T16:20:15.000Z</published>
    <updated>2024-03-18T07:50:26.749Z</updated>
    
    <content type="html"><![CDATA[<h3 id="Node-js"><a href="#Node-js" class="headerlink" title="Node.js"></a>Node.js</h3><hr><p><strong>前提引入</strong></p><blockquote><p>javascript<br>变量<br>数据类型<br>循环<br>分支<br>判断<br>函数<br>this<br>作用域<br>DOM BOM<br>基于XMLHttpRequest的ajax</p></blockquote><p>浏览器的javascript解析引擎<br>Chrome V8<br>DOM API<br>BOM API<br>AJAX API</p><ol><li>浏览器提供了内置的api,然后我们进行调用</li><li>浏览器中的javascript运行环境<ul><li>v8 引擎 解析执行code</li><li>内置api 提供特殊的接口</li></ul></li></ol><p><em>javascript依靠node也可以做后端</em></p><h3 id="node-后端运行环境"><a href="#node-后端运行环境" class="headerlink" title="node 后端运行环境"></a>node 后端运行环境</h3><p><em>what is Node.js</em><br>JavaScript runtime built on Chorme v8 javascript engine<br>基于v8 引擎的javascript运行环境<br><div class="tip warning faa-horizontal animated"><p>注意</p></div></p><ol><li>浏览器是javascript 的前端运行环境</li><li>Node.js是JavaScript的后端运行环境</li><li>Node.js 中无法调用DOM和BOM等浏览器内置api</li></ol><h3 id="Node-js-what-do"><a href="#Node-js-what-do" class="headerlink" title="Node.js what do ?"></a>Node.js what do ?</h3><p>快速构建Web应用 …<br><div class="note primary no-icon flat"><p>学习路径：javascript基础语法+Node.js内置api模块(fs,path,http)+第三方api模块(express、mysql)</p></div></p><h3 id="Node-js安装"><a href="#Node-js安装" class="headerlink" title="Node.js安装"></a>Node.js安装</h3><p><img src="https://pic.imgdb.cn/item/6327454f16f2c2beb1d15418.png" alt="node"><br><div class="note primary no-icon flat"><p>LTS 稳定版</p></div><br><div class="note primary no-icon flat"><p>Current 新特性</p></div></p><h3 id="node-模块"><a href="#node-模块" class="headerlink" title="node 模块"></a>node 模块</h3><h4 id="模块加载机制"><a href="#模块加载机制" class="headerlink" title="模块加载机制"></a>模块加载机制</h4><ol><li>优先从缓存中加载</li><li>内置模块的加载优先级最倒</li><li>在加载模块时，如果没有执行./或../ 则node 会把它当做内置模块或第三方模块进行加载</li><li>在导入模块时，如果没有加扩展名，node会按照顺序加载文件<ul><li>按照确切的文件名加载</li><li>补全.js扩展名</li><li>补全.json扩展名</li><li>补全.node 扩展名</li><li>加载失败</li></ul></li><li>第三方模块加载机制<br>从当前的父目录开始，如果没有找到第三方模块，逐级向上寻找指导根目录</li><li>目录作为模块<ul><li>package.json 指向main方法指向的.js文件</li><li>没有package.json文件加载index.js</li></ul></li></ol><h4 id="自定义模块"><a href="#自定义模块" class="headerlink" title="自定义模块"></a>自定义模块</h4><h4 id="fs-文件系统模块"><a href="#fs-文件系统模块" class="headerlink" title="fs 文件系统模块"></a>fs 文件系统模块</h4><figure class="highlight js"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">const</span> fs = <span class="built_in">require</span>(<span class="string">&#x27;fs&#x27;</span>)</span><br><span class="line">fs.<span class="title function_">readFile</span>()</span><br><span class="line">fs.<span class="title function_">writeFile</span>()</span><br></pre></td></tr></table></figure><h4 id="path-路劲模块"><a href="#path-路劲模块" class="headerlink" title="path 路劲模块"></a>path 路劲模块</h4><figure class="highlight js"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">const</span> path=<span class="built_in">require</span>(<span class="string">&#x27;path&#x27;</span>)</span><br><span class="line">path.<span class="title function_">join</span>()</span><br><span class="line">path.<span class="title function_">basename</span>()</span><br></pre></td></tr></table></figure><h4 id="作用域"><a href="#作用域" class="headerlink" title="作用域"></a>作用域</h4><p><strong>向外共享模块作用域中的成员</strong><br><figure class="highlight js"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line"><span class="variable language_">module</span>.<span class="property">exports</span> <span class="comment">//将模块内的成员共享出去，供外界使用</span></span><br></pre></td></tr></table></figure><br><strong>最终以module.exports为准</strong><br>为了不发生混乱要么使用exports或module.exports之一</p><h4 id="node-js中的模块规范化"><a href="#node-js中的模块规范化" class="headerlink" title="node.js中的模块规范化"></a>node.js中的模块规范化</h4><ol><li>CommonJs规定了模块的特性和各模块之间如何相互依赖</li><li>加载某个模时，其实是加载该模块的module.exports属性，require()方法用于加载模块</li></ol><h3 id="npm包"><a href="#npm包" class="headerlink" title="npm包"></a>npm包</h3><ol><li>node.js第三方模块又叫<strong>包</strong></li><li>基于内置模块封装</li><li><strong>包</strong>和<strong>内置模块</strong>类似于<strong>JQuery</strong>和<strong>浏览器内置API</strong>之间的关系</li></ol><p>安装包<br><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br></pre></td><td class="code"><pre><span class="line">npm install 包名</span><br><span class="line">npm i 报名</span><br><span class="line"><span class="comment">#安装指定版本</span></span><br><span class="line">npm i @xx.xx.x </span><br></pre></td></tr></table></figure></p><h4 id="包管理配置文件"><a href="#包管理配置文件" class="headerlink" title="包管理配置文件"></a>包管理配置文件</h4><p><code>package.json</code><br><div class="note primary no-icon flat"><p>在执行命令所在的目录中，快速新建package.json 文件</p></div><br><figure class="highlight js"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">npm init -y</span><br></pre></td></tr></table></figure><br>npm包管理工具会自动把包管理名称和版本号记录在package.json中</p><p><strong>当node_modules文件夹被删除后</strong><br><figure class="highlight js"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment">// 一次性安装package.json中的所用包或指定的包</span></span><br><span class="line">npm i</span><br><span class="line">npm i 包名</span><br></pre></td></tr></table></figure><br><strong>卸载包</strong><br><figure class="highlight js"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">npm uninstall 包名</span><br></pre></td></tr></table></figure><br><strong>如果某些包只在开发中使用上线后不会用到</strong></p><ul><li>将该包放到devDependencies 节点中<figure class="highlight js"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line">npm i 包名 -D</span><br><span class="line"><span class="comment">// 或</span></span><br><span class="line">npm i 包名 --save-dev</span><br></pre></td></tr></table></figure></li></ul><p><strong>如果某些包在开发和上线后都会用到</strong></p><ul><li>将该包放到dependencies 节点中<figure class="highlight js"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">npm i 包名 --save </span><br></pre></td></tr></table></figure></li></ul><p><strong>解决包下载包慢问题</strong></p><ul><li>默认国外</li></ul><p>使用国内镜像<br><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br></pre></td><td class="code"><pre><span class="line">淘宝npm镜像</span><br><span class="line"> ·搜索地址：http://npm.taobao.org/</span><br><span class="line">           https://registry.npmmirror.com/</span><br><span class="line"> ·registry地址：http://registry.npm.taobao.org/</span><br></pre></td></tr></table></figure><br><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line">cnpmjs镜像</span><br><span class="line"> ·搜索地址：http://cnpmjs.org/</span><br><span class="line"> ·registry地址：http://r.cnpmjs.org/</span><br></pre></td></tr></table></figure><br><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 查看当前下包镜像源</span></span><br><span class="line">npm config get registry</span><br><span class="line"><span class="comment"># 切换镜像为淘宝镜像</span></span><br><span class="line">npm config <span class="built_in">set</span> registry=http://registry.npm.taobao.org/</span><br><span class="line"><span class="comment"># 检查镜像源是否配置成功</span></span><br><span class="line">npm config get registry</span><br></pre></td></tr></table></figure></p><p><strong>永久配置</strong><br><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">npm config <span class="built_in">set</span> registry https://registry.npm.taobao.org</span><br></pre></td></tr></table></figure><br><strong>还原配置</strong><br><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># https://registry.npmjs.org/</span></span><br><span class="line">npm config <span class="built_in">set</span> registry https://registry.npmjs.org/</span><br></pre></td></tr></table></figure><br>淘宝npm镜像站全新上线，Web界面地址：<a href="https://npmmirror.com">https://npmmirror.com</a>；npm 客户端使用地址：<a href="https://registry.npmmirror.com/">https://registry.npmmirror.com/</a></p><h4 id="nrm"><a href="#nrm" class="headerlink" title="nrm"></a>nrm</h4><p>快速查看和切换下包镜像源<br><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 通过npm包管理器，将nrm安装为全局可用工具</span></span><br><span class="line">npm i nrm -g</span><br><span class="line"><span class="comment"># 查看所有可用镜像源</span></span><br><span class="line">nrm <span class="built_in">ls</span></span><br><span class="line"><span class="comment"># 下载包镜像源切换为taobao</span></span><br><span class="line">nrm use taobao</span><br></pre></td></tr></table></figure></p><h4 id="包的分类"><a href="#包的分类" class="headerlink" title="包的分类"></a>包的分类</h4><p>项目包分为两类:</p><ul><li>开发依赖包 (devDependencies 结点中的包，只在开开发期间用到) </li><li>核心依赖包 (dependencies 结点中的包，在开发期间和项目上线都会用到)</li></ul><p><strong>全局包</strong><br><em>我的</em><br>D:\nodejs\node_global\node_modules<br><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 安装全局包 -g</span></span><br><span class="line">npm i [package_name] -g</span><br><span class="line">npm install [package_name] -g </span><br></pre></td></tr></table></figure><br>判断是否要安装全局包看<a href="https://www.npmjs.com/">官方文档</a></p><p><strong>包的分类</strong><br><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 将i5ting_toc安装为全局包</span></span><br><span class="line">npm install -g i5ting_toc</span><br><span class="line"><span class="comment"># 调用i5ting_toc 轻松实现md转html的功能</span></span><br><span class="line">i5ting_toc -f 要转换的.md文件路径 -o</span><br></pre></td></tr></table></figure></p><h3 id="发布自己的包"><a href="#发布自己的包" class="headerlink" title="发布自己的包"></a>发布自己的包</h3><ol><li>先在npm官网注册账号，让后在终端执行以下<br><a href="https://www.npmjs.com/">npm官网</a></li><li>发布前看一看npm镜像是不是官方的镜像若不是则要切换过来（切换为官方镜像） <figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line">nrm <span class="built_in">ls</span> <span class="comment"># 查看所有镜像</span></span><br><span class="line">npm config get registry <span class="comment"># 查看当前镜像</span></span><br><span class="line">nrm use xxx(镜像名)  <span class="comment"># 切换镜像</span></span><br></pre></td></tr></table></figure></li><li><p>切换后执行以下</p> <figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br></pre></td><td class="code"><pre><span class="line">PS D:\Web前端学习\NodeJsStudy&gt; npm login</span><br><span class="line">Username: lang1210  <span class="comment"># 用户名</span></span><br><span class="line">Password:     <span class="comment"># 密码（会被隐藏）</span></span><br><span class="line">Email: (this IS public) 2933129083@qq.com  <span class="comment">#电子邮件</span></span><br><span class="line">npm notice Please check your email <span class="keyword">for</span> a one-time password (OTP)</span><br><span class="line"><span class="comment"># 输入npm 发来的邮件里的OPT code (这里是30736811 )</span></span><br><span class="line">Enter one-time password from your authenticator app: 30736811 </span><br><span class="line"><span class="comment"># 成功后的结果</span></span><br><span class="line">Logged <span class="keyword">in</span> as lang1210 on https://registry.npmjs.org/.</span><br></pre></td></tr></table></figure></li><li><p>发布</p><div class="tip warning faa-horizontal animated"><p>注意包名不能相同，发布前先在官网看一看有没有和自己同名的包</p></div><p>切换到包的目录下执行</p> <figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">npm publish</span><br></pre></td></tr></table></figure><div class="tip success faa-horizontal animated"><p>success</p></div> <figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br></pre></td><td class="code"><pre><span class="line">PS D:\Web前端学习\NodeJsStudy&gt; <span class="built_in">cd</span> .\alang-tools\</span><br><span class="line">PS D:\Web前端学习\NodeJsStudy\alang-tools&gt; npm publish</span><br><span class="line">npm notice</span><br><span class="line">npm notice package: alang-tools@1.0.0</span><br><span class="line">npm notice === Tarball Contents ===  </span><br><span class="line">npm notice 364B  dist/01.test.dev.js       </span><br><span class="line">npm notice 535B  src/dist/dateFormat.dev.js</span><br><span class="line">npm notice 565B  src/dateFormat.js</span><br><span class="line">npm notice 727B  src/dist/htmlEscape.dev.js</span><br><span class="line">npm notice 831B  src/htmlEscape.js</span><br><span class="line">npm notice 1.2kB dist/index.dev.js</span><br><span class="line">npm notice 260B  index.js</span><br><span class="line">npm notice 226B  package.json</span><br><span class="line">npm notice 701B  README.md</span><br><span class="line">npm notice === Tarball Details ===</span><br><span class="line">npm notice name:          alang-tools</span><br><span class="line">npm notice version:       1.0.0</span><br><span class="line">npm notice package size:  2.1 kB</span><br><span class="line">npm notice unpacked size: 5.5 kB</span><br><span class="line">npm notice shasum:        682e3bfec7a63d51a9fbab0916468a754fdfec43</span><br><span class="line">npm notice integrity:     sha512-OdnieY0Ir5lxS[...]MfyyyJfVi/n/Q==</span><br><span class="line">npm notice total files:   9</span><br><span class="line">npm notice</span><br><span class="line">+ alang-tools@1.0.0</span><br></pre></td></tr></table></figure></li><li><p>删除包</p> <figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">npm unpublish 包名 --force</span><br></pre></td></tr></table></figure><div class="tip warning faa-horizontal animated"><p>注意</p></div><p> (1) 只能删除72小时内发布的包<br> (2) 删除的包，在24小时之内不允许重复发布<br> (3) 要慎重，不要发没意义的包（练练手可还行）</p></li></ol><h3 id="express"><a href="#express" class="headerlink" title="express"></a>express</h3><p><a href="https://www.expressjs.com.cn/starter/installing.html">官方文档</a></p><ol><li>express基于内置http模块封装得到（提高开发效率）</li><li>类似于Web Api和Jquery 的关系</li><li>能做什么<ul><li>Web网站服务器</li><li>API 接口服务器</li></ul></li><li>安装<br><code>npm install express --save</code></li><li>创建web服务器</li><li>托管静态资源<ul><li>express.static</li></ul></li><li>自动启动项目（修改代码后不需重启）<br>nodemon test.js</li><li>路由<br>客户端请求与服务端处理函数之间的额映射关系<br>路由匹配</li></ol><h4 id="模块化路由"><a href="#模块化路由" class="headerlink" title="模块化路由"></a>模块化路由</h4><p>不挂载在app上</p><ol><li>创建路由.js文件</li><li>调用express.Router()</li><li>向路由对象上挂载具体的路由</li><li>使用module.exports()向外分享路由对象</li><li>使用app.use()函数注册路由模块</li></ol><h4 id="中间件"><a href="#中间件" class="headerlink" title="中间件"></a>中间件</h4><p>中间件函数的形参列表中，必须包含next参数<br><figure class="highlight js"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line">app.<span class="title function_">get</span>(<span class="string">&#x27;/&#x27;</span>,<span class="keyword">function</span>(<span class="params">req,res,next</span>)&#123;</span><br><span class="line">    <span class="title function_">next</span>()</span><br><span class="line">&#125;)</span><br></pre></td></tr></table></figure><br>实现对某个中间件连续调用的关键，它表示把流转关系转交给下一个中间件或路由<br><img src="https://pic.imgdb.cn/item/6327455116f2c2beb1d155dd.png" alt="中间件"></p><ul><li>路由之前定义中间件</li><li>调用next()之后不能写其他的代码</li><li>应用级别的中间件绑定到了app上，路由级别的中间件绑定到了router上</li></ul><ol><li>错误级别的中间件在路由之后</li><li>express 内置中间件<figure class="highlight js"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line">express.<span class="title function_">static</span>()</span><br><span class="line">express.<span class="title function_">json</span>()</span><br><span class="line">express.<span class="title function_">urlencode</span>(&#123;<span class="attr">extend</span>:<span class="literal">false</span>&#125;)</span><br></pre></td></tr></table></figure></li></ol><h4 id="静态资源管理"><a href="#静态资源管理" class="headerlink" title="静态资源管理"></a>静态资源管理</h4><h4 id="路由匹配"><a href="#路由匹配" class="headerlink" title="路由匹配"></a>路由匹配</h4><h4 id="ExpressApi"><a href="#ExpressApi" class="headerlink" title="ExpressApi"></a>ExpressApi</h4><h5 id="接口跨域问题-access-control-allow"><a href="#接口跨域问题-access-control-allow" class="headerlink" title="接口跨域问题 access-control-allow-"></a>接口跨域问题 access-control-allow-</h5><ul><li>origin</li><li>header</li><li>methods<br>res.setOrigin()<br>ser.setHeader()</li></ul><h5 id="使用cors中间件"><a href="#使用cors中间件" class="headerlink" title="使用cors中间件"></a>使用cors中间件</h5><ol><li>npm instll cors</li><li>const cors=require(‘cors’)</li><li>app.use(cors())</li></ol><h5 id="简单请求和预检请求"><a href="#简单请求和预检请求" class="headerlink" title="简单请求和预检请求"></a>简单请求和预检请求</h5><pre><code>简单请求1次预检请求2次|  简单请求     |  预检请求   || :---        |    :----:   | :----:| | 客户端与服务器      | 1      |2 (OPTION成功之后)|| 类别  | post get        | delete header|</code></pre><h5 id="JSONP"><a href="#JSONP" class="headerlink" title="JSONP"></a>JSONP</h5><h3 id="mysql-数据库操作"><a href="#mysql-数据库操作" class="headerlink" title="mysql 数据库操作"></a>mysql 数据库操作</h3><figure class="highlight js"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment">// 安装mysql包</span></span><br><span class="line">npm i mysql</span><br><span class="line"><span class="comment">// 导入</span></span><br><span class="line"><span class="keyword">const</span> mysql = <span class="built_in">require</span>(<span class="string">&#x27;mysql&#x27;</span>)</span><br><span class="line"><span class="comment">// 连接</span></span><br><span class="line"><span class="keyword">const</span> conn = mysql.<span class="title function_">createPool</span>(&#123;</span><br><span class="line">    <span class="attr">host</span>: <span class="string">&#x27;127.0.0.1&#x27;</span>,</span><br><span class="line">    <span class="attr">port</span>: <span class="number">3306</span>,</span><br><span class="line">    <span class="attr">user</span>: <span class="string">&#x27;root&#x27;</span>,</span><br><span class="line">    <span class="attr">password</span>: <span class="string">&#x27;password&#x27;</span>,</span><br><span class="line">    <span class="attr">database</span>: <span class="string">&#x27;databaseName&#x27;</span></span><br><span class="line">&#125;)</span><br><span class="line"><span class="comment">// 操作</span></span><br><span class="line">conn.<span class="title function_">query</span>(sql, [params1,params2...],<span class="function">(<span class="params">err, results</span>) =&gt;</span> &#123;</span><br><span class="line">    <span class="keyword">if</span> (err) <span class="keyword">return</span> <span class="variable language_">console</span>.<span class="title function_">log</span>(err.<span class="property">message</span>);</span><br><span class="line">&#125;)</span><br></pre></td></tr></table></figure><h3 id="Web开发模式"><a href="#Web开发模式" class="headerlink" title="Web开发模式"></a>Web开发模式</h3><ol><li>前后端分离<ul><li>前端UI</li><li>后端API</li></ul></li><li>根据具体业务场景<ul><li>良好SEO，服务器渲染（企业级网站）</li><li>交互性好，不考虑SEO，前后端分离（后台管理）</li></ul></li></ol><h4 id="前后端的身份认证（token-jwt）"><a href="#前后端的身份认证（token-jwt）" class="headerlink" title="前后端的身份认证（token,jwt）"></a>前后端的身份认证（token,jwt）</h4><ol><li>身份认证<ul><li>服务端渲染<ul><li>Session 认证机制</li></ul></li><li>前后端分离<ul><li>JWT认证机制</li></ul></li></ul></li></ol><h4 id="Session认证机制"><a href="#Session认证机制" class="headerlink" title="Session认证机制"></a>Session认证机制</h4><h4 id="前后端分离模式"><a href="#前后端分离模式" class="headerlink" title="前后端分离模式"></a>前后端分离模式</h4><ol><li>后端提供 api，前端通过 ajax 调用接口的开发模式</li><li>减轻服务端的压力</li><li><p>不利于 seo,因为完整的 html 页面在客户端动态拼接完成，所以爬虫无法爬取页面的有效信息（但可通过 vue,react 的 ssr 解决）</p></li><li><p>服务端渲染 session 认证</p></li><li>前后端分离 jwt 认证</li></ol><h4 id="cookie"><a href="#cookie" class="headerlink" title="cookie"></a>cookie</h4><ol><li>自动发送、域名独立、过期时间、4KB 限制</li></ol><h4 id="session"><a href="#session" class="headerlink" title="session"></a>session</h4><ol><li>通过 session 在服务端生成 cookie</li><li>session 使用</li></ol><h4 id="jwt-认证机制"><a href="#jwt-认证机制" class="headerlink" title="jwt 认证机制"></a>jwt 认证机制</h4><ol><li>目前最流行的跨域认证解决方案<br><strong>用户的信息通过 Token 字符串的形式，保存在客户端浏览器中，服务器通过还原 Token 字符串的形式来认证用户身份</strong></li><li>jwt 组成：header,Payload,Signature(格式用逗号分隔：header.Payload.Signature)</li><li><p>每部分的含义</p><ul><li>payload 部分才是真正的用户信息，它是用户信息经过加密后生成的字符串</li><li>header 和 signature 是安全相关的部分，只是为了保证 Token 的安全</li></ul></li><li><p>客户端收到服务器发送的 JWT 后通常将他存储在 loaclStorage 或 sessionStorage 中</p></li><li>JWT 放在 http 请求头的 Authoriaztion 中（<code>Authorization: Bearer &lt;token&gt;</code>）</li><li>express 中使用 jwt</li></ol><p><a href="https://www.npmjs.com/package/express-jwt">express-jwt文档</a><br><a href="https://www.npmjs.com/package/jsonwebtoken">jsonwebtoken文档</a></p><ol><li>加密(jsonwebtoken)解密(express-jwt)将 jwt 字符串还原为 json 对象的 secret 密钥</li></ol>]]></content>
    
    
      
      
    <summary type="html">&lt;h3 id=&quot;Node-js&quot;&gt;&lt;a href=&quot;#Node-js&quot; class=&quot;headerlink&quot; title=&quot;Node.js&quot;&gt;&lt;/a&gt;Node.js&lt;/h3&gt;&lt;hr&gt;
&lt;p&gt;&lt;strong&gt;前提引入&lt;/strong&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;jav</summary>
      
    
    
    
    
    <category term="node" scheme="https://www.aurora0508.top/tags/node/"/>
    
  </entry>
  
  <entry>
    <title>天梯赛练习题</title>
    <link href="https://www.aurora0508.top/posts/220549a8.html"/>
    <id>https://www.aurora0508.top/posts/220549a8.html</id>
    <published>2022-09-16T16:49:23.000Z</published>
    <updated>2024-03-18T07:50:26.741Z</updated>
    
    <content type="html"><![CDATA[<h2 id="PAT-天梯赛练习题"><a href="#PAT-天梯赛练习题" class="headerlink" title="PAT 天梯赛练习题"></a>PAT 天梯赛练习题</h2><h3 id="L1-001-Hello-World"><a href="#L1-001-Hello-World" class="headerlink" title="L1-001 Hello World"></a>L1-001 Hello World</h3><figure class="highlight python"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line"><span class="built_in">print</span>(<span class="string">&quot;Hello World&quot;</span>)</span><br></pre></td></tr></table></figure><h3 id="L1-002-打印沙漏"><a href="#L1-002-打印沙漏" class="headerlink" title="L1-002 打印沙漏"></a>L1-002 打印沙漏</h3><figure class="highlight python"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">import</span> math</span><br><span class="line"></span><br><span class="line"><span class="comment"># n为正整数，s为符号</span></span><br><span class="line">n, s = <span class="built_in">input</span>().split(<span class="string">&quot; &quot;</span>)</span><br><span class="line"></span><br><span class="line">n = <span class="built_in">int</span>(n)</span><br><span class="line">k = <span class="built_in">int</span>(math.sqrt((n+<span class="number">1</span>)/<span class="number">2</span>))</span><br><span class="line"></span><br><span class="line">surplus = n-<span class="number">2</span>*k**<span class="number">2</span>+<span class="number">1</span></span><br><span class="line"></span><br><span class="line"><span class="keyword">for</span> i <span class="keyword">in</span> <span class="built_in">range</span>(k):</span><br><span class="line">    <span class="built_in">print</span>(<span class="string">&quot; &quot;</span>*i, end=<span class="string">&quot;&quot;</span>)</span><br><span class="line">    <span class="built_in">print</span>(s*(<span class="number">2</span>*(k-i)-<span class="number">1</span>))</span><br><span class="line"><span class="keyword">for</span> i <span class="keyword">in</span> <span class="built_in">range</span>(<span class="number">2</span>, k+<span class="number">1</span>):</span><br><span class="line">    <span class="built_in">print</span>(<span class="string">&quot; &quot;</span>*(k-i), end=<span class="string">&quot;&quot;</span>)</span><br><span class="line">    <span class="built_in">print</span>(s*(<span class="number">2</span>*i-<span class="number">1</span>))</span><br><span class="line"><span class="built_in">print</span>(surplus)</span><br><span class="line"></span><br></pre></td></tr></table></figure><h3 id="L1-003-个位数统计"><a href="#L1-003-个位数统计" class="headerlink" title="L1-003 个位数统计"></a>L1-003 个位数统计</h3><figure class="highlight python"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br></pre></td><td class="code"><pre><span class="line"></span><br><span class="line">N = <span class="built_in">input</span>()</span><br><span class="line">d = &#123;&#125;</span><br><span class="line"><span class="string">&quot;&quot;&quot; </span></span><br><span class="line"><span class="string">input:</span></span><br><span class="line"><span class="string">    100311</span></span><br><span class="line"><span class="string">output:</span></span><br><span class="line"><span class="string">    0:2</span></span><br><span class="line"><span class="string">    1:3</span></span><br><span class="line"><span class="string">    3:1</span></span><br><span class="line"><span class="string">&quot;&quot;&quot;</span></span><br><span class="line"><span class="comment"># 将N的每一位作为字典的键，并统计其次数</span></span><br><span class="line"><span class="keyword">for</span> i <span class="keyword">in</span> N:</span><br><span class="line">    d[i] = d.get(i, <span class="number">0</span>)+<span class="number">1</span></span><br><span class="line"></span><br><span class="line"><span class="comment"># 排序后输出</span></span><br><span class="line">lst = <span class="built_in">list</span>(d.items())</span><br><span class="line">lst.sort(key=<span class="keyword">lambda</span> x: x[<span class="number">0</span>])</span><br><span class="line"><span class="keyword">for</span> k <span class="keyword">in</span> lst:</span><br><span class="line">    D, M = k</span><br><span class="line">    <span class="built_in">print</span>(<span class="string">&quot;&#123;&#125;:&#123;&#125;&quot;</span>.<span class="built_in">format</span>(D, M))</span><br><span class="line"></span><br></pre></td></tr></table></figure><h3 id="L1-004-计算摄氏温度"><a href="#L1-004-计算摄氏温度" class="headerlink" title="L1-004 计算摄氏温度"></a>L1-004 计算摄氏温度</h3><div class="tip info"><p>给定一个华氏温度F，本题要求编写程序，计算对应的摄氏温度C。计算公式：C=5×(F−32)/9。题目保证输入与输出均在整型范围内。</p></div><figure class="highlight python"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br></pre></td><td class="code"><pre><span class="line">F = <span class="built_in">int</span>(<span class="built_in">input</span>())</span><br><span class="line">C = <span class="number">5</span>*(F-<span class="number">32</span>)/<span class="number">9</span></span><br><span class="line">C = <span class="built_in">int</span>(C)</span><br><span class="line"><span class="built_in">print</span>(<span class="string">f&quot;Celsius = <span class="subst">&#123;C&#125;</span>&quot;</span>)</span><br></pre></td></tr></table></figure><h3 id="L1-006-连续因子"><a href="#L1-006-连续因子" class="headerlink" title="L1-006 连续因子"></a>L1-006 连续因子</h3><figure class="highlight python"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">import</span> math</span><br><span class="line"><span class="comment"># 最长连续因子个数</span></span><br><span class="line">maxLen = <span class="number">0</span></span><br><span class="line"><span class="comment"># 连续因子</span></span><br><span class="line">resultList = []</span><br><span class="line"><span class="comment"># 标识是否为质数</span></span><br><span class="line">isPrimeNum = <span class="literal">True</span></span><br><span class="line"><span class="comment"># 输入在一行中给出一个正整数 N（1&lt;N&lt;2^31）</span></span><br><span class="line">N = <span class="built_in">int</span>(<span class="built_in">input</span>())</span><br><span class="line"><span class="comment"># 从2开始依次遍历至最大因子</span></span><br><span class="line"><span class="comment"># 输入n后，从2开始到根号N，分别求最长连续因子</span></span><br><span class="line"><span class="keyword">for</span> i <span class="keyword">in</span> <span class="built_in">range</span>(<span class="number">2</span>, <span class="built_in">int</span>(math.sqrt(N))+<span class="number">1</span>):</span><br><span class="line">    tempNum = N</span><br><span class="line">    tempList = []</span><br><span class="line">    start = i</span><br><span class="line">    <span class="comment"># 一轮遍历</span></span><br><span class="line">    <span class="keyword">while</span> tempNum % start == <span class="number">0</span>:</span><br><span class="line">        isPrimeNum = <span class="literal">False</span></span><br><span class="line">        tempNum = tempNum//start</span><br><span class="line">        tempList.append(<span class="built_in">str</span>(start))</span><br><span class="line">        start += <span class="number">1</span></span><br><span class="line">    tempLen = start-i</span><br><span class="line">    <span class="keyword">if</span> tempLen &gt; maxLen:</span><br><span class="line">        resultList = tempList</span><br><span class="line">        maxLen = tempLen</span><br><span class="line"></span><br><span class="line"><span class="keyword">if</span> isPrimeNum == <span class="literal">True</span>:</span><br><span class="line">    <span class="built_in">print</span>(<span class="number">1</span>)</span><br><span class="line">    <span class="built_in">print</span>(N)</span><br><span class="line"><span class="keyword">else</span>:</span><br><span class="line">    <span class="built_in">print</span>(maxLen)</span><br><span class="line">    <span class="built_in">print</span>(<span class="string">&quot;*&quot;</span>.join(resultList))</span><br></pre></td></tr></table></figure><h3 id="l1-007-念数字"><a href="#l1-007-念数字" class="headerlink" title="l1-007 念数字"></a>l1-007 念数字</h3><blockquote><p>输入一个整数，输出每个数字对应的拼音。当整数为负数时，先输出fu字。十个数字对应的拼音如下：</p></blockquote><figure class="highlight python"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 1. 列表</span></span><br><span class="line"><span class="comment"># 末尾没有空格（先输出前n-1项，再输出最后一项）</span></span><br><span class="line">pinyin_list = [<span class="string">&#x27;ling&#x27;</span>, <span class="string">&#x27;yi&#x27;</span>, <span class="string">&#x27;er&#x27;</span>, <span class="string">&#x27;san&#x27;</span>,</span><br><span class="line">               <span class="string">&#x27;si&#x27;</span>, <span class="string">&#x27;wu&#x27;</span>, <span class="string">&#x27;liu&#x27;</span>, <span class="string">&#x27;qi&#x27;</span>, <span class="string">&#x27;ba&#x27;</span>, <span class="string">&#x27;jiu&#x27;</span>]</span><br><span class="line"></span><br><span class="line">num = <span class="built_in">input</span>()</span><br><span class="line"></span><br><span class="line"><span class="keyword">for</span> i <span class="keyword">in</span> num[<span class="number">0</span>:-<span class="number">1</span>]:</span><br><span class="line">    <span class="keyword">if</span> i == <span class="string">&#x27;-&#x27;</span>:</span><br><span class="line">        <span class="built_in">print</span>(<span class="string">f&quot;fu&quot;</span>, end=<span class="string">&#x27; &#x27;</span>)</span><br><span class="line">    <span class="keyword">else</span>:</span><br><span class="line">        <span class="built_in">print</span>(<span class="string">f&quot;<span class="subst">&#123;pinyin_list[<span class="built_in">int</span>(i)]&#125;</span>&quot;</span>, end=<span class="string">&#x27; &#x27;</span>)</span><br><span class="line"></span><br><span class="line"><span class="built_in">print</span>(pinyin_list[<span class="built_in">int</span>(num[-<span class="number">1</span>])])</span><br><span class="line"></span><br><span class="line"><span class="comment"># 2. 字符串拼接（会有额外的内存开销）</span></span><br><span class="line">pinyin_list = [<span class="string">&#x27;ling&#x27;</span>, <span class="string">&#x27;yi&#x27;</span>, <span class="string">&#x27;er&#x27;</span>, <span class="string">&#x27;san&#x27;</span>,</span><br><span class="line">               <span class="string">&#x27;si&#x27;</span>, <span class="string">&#x27;wu&#x27;</span>, <span class="string">&#x27;liu&#x27;</span>, <span class="string">&#x27;qi&#x27;</span>, <span class="string">&#x27;ba&#x27;</span>, <span class="string">&#x27;jiu&#x27;</span>]</span><br><span class="line">num = <span class="built_in">input</span>()</span><br><span class="line">s = <span class="string">&#x27;&#x27;</span></span><br><span class="line"><span class="keyword">for</span> i <span class="keyword">in</span> num:</span><br><span class="line">    <span class="keyword">if</span> i == <span class="string">&#x27;-&#x27;</span>:</span><br><span class="line">        <span class="comment"># print(&quot;fu&quot;,end=&#x27; &#x27;)</span></span><br><span class="line">        s += <span class="string">&quot;fu&quot;</span>+<span class="string">&quot; &quot;</span></span><br><span class="line">    <span class="keyword">else</span>:</span><br><span class="line">        s += <span class="string">f&quot;<span class="subst">&#123;pinyin_list[<span class="built_in">int</span>(i)]&#125;</span>&quot;</span>+<span class="string">&quot; &quot;</span></span><br><span class="line"><span class="built_in">print</span>(s.strip())</span><br><span class="line"></span><br><span class="line"><span class="comment"># 3. 字典(个人比较推荐字典的这种方法，)</span></span><br><span class="line">pinyin_dic = &#123;<span class="string">&#x27;0&#x27;</span>: <span class="string">&#x27;ling&#x27;</span>, <span class="string">&#x27;1&#x27;</span>: <span class="string">&#x27;yi&#x27;</span>, <span class="string">&#x27;2&#x27;</span>: <span class="string">&#x27;er&#x27;</span>, <span class="string">&#x27;3&#x27;</span>: <span class="string">&#x27;san&#x27;</span>,</span><br><span class="line">              <span class="string">&#x27;4&#x27;</span>: <span class="string">&#x27;si&#x27;</span>, <span class="string">&#x27;5&#x27;</span>: <span class="string">&#x27;wu&#x27;</span>, <span class="string">&#x27;6&#x27;</span>: <span class="string">&#x27;liu&#x27;</span>, <span class="string">&#x27;7&#x27;</span>: <span class="string">&#x27;qi&#x27;</span>, <span class="string">&#x27;8&#x27;</span>: <span class="string">&#x27;ba&#x27;</span>, <span class="string">&#x27;9&#x27;</span>: <span class="string">&#x27;jiu&#x27;</span>&#125;</span><br><span class="line">num = <span class="built_in">input</span>()</span><br><span class="line"><span class="keyword">for</span> n <span class="keyword">in</span> num[<span class="number">0</span>:-<span class="number">1</span>]:</span><br><span class="line">    <span class="keyword">if</span> n == <span class="string">&#x27;-&#x27;</span>:</span><br><span class="line">        <span class="built_in">print</span>(<span class="string">&#x27;fu&#x27;</span>, end=<span class="string">&#x27; &#x27;</span>)</span><br><span class="line">    <span class="keyword">else</span>:</span><br><span class="line">        <span class="built_in">print</span>(pinyin_dic[n], end=<span class="string">&#x27; &#x27;</span>)</span><br><span class="line"><span class="built_in">print</span>(pinyin_dic[num[-<span class="number">1</span>]])</span><br></pre></td></tr></table></figure><h3 id="l1-008-求整数段和"><a href="#l1-008-求整数段和" class="headerlink" title="l1-008 求整数段和"></a>l1-008 求整数段和</h3><blockquote><p>给定两个整数A和B，输出从A到B的所有整数以及这些数的和。</p></blockquote><figure class="highlight python"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br></pre></td><td class="code"><pre><span class="line">A, B = <span class="built_in">map</span>(<span class="built_in">int</span>, <span class="built_in">input</span>().split())</span><br><span class="line"><span class="comment"># 总和</span></span><br><span class="line">s = <span class="number">0</span></span><br><span class="line"><span class="comment"># 计数器</span></span><br><span class="line">n = <span class="number">0</span></span><br><span class="line"><span class="comment"># 遍历A-B</span></span><br><span class="line"><span class="keyword">for</span> i <span class="keyword">in</span> <span class="built_in">range</span>(A, B+<span class="number">1</span>):</span><br><span class="line">    <span class="comment"># &gt;5d表示让每个字符右对齐并占五个字符宽度</span></span><br><span class="line">    <span class="built_in">print</span>(<span class="string">&quot;&#123;:&gt;5d&#125;&quot;</span>.<span class="built_in">format</span>(i), end=<span class="string">&#x27;&#x27;</span>)</span><br><span class="line">    s += i</span><br><span class="line">    n += <span class="number">1</span></span><br><span class="line">    <span class="comment"># 一行打印五个数</span></span><br><span class="line">    <span class="keyword">if</span> n % <span class="number">5</span> == <span class="number">0</span>:</span><br><span class="line">        <span class="built_in">print</span>(<span class="string">&quot;\n&quot;</span>, end=<span class="string">&#x27;&#x27;</span>)</span><br><span class="line">        n = <span class="number">0</span></span><br><span class="line">    <span class="comment"># 到最后一个数时换行打印Sum</span></span><br><span class="line">    <span class="keyword">elif</span> i == B:</span><br><span class="line">        <span class="built_in">print</span>(<span class="string">&quot;\n&quot;</span>, end=<span class="string">&#x27;&#x27;</span>)</span><br><span class="line"><span class="built_in">print</span>(<span class="string">f&quot;Sum = <span class="subst">&#123;s&#125;</span>&quot;</span>)</span><br></pre></td></tr></table></figure>]]></content>
    
    
      
      
    <summary type="html">&lt;h2 id=&quot;PAT-天梯赛练习题&quot;&gt;&lt;a href=&quot;#PAT-天梯赛练习题&quot; class=&quot;headerlink&quot; title=&quot;PAT 天梯赛练习题&quot;&gt;&lt;/a&gt;PAT 天梯赛练习题&lt;/h2&gt;&lt;h3 id=&quot;L1-001-Hello-World&quot;&gt;&lt;a href=&quot;#L1-</summary>
      
    
    
    
    
    <category term="PAT" scheme="https://www.aurora0508.top/tags/PAT/"/>
    
  </entry>
  
  <entry>
    <title>Vue2学习</title>
    <link href="https://www.aurora0508.top/posts/a1475bed.html"/>
    <id>https://www.aurora0508.top/posts/a1475bed.html</id>
    <published>2022-09-16T16:00:00.000Z</published>
    <updated>2024-03-18T07:50:26.745Z</updated>
    
    <content type="html"><![CDATA[<p>[toc]</p><h2 id="Vue2学习"><a href="#Vue2学习" class="headerlink" title="Vue2学习"></a>Vue2学习</h2><h3 id="1-Vue基础"><a href="#1-Vue基础" class="headerlink" title="1.Vue基础"></a>1.Vue基础</h3><p style='color:blue'>渐进式JavaScript 框架</p><ol><li>构造用户界面<ul><li>用vue向html页面填充数据</li></ul></li><li>框架，现成的解决方法<ul><li>语法</li><li>指令、组件、路由、Vuex</li></ul></li><li>vue特性<ul><li>数据驱动视图<ul><li>页面依赖的数据—&gt;vue监听—&gt;页面结构</li><li>页面数据发生变化，页面重新渲染</li><li></li></ul></li><li>双向数据绑定<ul><li>form表单负责采集数据，Ajax负责提交数据</li><li>在填写表时，不操作dom，自动把用户填写的内容同步带数据源中<h4 id="MVVM"><a href="#MVVM" class="headerlink" title="MVVM"></a>MVVM</h4>M:model—当前页面渲染时所依赖的数据源<br>V:view—页面结构（视图）<br>VM:ViewModel—Vue实例<br>:warning: 数据驱动视图和双向数据绑定的底层原理是MVVM</li></ul></li></ul></li></ol><h4 id="基本使用"><a href="#基本使用" class="headerlink" title="基本使用"></a>基本使用</h4><figure class="highlight html"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment">&lt;!-- view --&gt;</span></span><br><span class="line">   <span class="tag">&lt;<span class="name">div</span> <span class="attr">id</span>=<span class="string">&quot;app&quot;</span>&gt;</span>&#123;&#123;username&#125;&#125;<span class="tag">&lt;/<span class="name">div</span>&gt;</span></span><br><span class="line">   <span class="comment">&lt;!-- 导入vue 全局就有了Vue这个构造函数 --&gt;</span></span><br><span class="line">   <span class="tag">&lt;<span class="name">script</span> <span class="attr">src</span>=<span class="string">&quot;https://cdn.jsdelivr.net/npm/vue@2/dist/vue.js&quot;</span>&gt;</span><span class="tag">&lt;/<span class="name">script</span>&gt;</span></span><br><span class="line"></span><br><span class="line">   <span class="tag">&lt;<span class="name">script</span>&gt;</span><span class="language-javascript"></span></span><br><span class="line"><span class="language-javascript">       <span class="comment">// 实例化对象 ViewModel</span></span></span><br><span class="line"><span class="language-javascript">       <span class="keyword">const</span> vm = <span class="keyword">new</span> <span class="title class_">Vue</span>(&#123;</span></span><br><span class="line"><span class="language-javascript">           <span class="comment">// 固定写法，表示当前vm实例要控制页面上的那个区域，接受的值是一个选择器</span></span></span><br><span class="line"><span class="language-javascript">           <span class="attr">el</span>: <span class="string">&#x27;#app&#x27;</span>,</span></span><br><span class="line"><span class="language-javascript">           <span class="comment">// model 数据源</span></span></span><br><span class="line"><span class="language-javascript">           <span class="attr">data</span>: &#123;</span></span><br><span class="line"><span class="language-javascript">               <span class="attr">username</span>: <span class="string">&#x27;lang&#x27;</span></span></span><br><span class="line"><span class="language-javascript">           &#125;,</span></span><br><span class="line"><span class="language-javascript">       &#125;)</span></span><br><span class="line"><span class="language-javascript">   </span><span class="tag">&lt;/<span class="name">script</span>&gt;</span></span><br></pre></td></tr></table></figure><h4 id="指令与过滤器"><a href="#指令与过滤器" class="headerlink" title="指令与过滤器"></a>指令与过滤器</h4><ol><li>指令 模板语法 内容渲染</li></ol><ul><li>v-text 渲染数据，但原数据会被覆盖  </li><li><code>&#123;&#123;&#125;&#125;</code>  插值表达式，占位符，用的最多</li><li>v-html 将带标签的字符串渲染html内容</li></ul><p><strong>属性绑定指令</strong></p><ul><li><code>v-bind</code> 简写<code>:</code></li></ul><p><strong>事件绑定</strong></p><ul><li><code>v-on</code> 简写<code>@</code></li></ul><p>实际属性绑定用<code>:</code>，事件绑定用<code>@</code></p><p>:warning:==事件原对象==<br>$event表示原生对象e,防止默认事件被覆盖<br>语法</p><figure class="highlight html"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br></pre></td><td class="code"><pre><span class="line"><span class="tag">&lt;<span class="name">button</span> @<span class="attr">click</span>=<span class="string">&quot;add($event,1)&quot;</span>&gt;</span>click<span class="tag">&lt;/<span class="name">button</span>&gt;</span></span><br><span class="line">methods:&#123;</span><br><span class="line">    add(e,n)&#123;</span><br><span class="line">        count=0;</span><br><span class="line">        this.count+=1</span><br><span class="line">    &#125;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><h4 id="事件修饰符"><a href="#事件修饰符" class="headerlink" title="事件修饰符"></a>事件修饰符</h4><p>阻止默认和冒泡<br><code>e.preventDefault()</code>,<code>e.stopPropagation()</code><br>在Vue中<br><code>@click.stop=&quot;&quot;</code>,<code>@click.prevnet=&quot;&quot;</code><br>语法<br><figure class="highlight js"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br></pre></td><td class="code"><pre><span class="line">&lt;a href=<span class="string">&quot;&quot;</span> @click.<span class="property">prevent</span>=<span class="string">&quot;&quot;</span>&gt;&lt;/a&gt;</span><br><span class="line"><span class="language-xml"><span class="tag">&lt;<span class="name">div</span> @<span class="attr">click</span>=<span class="string">&quot;divenvnt&quot;</span>&gt;</span></span></span><br><span class="line"><span class="language-xml">        <span class="tag">&lt;<span class="name">button</span> @<span class="attr">click.stop</span>=<span class="string">&quot;btnevnet&quot;</span>&gt;</span>点我<span class="tag">&lt;/<span class="name">button</span>&gt;</span></span></span><br><span class="line"><span class="language-xml"><span class="tag">&lt;/<span class="name">div</span>&gt;</span></span></span><br></pre></td></tr></table></figure></p><h4 id="双向绑定"><a href="#双向绑定" class="headerlink" title="双向绑定"></a>双向绑定</h4><ol><li><p>源数据与表单数据互相影响<br>用于表单元素</p><ul><li><code>v-model=&quot;&quot;</code></li></ul></li><li><p>v-bind</p><ul><li><code>v-bind</code></li></ul></li></ol><h4 id="条件渲染"><a href="#条件渲染" class="headerlink" title="条件渲染"></a>条件渲染</h4><p><code>v-if,v-show</code><br>值为：false 时<br>v-if:动态移除元素<br><em>实际开发多用v-if</em><br>v-show:动态为元素设置 display:none</p><h4 id="循环v-for"><a href="#循环v-for" class="headerlink" title="循环v-for"></a>循环v-for</h4><figure class="highlight html"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br></pre></td><td class="code"><pre><span class="line"><span class="tag">&lt;<span class="name">tbody</span>&gt;</span></span><br><span class="line">    <span class="tag">&lt;<span class="name">tr</span> </span></span><br><span class="line"><span class="tag">    <span class="attr">v-for</span>=<span class="string">&quot;(item,index) in list&quot;</span> </span></span><br><span class="line"><span class="tag">    <span class="attr">:key</span>=<span class="string">&quot;item.id&quot;</span> </span></span><br><span class="line"><span class="tag">    <span class="attr">:title</span>=<span class="string">&quot;item.name+index&quot;</span>&gt;</span></span><br><span class="line">        <span class="tag">&lt;<span class="name">td</span>&gt;</span>&#123;&#123;item.id&#125;&#125;<span class="tag">&lt;/<span class="name">td</span>&gt;</span></span><br><span class="line">        <span class="tag">&lt;<span class="name">td</span>&gt;</span>&#123;&#123;item.name&#125;&#125;<span class="tag">&lt;/<span class="name">td</span>&gt;</span></span><br><span class="line">        <span class="tag">&lt;<span class="name">td</span>&gt;</span>&#123;&#123;item.sex&#125;&#125;<span class="tag">&lt;/<span class="name">td</span>&gt;</span></span><br><span class="line">    <span class="tag">&lt;/<span class="name">tr</span>&gt;</span></span><br><span class="line"><span class="tag">&lt;/<span class="name">tbody</span>&gt;</span></span><br></pre></td></tr></table></figure><p>:warning: v-for </p><ol><li>要加key的绑定，拿当前的id，需为字符串或数字,key的值不能<br>重复</li><li>key值必须唯一</li><li>不建议index，它不具有唯一性<figure class="highlight js"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br></pre></td><td class="code"><pre><span class="line">&lt;script&gt;</span><br><span class="line">    <span class="keyword">const</span> vm = <span class="keyword">new</span> <span class="title class_">Vue</span>(&#123;</span><br><span class="line">        <span class="attr">el</span>: <span class="string">&quot;#app&quot;</span>,</span><br><span class="line">        <span class="attr">data</span>: &#123;</span><br><span class="line">            <span class="attr">list</span>: [&#123;</span><br><span class="line">                    <span class="attr">id</span>: <span class="number">1</span>,</span><br><span class="line">                    <span class="attr">name</span>: <span class="string">&#x27;lang&#x27;</span>,</span><br><span class="line">                    <span class="attr">sex</span>: <span class="string">&#x27;男&#x27;</span></span><br><span class="line">                &#125;,</span><br><span class="line">                &#123;</span><br><span class="line">                    <span class="attr">id</span>: <span class="number">2</span>,</span><br><span class="line">                    <span class="attr">name</span>: <span class="string">&#x27;zhang&#x27;</span>,</span><br><span class="line">                    <span class="attr">sex</span>: <span class="string">&#x27;女&#x27;</span></span><br><span class="line">                &#125;,</span><br><span class="line">                &#123;</span><br><span class="line">                    <span class="attr">id</span>: <span class="number">3</span>,</span><br><span class="line">                    <span class="attr">name</span>: <span class="string">&#x27;lisi&#x27;</span>,</span><br><span class="line">                    <span class="attr">sex</span>: <span class="string">&#x27;男&#x27;</span></span><br><span class="line">                &#125;</span><br><span class="line">            ]</span><br><span class="line"></span><br><span class="line">        &#125;</span><br><span class="line">    &#125;)</span><br><span class="line">&lt;/script&gt;</span><br></pre></td></tr></table></figure><h4 id="过滤器filter"><a href="#过滤器filter" class="headerlink" title="过滤器filter"></a>过滤器filter</h4></li><li>局部过滤器<ul><li>在当前绑定的el下定义</li></ul></li><li>全局过滤器<ul><li>全局通过Vue.filter()定义</li></ul></li><li>如果全局过滤器与私有过滤器重名则使用私有的。</li><li>过滤器传参<br>Vue.filter(‘’,function(msg,arg1,arg2){})</li></ol><h4 id="侦听器watch"><a href="#侦听器watch" class="headerlink" title="侦听器watch"></a>侦听器watch</h4><ol><li>方法格式<ul><li>无法在刚进入页面的时候，自动触发</li><li>如果侦听器是一个对象，若对象中的属性发生了变化，不会触发侦听器</li></ul></li><li>对象格式<ul><li>可通过<strong>immediate</strong>让侦听器自动触发</li><li>可通过deep选项，让侦听器深度监听每个属性的变化</li></ul></li></ol><h4 id="计算属性computed"><a href="#计算属性computed" class="headerlink" title="计算属性computed"></a>计算属性computed</h4><ol><li>需要在computed里面定义为方法</li><li>当做普通的属性使用即可（会被挂载到vm上）</li><li>实现了代码复用</li></ol><h4 id="axios"><a href="#axios" class="headerlink" title="axios"></a>axios</h4><p><strong>专注以网络请求</strong><br>官方解释：<em>Axios 是一个基于 promise 的网络请求库，可以用于浏览器和 node.js</em></p><ol><li>GET请求<figure class="highlight js"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br></pre></td><td class="code"><pre><span class="line">&lt;script&gt;</span><br><span class="line">    <span class="title function_">axios</span>(&#123;</span><br><span class="line">        <span class="attr">method</span>: <span class="string">&#x27;GET&#x27;</span>,</span><br><span class="line">        <span class="attr">url</span>: <span class="string">&#x27;&#x27;</span>,</span><br><span class="line">        <span class="comment">// get url传参</span></span><br><span class="line">        <span class="attr">params</span>: &#123;</span><br><span class="line">            <span class="attr">id</span>: <span class="number">1</span></span><br><span class="line">        &#125;,</span><br><span class="line">        </span><br><span class="line">    &#125;).<span class="title function_">then</span>(<span class="keyword">function</span> (<span class="params">res</span>) &#123;</span><br><span class="line">        <span class="variable language_">console</span>.<span class="title function_">log</span>(res);</span><br><span class="line">    &#125;)</span><br><span class="line">&lt;/script&gt;</span><br></pre></td></tr></table></figure>2.POST请求<figure class="highlight js"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br></pre></td><td class="code"><pre><span class="line">&lt;script&gt;</span><br><span class="line">    (<span class="keyword">async</span> <span class="keyword">function</span> (<span class="params"></span>) &#123;</span><br><span class="line">        <span class="comment">// 解构</span></span><br><span class="line">        <span class="keyword">var</span> &#123;</span><br><span class="line">            data</span><br><span class="line">        &#125; = <span class="keyword">await</span> <span class="title function_">axios</span>(&#123;</span><br><span class="line">            <span class="attr">method</span>: <span class="string">&#x27;POST&#x27;</span>,</span><br><span class="line">            <span class="attr">url</span>: <span class="string">&#x27;http://www.liulongbin.top:3006/api/post&#x27;</span>,</span><br><span class="line">            <span class="attr">data</span>: &#123;</span><br><span class="line">                <span class="attr">name</span>: <span class="string">&#x27;ls&#x27;</span>,</span><br><span class="line">                <span class="attr">age</span>: <span class="number">90</span></span><br><span class="line">            &#125;</span><br><span class="line">        &#125;)</span><br><span class="line">        <span class="variable language_">console</span>.<span class="title function_">log</span>(data);</span><br><span class="line">    &#125;())</span><br><span class="line">&lt;/script&gt;</span><br></pre></td></tr></table></figure><div class="tip warning faa-horizontal animated"><p>如果调用某个方法返回值是promise实例，则前面可以添加await,且只能用在async修饰的方法中</p></div></li></ol><h3 id="2-Vue-cli"><a href="#2-Vue-cli" class="headerlink" title="2.Vue-cli"></a>2.Vue-cli</h3><p><em>单页面应用程序</em><br>专注开发，不在专注于webpack的配置</p><ol><li>安装<figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">npm install -g @vue/cli</span><br></pre></td></tr></table></figure></li><li>创建项目<figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">vue create projectName</span><br></pre></td></tr></table></figure><div class="tip warning faa-horizontal animated"><p>注意:项目名称必须为英文且均为小写，不然会报错</p></div></li></ol><h3 id="3-项目运行流程"><a href="#3-项目运行流程" class="headerlink" title="3.项目运行流程"></a>3.项目运行流程</h3><p>通过main.js把App.vue渲染到index.html指定区域中</p><h3 id="4-Vue组件"><a href="#4-Vue组件" class="headerlink" title="4.Vue组件"></a>4.Vue组件</h3><p>每个.vue组件由三部分组成</p><ul><li>template组件的模板结构</li><li>script组件的JavaScript行为</li><li>style组件样式</li></ul><h4 id="组件之间的关系"><a href="#组件之间的关系" class="headerlink" title="组件之间的关系"></a>组件之间的关系</h4><ol><li>组件在封装好之后彼此之间是相互独立的，不存在父子关系。</li><li>使用的时候才行形成父子或兄弟关系。</li></ol><h4 id="使用组件"><a href="#使用组件" class="headerlink" title="使用组件"></a>使用组件</h4><p>使用import导入需要的组件</p><p>在根组件App.vue中<br><code>import Test from &#39;@/components/Test.vue&#39;</code></p><div class="tip info"><p>‘@’代表scr目录</p></div><p><em>引入scr目录在webpack.config.js中的写法</em><br><figure class="highlight js"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br></pre></td><td class="code"><pre><span class="line">webpack.<span class="property">config</span>.<span class="property">js</span></span><br><span class="line"><span class="variable language_">module</span>.<span class="property">exports</span>=&#123;</span><br><span class="line">    <span class="attr">resolve</span>:&#123;</span><br><span class="line">        <span class="attr">alias</span>:&#123;</span><br><span class="line">          @:path.<span class="title function_">join</span>(__dirname,<span class="string">&#x27;/scr&#x27;</span>)  </span><br><span class="line">        &#125;</span><br><span class="line">    &#125;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><br>使用components结点注册组件<br><figure class="highlight js"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">export</span> <span class="keyword">default</span>&#123;</span><br><span class="line">    <span class="attr">components</span>:&#123;</span><br><span class="line">        <span class="title class_">Test</span></span><br><span class="line">    &#125;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><br> 以标签形式使用刚注册的Test组件<br><figure class="highlight html"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><span class="line"><span class="tag">&lt;<span class="name">template</span>&gt;</span></span><br><span class="line">    <span class="tag">&lt;<span class="name">div</span>&gt;</span></span><br><span class="line">        <span class="tag">&lt;<span class="name">Test</span>&gt;</span><span class="tag">&lt;/<span class="name">Test</span>&gt;</span></span><br><span class="line">    <span class="tag">&lt;/<span class="name">div</span>&gt;</span></span><br><span class="line"><span class="tag">&lt;/<span class="name">template</span>&gt;</span></span><br></pre></td></tr></table></figure></p><h4 id="私有组件"><a href="#私有组件" class="headerlink" title="私有组件"></a>私有组件</h4><h4 id="全局组件"><a href="#全局组件" class="headerlink" title="全局组件"></a>全局组件</h4><p><strong>注册全局组件：</strong><br>在vue项目的main.js文件中，通过<code>Vue.components(&#39;myTest&#39;,Test)</code>方法，可以注册全局组件</p><h4 id="组件的props"><a href="#组件的props" class="headerlink" title="组件的props"></a>组件的props</h4><ol><li>自定义属性，使用者自定义属性，为当前组件指定初始值</li><li>在封装通用组件的时候，合理的使用props可以提高组件之间的复用性</li></ol><p>用法:<br><code>props:[&#39;init1&#39;,&#39;init2&#39;,&#39;inti2&#39;,&#39;init4&#39;,...]</code></p><div class="tip warning faa-horizontal animated-hover"><p>prop只读</p></div><h4 id="样式冲突"><a href="#样式冲突" class="headerlink" title="样式冲突"></a>样式冲突</h4><ol><li>在style中加入scoped<code>&lt;style scoped&gt;&lt;/style&gt;</code>只渲染自己的样式</li><li>父组件改变子组件的样式在元素前面加<code>/deep/</code></li></ol><figure class="highlight css"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line">/deep/<span class="selector-tag">h2</span> &#123;</span><br><span class="line">    <span class="attribute">color</span>: white;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><h4 id="vue模板"><a href="#vue模板" class="headerlink" title=".vue模板"></a>.vue模板</h4><p>最终都会被<code>vue-template-compiler</code>编译为js文件</p><h4 id="组件的生命周期"><a href="#组件的生命周期" class="headerlink" title="组件的生命周期"></a>组件的生命周期</h4><ol><li>创建一个组件的实例</li><li>生命周期<ul><li>一个组件从创建-&gt;运行-&gt;销毁</li><li>卡时间点（卡bug）<ul><li>beforeCreate-&gt;created-&gt;breforeMount-&gt;mounted</li><li>breforeUpdate-&gt;update</li><li>breforeDestory-&gt;destory<br><img src="https://cn.vuejs.org/assets/lifecycle.16e4c08e.png" alt="https://cn.vuejs.org/assets/lifecycle.16e4c08e.png"></li></ul></li></ul></li></ol><p><strong>beforeCreate</strong></p><ol><li>此阶段props,data,methods不能访问</li></ol><p><strong>created</strong></p><ol><li>此阶段可发起ajax请求</li><li>不能操作DOM,文档还没创建</li></ol><p><strong>beforeMount</strong></p><ol><li>将要将内存中编译好的HTML结构进行渲染</li><li>不能操作DOM</li></ol><p><strong>mounted</strong></p><ol><li>浏览器已包含DOM结构</li></ol><p><strong>breforeUpdate</strong></p><h4 id="组件之间的数据共享"><a href="#组件之间的数据共享" class="headerlink" title="组件之间的数据共享"></a>组件之间的数据共享</h4><ol><li>父向子<br>自定义属性</li><li>子向父<br>自定义事件</li><li>兄弟之间<br>eventBus</li></ol><ul><li>创建eventBus.js模块，并向外共享Vue实例对象。   </li><li>在数据发送方，调用<code>bus.$emit(事件名称，要发送的数据)</code>方法，触发自定义事件。</li><li>在数据接收方，调用<code>bus.$on(事件名称，事件处理函数)</code>方法，注册一个自定义事件。</li></ul><h4 id="ref引用"><a href="#ref引用" class="headerlink" title="ref引用"></a>ref引用</h4><p>在不依赖JQuery的情况下，获取DOM元素或组件的引用</p><h4 id="购物车案例"><a href="#购物车案例" class="headerlink" title="购物车案例"></a>购物车案例</h4><h3 id="5-动态组件"><a href="#5-动态组件" class="headerlink" title="5.动态组件"></a>5.动态组件</h3><p><code>&lt;component is=&quot;&quot;&gt;&lt;/component&gt;</code></p><h4 id="保证组件不会被销毁"><a href="#保证组件不会被销毁" class="headerlink" title="保证组件不会被销毁"></a>保证组件不会被销毁</h4><p>将内部组件进行缓存—不销毁</p><figure class="highlight html"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line"><span class="tag">&lt;<span class="name">keep-alive</span>&gt;</span></span><br><span class="line">    <span class="tag">&lt;<span class="name">component</span> <span class="attr">is</span>=<span class="string">&quot;&quot;</span>&gt;</span><span class="tag">&lt;/<span class="name">component</span>&gt;</span></span><br><span class="line"><span class="tag">&lt;/<span class="name">keep-alive</span>&gt;</span></span><br></pre></td></tr></table></figure><p>is:值要渲染的组件名字，是组件在components结点下的注册名称<br>include:指定哪些组件可以被缓存<br>exclude:哪些组将不需要缓存</p><div class="note primary no-icon flat"><p>组件的“注册名称”的主要应用场景是，以标签的形式，把注册好的组件，渲染和使用到页面的结构中</p></div><div class="note success no-icon flat"><p>组件声明时的name名称主要应用场景：结合<code>&lt;keep-alive&gt;</code>标签实现组件的缓存功能，以及在调试工具中看到的组件的name名称</p></div><h4 id="插槽"><a href="#插槽" class="headerlink" title="插槽"></a>插槽</h4><p><code>&lt;solt&gt;&lt;/solt&gt;</code></p><p>vue为<strong>组件的封装者</strong>提供的能力，允许开发者在封装组件时，把<strong>不确定的，希望有用户指定的部分</strong>定义为插槽</p><p>默认情况下，在使用组件的时候，提供的内容都会被填充到default的插槽中</p><ol><li>如果要把指定的内容填充到指定名称的插槽中，需要使用v-slot</li><li>v-slot:后面跟上插槽的名字</li><li>v-slot:不能直接用在元素上，必须在template标签上</li><li>template这个标签，他是一个占位标签，只能能起到包裹的作用，不会被渲染为任何html元素</li><li>v-slot:简写#</li><li>作用域插槽</li></ol><figure class="highlight html"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line"><span class="tag">&lt;<span class="name">slot</span> <span class="attr">name</span>=<span class="string">&quot;content&quot;</span> <span class="attr">msg</span>=<span class="string">&quot;hello&quot;</span> <span class="attr">:user</span>=<span class="string">&quot;userInfo&quot;</span>&gt;</span><span class="tag">&lt;/<span class="name">slot</span>&gt;</span></span><br><span class="line"><span class="tag">&lt;<span class="name">template</span> #<span class="attr">content</span>=<span class="string">&quot;&#123;msg,user&#125;&quot;</span>&gt;</span><span class="tag">&lt;/<span class="name">template</span>&gt;</span></span><br></pre></td></tr></table></figure><h4 id="自定义指令"><a href="#自定义指令" class="headerlink" title="自定义指令"></a>自定义指令</h4><p>在某个组件中<br><figure class="highlight js"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br></pre></td><td class="code"><pre><span class="line"></span><br><span class="line"><span class="attr">directives</span>:&#123;</span><br><span class="line">    <span class="comment">// 定义名为color的指令，指向一个配置对象</span></span><br><span class="line">    <span class="comment">/* color:&#123;</span></span><br><span class="line"><span class="comment">      // 当指向第一次被绑定倒元素上的时候，会立即触发bind函数</span></span><br><span class="line"><span class="comment">      // el 表示color绑定的元素</span></span><br><span class="line"><span class="comment">      bind(el)&#123;</span></span><br><span class="line"><span class="comment">        el.style.color=&#x27;red&#x27;</span></span><br><span class="line"><span class="comment">      &#125;,</span></span><br><span class="line"><span class="comment">       // 第一次不生效</span></span><br><span class="line"><span class="comment">      update(el, binding) &#123;</span></span><br><span class="line"><span class="comment"></span></span><br><span class="line"><span class="comment">        el.style.color = binding.value</span></span><br><span class="line"><span class="comment">      &#125;,</span></span><br><span class="line"><span class="comment">    &#125; */</span></span><br><span class="line">    <span class="comment">// 当color和update里面一样时，可以用以下方式</span></span><br><span class="line">    <span class="title function_">color</span>(<span class="params">el,binding</span>)&#123;</span><br><span class="line">      el.<span class="property">style</span>.<span class="property">color</span> = binding.<span class="property">value</span></span><br><span class="line">    &#125;</span><br><span class="line">&#125;</span><br><span class="line"></span><br></pre></td></tr></table></figure></p><h4 id="全局自定义指令"><a href="#全局自定义指令" class="headerlink" title="全局自定义指令"></a>全局自定义指令</h4><p>在mian.js文件中</p><figure class="highlight js"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment">// 全局自定义指令v-color</span></span><br><span class="line"><span class="title class_">Vue</span>.<span class="title function_">directive</span>(<span class="string">&#x27;color&#x27;</span>, <span class="function">(<span class="params">el, binding</span>) =&gt;</span> &#123;</span><br><span class="line">  el.<span class="property">style</span>.<span class="property">color</span> = binding.<span class="property">value</span></span><br><span class="line">&#125;)</span><br></pre></td></tr></table></figure><h3 id="6-ESLint"><a href="#6-ESLint" class="headerlink" title="6.ESLint"></a>6.ESLint</h3><p><strong>可组装的JavaScript和JSX检查工具</strong><br>插件的安装</p><ul><li>ESLint</li><li>prettier</li></ul><p>配置，在settings.json文件中加入<br><figure class="highlight json"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment">// ESlint插件的配置</span></span><br><span class="line"><span class="attr">&quot;editor.codeActionsOnSave&quot;</span><span class="punctuation">:</span> <span class="punctuation">&#123;</span></span><br><span class="line">    <span class="attr">&quot;source.fixAll&quot;</span><span class="punctuation">:</span> <span class="literal"><span class="keyword">true</span></span></span><br><span class="line"><span class="punctuation">&#125;</span><span class="punctuation">,</span></span><br><span class="line"><span class="comment">// .prettierrc文件的位置（最好在C盘Users目录下）</span></span><br><span class="line"><span class="attr">&quot;prettier.configPath&quot;</span><span class="punctuation">:</span> <span class="string">&quot;C:\\Users\\ThinkPad\\.prettierrc&quot;</span><span class="punctuation">,</span></span><br><span class="line"><span class="attr">&quot;eslint.alwaysShowStatus&quot;</span><span class="punctuation">:</span><span class="literal"><span class="keyword">true</span></span><span class="punctuation">,</span></span><br><span class="line"><span class="attr">&quot;prettier.trailingComma&quot;</span><span class="punctuation">:</span> <span class="string">&quot;none&quot;</span><span class="punctuation">,</span></span><br><span class="line"><span class="attr">&quot;prettier.semi&quot;</span><span class="punctuation">:</span><span class="literal"><span class="keyword">false</span></span><span class="punctuation">,</span></span><br><span class="line"><span class="comment">// 每行文字超出此限制，强制换行</span></span><br><span class="line"><span class="attr">&quot;prettier.printWidth&quot;</span><span class="punctuation">:</span><span class="number">300</span><span class="punctuation">,</span></span><br><span class="line"><span class="comment">// 使用单英引号替换双引号</span></span><br><span class="line"><span class="attr">&quot;prettier.singleQuote&quot;</span><span class="punctuation">:</span> <span class="literal"><span class="keyword">true</span></span><span class="punctuation">,</span></span><br><span class="line"><span class="attr">&quot;prettier.arrowParens&quot;</span><span class="punctuation">:</span> <span class="string">&quot;avoid&quot;</span><span class="punctuation">,</span></span><br><span class="line"><span class="comment">// 设置.vue文件中，html代码的格式插件</span></span><br><span class="line"><span class="attr">&quot;vetur.format.defaultFormatter.html&quot;</span><span class="punctuation">:</span> <span class="string">&quot;js-beautify-html&quot;</span><span class="punctuation">,</span></span><br><span class="line"><span class="comment">// 忽略警告</span></span><br><span class="line"><span class="attr">&quot;vetur.ignoreProjectWarning&quot;</span><span class="punctuation">:</span><span class="literal"><span class="keyword">true</span></span><span class="punctuation">,</span></span><br><span class="line"><span class="attr">&quot;vetur.format.defaultFormatterOptions&quot;</span><span class="punctuation">:</span> <span class="punctuation">&#123;</span></span><br><span class="line">    <span class="attr">&quot;prettier&quot;</span><span class="punctuation">:</span> <span class="punctuation">&#123;</span></span><br><span class="line">        <span class="attr">&quot;trailingComma&quot;</span><span class="punctuation">:</span><span class="string">&quot;none&quot;</span><span class="punctuation">,</span></span><br><span class="line">        <span class="attr">&quot;semi&quot;</span><span class="punctuation">:</span><span class="literal"><span class="keyword">false</span></span><span class="punctuation">,</span></span><br><span class="line">        <span class="attr">&quot;singleQuote&quot;</span><span class="punctuation">:</span><span class="literal"><span class="keyword">true</span></span><span class="punctuation">,</span></span><br><span class="line">        <span class="attr">&quot;arrowParens&quot;</span><span class="punctuation">:</span><span class="string">&quot;avoid&quot;</span><span class="punctuation">,</span></span><br><span class="line">        <span class="attr">&quot;printWidth&quot;</span><span class="punctuation">:</span><span class="number">300</span></span><br><span class="line">    <span class="punctuation">&#125;</span><span class="punctuation">,</span></span><br><span class="line">    <span class="attr">&quot;js-beautify-html&quot;</span><span class="punctuation">:</span> <span class="punctuation">&#123;</span></span><br><span class="line">        <span class="attr">&quot;wrap_attributes&quot;</span><span class="punctuation">:</span> <span class="literal"><span class="keyword">false</span></span><span class="punctuation">,</span></span><br><span class="line">    <span class="punctuation">&#125;</span><span class="punctuation">,</span></span><br><span class="line"><span class="punctuation">&#125;</span><span class="punctuation">,</span></span><br><span class="line"><span class="attr">&quot;[vue]&quot;</span><span class="punctuation">:</span> <span class="punctuation">&#123;</span></span><br><span class="line">    <span class="attr">&quot;editor.defaultFormatter&quot;</span><span class="punctuation">:</span> <span class="string">&quot;esbenp.prettier-vscode&quot;</span></span><br><span class="line"><span class="punctuation">&#125;</span></span><br></pre></td></tr></table></figure></p><h3 id="7-axios"><a href="#7-axios" class="headerlink" title="7.axios"></a>7.axios</h3><p><strong>全局使用</strong><br>在<code>main.js</code>中<br><figure class="highlight js"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment">// 全局使用axios</span></span><br><span class="line"><span class="keyword">import</span> axios <span class="keyword">from</span> <span class="string">&#x27;axios&#x27;</span></span><br><span class="line"><span class="comment">// 全局配置axios的请求根路径</span></span><br><span class="line">axios.<span class="property">defaults</span>.<span class="property">baseURL</span> = <span class="string">&#x27;http://www.xxx/xxx&#x27;</span></span><br><span class="line"><span class="comment">// 将axios挂载到Vue原型对象身上</span></span><br><span class="line"><span class="comment">// Vue.prototype.axios=axios</span></span><br><span class="line"><span class="title class_">Vue</span>.<span class="property"><span class="keyword">prototype</span></span>.<span class="property">$http</span> = axios</span><br><span class="line"><span class="comment">// 但是吧axios挂载到Vue的原型链上有一个缺点，不利于API接口的复用</span></span><br><span class="line"></span><br><span class="line"><span class="comment">// 在组将中可以直接使用，方式：</span></span><br><span class="line"> <span class="keyword">let</span> &#123; <span class="attr">data</span>: res &#125; = <span class="keyword">await</span> <span class="variable language_">this</span>.<span class="property">$http</span>.<span class="title function_">get</span>(<span class="string">&#x27;/get&#x27;</span>)</span><br></pre></td></tr></table></figure></p><h3 id="8-路由"><a href="#8-路由" class="headerlink" title="8.路由"></a>8.路由</h3><ol><li>SPA和路由</li><li>前端路由<ul><li>Hash地址与组件之间的对应关系</li></ul></li><li>路由的工作方式<ul><li>用户点击的页面上的路由模块</li><li>当Url地址栏中的Hash值发生了变化</li><li>前端路由监听到了Hash地址的变换</li><li>前端路由把当前Hash地址对应的组件渲染到浏览器中<br>Hash——&gt;component</li></ul></li></ol><h4 id="安装和使用"><a href="#安装和使用" class="headerlink" title="安装和使用"></a>安装和使用</h4><ol><li>安装<br><a href="https://router.vuejs.org/zh/">官网</a><br><code>npm install vue-router@4</code></li><li>使用<br>在<code>scr</code>目录下新建<code>router/index.js</code><br><strong>index.js内容</strong><figure class="highlight js"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment">//scr/router/index.js 路由地址</span></span><br><span class="line"><span class="keyword">import</span> <span class="title class_">Vue</span> <span class="keyword">from</span> <span class="string">&#x27;vue&#x27;</span></span><br><span class="line"><span class="comment">// 1、导入</span></span><br><span class="line"><span class="keyword">import</span> <span class="title class_">VueRouter</span> <span class="keyword">from</span> <span class="string">&#x27;vue-router&#x27;</span></span><br><span class="line"></span><br><span class="line"><span class="comment">// 2、调用Vue.use()函数，把xxx安装为Vue的插件</span></span><br><span class="line"><span class="title class_">Vue</span>.<span class="title function_">use</span>(<span class="title class_">VueRouter</span>)</span><br><span class="line"><span class="comment">// 3、实例化对象</span></span><br><span class="line"><span class="keyword">const</span> router = <span class="keyword">new</span> <span class="title class_">VueRouter</span>()</span><br><span class="line"><span class="comment">// 4、实例对象共享出去</span></span><br><span class="line"><span class="keyword">export</span> <span class="keyword">default</span> router</span><br></pre></td></tr></table></figure><strong>main.js中导入并挂载</strong><figure class="highlight js"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">import</span> <span class="title class_">Vue</span> <span class="keyword">from</span> <span class="string">&#x27;vue&#x27;</span></span><br><span class="line"><span class="keyword">import</span> <span class="title class_">App</span> <span class="keyword">from</span> <span class="string">&#x27;./App.vue&#x27;</span></span><br><span class="line"></span><br><span class="line"><span class="comment">// 导入路由模块,拿到实例对象router</span></span><br><span class="line"><span class="keyword">import</span> router <span class="keyword">from</span> <span class="string">&#x27;@/router/index.js&#x27;</span></span><br><span class="line"><span class="title class_">Vue</span>.<span class="property">config</span>.<span class="property">productionTip</span> = <span class="literal">false</span></span><br><span class="line"></span><br><span class="line"><span class="keyword">new</span> <span class="title class_">Vue</span>(&#123;</span><br><span class="line">  <span class="attr">render</span>: <span class="function"><span class="params">h</span> =&gt;</span> <span class="title function_">h</span>(<span class="title class_">App</span>),</span><br><span class="line">  <span class="comment">// 将路由的实例对象挂在到Vue上</span></span><br><span class="line">  <span class="comment">// router:实例对象</span></span><br><span class="line">  <span class="attr">router</span>:router</span><br><span class="line">&#125;).$mount(<span class="string">&#x27;#app&#x27;</span>)</span><br><span class="line"></span><br></pre></td></tr></table></figure></li></ol><h4 id="动态路由"><a href="#动态路由" class="headerlink" title="动态路由"></a>动态路由</h4><ol><li>路径参数值<code>this.$route.params.id</code></li><li>通过props拿到路径参数<code>props:[&#39;id&#39;]</code></li><li>查询参数<code>this.$route.query</code></li><li>完整路径参数<code>this.$route.fullPath</code></li></ol><h4 id="导航"><a href="#导航" class="headerlink" title="导航"></a>导航</h4><ol><li>声明式导航（点击链接）</li><li>编程式导航（调用API）<figure class="highlight js"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment">// 跳转到指定hash地址，并增加一条历史记录</span></span><br><span class="line"><span class="variable language_">this</span>.<span class="property">$router</span>.<span class="title function_">push</span>()</span><br><span class="line"><span class="comment">// 跳转到指定hash地址，并替换掉当前的历史记录</span></span><br><span class="line"><span class="variable language_">this</span>.<span class="property">$router</span>.<span class="title function_">replace</span>()</span><br><span class="line"><span class="comment">// 后退或前进</span></span><br><span class="line"><span class="variable language_">this</span>.<span class="property">$router</span>.<span class="title function_">go</span>()</span><br></pre></td></tr></table></figure></li></ol><h4 id="导航守卫"><a href="#导航守卫" class="headerlink" title="导航守卫"></a>导航守卫</h4><p>全局前置守卫<br><figure class="highlight js"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment">// 为router实例对象，声明全局前置导航守卫</span></span><br><span class="line">router.<span class="title function_">beforeEach</span>(<span class="function">(<span class="params">to, <span class="keyword">from</span>, next</span>) =&gt;</span> &#123;</span><br><span class="line">    <span class="comment">// to:将要访问路由的信息对象</span></span><br><span class="line">    <span class="comment">// from:将要离开的路由的信息对象</span></span><br><span class="line">    <span class="comment">// next()放行</span></span><br><span class="line">    <span class="comment">// console.log(to);</span></span><br><span class="line"></span><br><span class="line">    <span class="keyword">if</span> (to.<span class="property">path</span> === <span class="string">&#x27;/main&#x27;</span>) &#123;</span><br><span class="line">        <span class="comment">// 要访问后台主页，需要判断</span></span><br><span class="line">        <span class="keyword">const</span> token = <span class="variable language_">localStorage</span>.<span class="title function_">getItem</span>(<span class="string">&#x27;token&#x27;</span>)</span><br><span class="line">            <span class="comment">// 若有token,证明登录，放行</span></span><br><span class="line">        <span class="keyword">if</span> (token) &#123;</span><br><span class="line">            <span class="title function_">next</span>()</span><br><span class="line">            <span class="comment">// 否则要登录</span></span><br><span class="line">        &#125; <span class="keyword">else</span> &#123;</span><br><span class="line">            <span class="title function_">next</span>(<span class="string">&#x27;/login&#x27;</span>)</span><br><span class="line">        &#125;</span><br><span class="line">    &#125; <span class="keyword">else</span> &#123;</span><br><span class="line">        <span class="title function_">next</span>()</span><br><span class="line">    &#125;</span><br><span class="line">&#125;)</span><br></pre></td></tr></table></figure></p><h4 id="头条案例"><a href="#头条案例" class="headerlink" title="头条案例"></a>头条案例</h4><p><a href="https://gitee.com/lang-xiaohu/demo-toutiao">https://gitee.com/lang-xiaohu/demo-toutiao</a></p><div class="note primary no-icon flat"><p>tab示例</p></div><div class="tabs" id="test1"><ul class="nav-tabs"><li class="tab active"><button type="button" data-href="#test1-1">test1 1</button></li><li class="tab"><button type="button" data-href="#test1-2">test1 2</button></li><li class="tab"><button type="button" data-href="#test1-3">test1 3</button></li></ul><div class="tab-contents"><div class="tab-item-content active" id="test1-1"><p><strong>This is Tab 1.</strong></p><button type="button" class="tab-to-top" aria-label="scroll to top"><i class="fas fa-arrow-up"></i></button></div><div class="tab-item-content" id="test1-2"><p><strong>This is Tab 2.</strong></p><button type="button" class="tab-to-top" aria-label="scroll to top"><i class="fas fa-arrow-up"></i></button></div><div class="tab-item-content" id="test1-3"><p><strong>This is Tab 3.</strong></p><button type="button" class="tab-to-top" aria-label="scroll to top"><i class="fas fa-arrow-up"></i></button></div></div></div><div class="tag link"><a class="link-card" title="头条案例" href="https://gitee.com/lang-xiaohu/demo-toutiao"><div class="left"><img src="https://github.com/owen0o0/getFavicon"/></div><div class="right"><p class="text">头条案例</p><p class="url">https://gitee.com/lang-xiaohu/demo-toutiao</p></div></a></div><h3 id="10-总结"><a href="#10-总结" class="headerlink" title="10.总结"></a>10.总结</h3><ol><li>了解了Vue的基本使用方法(指令、条件、循环…)</li><li>如何基于<a href="https://cli.vuejs.org/zh/guide/">Vue-cli</a>创建和开发工程化的Vue项目</li><li>能够运用组件化的开发思想，进行企业级的项目开发</li><li>能够使用指令、侦听器、插槽、生命周期、组件通讯等技术，完成业务开发</li><li>掌握在Vue项目中如何封装和使用<a href="https://www.axios-http.cn/docs/intro">axios</a>来请求后端的API接口</li><li>使用<a href="https://router.vuejs.org/zh/introduction.html">vue-router</a>实现单页面应用程序开发</li><li>在Vue项目中使用<a href="https://vant-contrib.gitee.io/vant/v2/#/zh-CN/home">Vant</a>和<a href="https://element.eleme.cn/#/zh-CN">Element-UI</a>组件库</li><li>运用<a href="https://devtools.vuejs.org/guide/installation.html">vue-devtools</a>来调试自己的Vue项目</li></ol>]]></content>
    
    
      
      
    <summary type="html">&lt;p&gt;[toc]&lt;/p&gt;
&lt;h2 id=&quot;Vue2学习&quot;&gt;&lt;a href=&quot;#Vue2学习&quot; class=&quot;headerlink&quot; title=&quot;Vue2学习&quot;&gt;&lt;/a&gt;Vue2学习&lt;/h2&gt;&lt;h3 id=&quot;1-Vue基础&quot;&gt;&lt;a href=&quot;#1-Vue基础&quot; class=&quot;h</summary>
      
    
    
    
    
    <category term="Vue2" scheme="https://www.aurora0508.top/tags/Vue2/"/>
    
  </entry>
  
  <entry>
    <title>前端面试</title>
    <link href="https://www.aurora0508.top/posts/5d93b1d3.html"/>
    <id>https://www.aurora0508.top/posts/5d93b1d3.html</id>
    <published>2022-09-14T15:54:23.000Z</published>
    <updated>2024-03-18T07:50:26.747Z</updated>
    
    <content type="html"><![CDATA[<h2 id="前端经典面试题目及答案总结"><a href="#前端经典面试题目及答案总结" class="headerlink" title="前端经典面试题目及答案总结"></a>前端经典面试题目及答案总结</h2><ol><li><strong>跨域</strong></li><li><strong>水平垂直居中</strong></li><li><strong>盒模型</strong></li><li>缓存</li><li>选择器（优先级，权重）</li><li>promise</li><li><p>ref 是什么</p><p>获取dom元素</p></li><li><p>nextTick是什么</p><p>获取更新后的dom元素</p></li><li><p>scoped原理</p><p>让样式在本组件中生效，不影响其他样式</p></li><li><p>vue-router路由的方式（hash,history）</p></li><li>v-for 中的key</li><li><strong>v-if和v-show</strong></li><li>webpack/loader</li><li>css变量</li><li>事件委托</li><li>如何避免延时冲突</li></ol><ul><li>css module</li><li>css scoped</li><li>BEM</li></ul><blockquote><p>代码题</p><ol><li>深拷贝</li><li>防抖节流</li><li>原型链</li><li>自适应布局</li><li>数组去重</li><li>CSS画三角形</li><li>手写Promise</li><li>Promise实现Sleep函数<h3 id="基础流程图"><a href="#基础流程图" class="headerlink" title="基础流程图"></a>基础流程图</h3></li><li>HTML<br><img src="https://uploadfiles.nowcoder.com/images/20210110/897353_1610281693947/7E56AD06CFF2C2027D30CE7815767388" alt=""></li></ol></blockquote><ol><li><p>JavaScript<br><img src="https://uploadfiles.nowcoder.com/images/20210110/897353_1610281740675/2D1AF6DCD4B5D7926B571B1AF1FC8491" alt=""></p></li><li><p>ES6新特性<br><img src="https://uploadfiles.nowcoder.com/images/20210110/897353_1610281797240/032A48A55D202E8F6C9D1BC30B2F57BE" alt=""></p></li><li><p>浏览器相关<br><img src="https://uploadfiles.nowcoder.com/images/20210110/897353_1610281835005/469A81BF5B4A2DAAE40A3CB4239BDE3D" alt=""></p></li><li><p>框架相关<br><img src="https://uploadfiles.nowcoder.com/images/20210110/897353_1610281858340/70A285A6D33E0BF62F4D2478C76877C9" alt=""></p></li><li><p>可视化技术<br><img src="https://uploadfiles.nowcoder.com/images/20210110/897353_1610281897368/79F46307CF0483E5033528D784F2625F" alt=""></p></li></ol><blockquote><p>参考:<a href="https://www.nowcoder.com/tutorial/10061/e9570372163b4c02bfa07a40fb5353be">https://www.nowcoder.com/tutorial/10061/e9570372163b4c02bfa07a40fb5353be</a></p></blockquote><h2 id="相关链接"><a href="#相关链接" class="headerlink" title="相关链接"></a>相关链接</h2><p>前端知识点汇总（灵题库）：<a href="https://www.lingtiku.com/">https://www.lingtiku.com/</a></p><p><a href="https://leetcode.cn/circle/discuss/DoJGKQ/">https://leetcode.cn/circle/discuss/DoJGKQ/</a></p><p><a href="https://blog.csdn.net/qq_41675812/article/details/126839694">https://blog.csdn.net/qq_41675812/article/details/126839694</a></p><p><a href="https://www.nowcoder.com/discuss/experience?tagId=644">https://www.nowcoder.com/discuss/experience?tagId=644</a></p><p>前端面试八股文总结: <a href="https://juejin.cn/post/7089412470581755941">https://juejin.cn/post/7089412470581755941</a></p><p>前端八股文—-常问精简版（Vue）:<a href="https://juejin.cn/post/7080483538558484516">https://juejin.cn/post/7080483538558484516</a></p><p>前端知识点汇总（语雀）：<a href="https://www.yuque.com/baiyueguang-rfnbu/tr4d0i/rz15kr">https://www.yuque.com/baiyueguang-rfnbu/tr4d0i/rz15kr</a></p><blockquote><p>面经，刷题网站</p></blockquote><ol><li>牛客:<a href="https://www.nowcoder.com/courses">https://www.nowcoder.com/courses</a></li><li>力扣:<a href="https://leetcode.cn/">https://leetcode.cn/</a></li><li>掘金:<a href="https://juejin.cn/post/7080483538558484516">https://juejin.cn/post/7080483538558484516</a></li></ol><h2 id="简历制作"><a href="#简历制作" class="headerlink" title="简历制作"></a>简历制作</h2><p>化简：<a href="https://huajian.smallpig.site/">https://huajian.smallpig.site/</a><br>锤子简历：<a href="https://www.100chui.com/resume/">https://www.100chui.com/resume/</a></p>]]></content>
    
    
    <summary type="html">收集前端面试题，知识点</summary>
    
    
    
    
    <category term="前端" scheme="https://www.aurora0508.top/tags/%E5%89%8D%E7%AB%AF/"/>
    
  </entry>
  
  <entry>
    <title>小程序开发</title>
    <link href="https://www.aurora0508.top/posts/8d10680e.html"/>
    <id>https://www.aurora0508.top/posts/8d10680e.html</id>
    <published>2022-09-10T15:54:23.000Z</published>
    <updated>2024-03-18T07:50:26.752Z</updated>
    
    <content type="html"><![CDATA[<h3 id="小程序和网页的不同点"><a href="#小程序和网页的不同点" class="headerlink" title="小程序和网页的不同点"></a>小程序和网页的不同点</h3><p>无法调用DOM，BOM 但可以调用各种API 例如：地理位置，扫码，支付</p><h3 id="申请账号"><a href="#申请账号" class="headerlink" title="申请账号"></a>申请账号</h3><p>AppID : wx4bf83b32319f6471</p><h3 id="安装开发工具devtools"><a href="#安装开发工具devtools" class="headerlink" title="安装开发工具devtools"></a>安装开发工具devtools</h3><ul><li>代码编辑调试</li><li>预览发布</li></ul><h3 id="创建和配置小程序项目"><a href="#创建和配置小程序项目" class="headerlink" title="创建和配置小程序项目"></a>创建和配置小程序项目</h3><h3 id="宿主环境"><a href="#宿主环境" class="headerlink" title="宿主环境"></a>宿主环境</h3><ul><li>程序运行所依赖的环境IOS,Android</li></ul><h4 id="微信就是小程序的宿主环境"><a href="#微信就是小程序的宿主环境" class="headerlink" title="微信就是小程序的宿主环境"></a>微信就是小程序的宿主环境</h4><ul><li>同行模型</li><li>运行机制<ul><li>启动过程</li><li>app.json</li><li>app.js 调用App()函数创建实例</li><li>渲染首页</li><li>启动完成</li></ul></li><li>组件<ul><li>视图容器<ul><li>view(div)</li><li>scroll-view() 滚动区域</li><li>swiper和swiper-item 轮播图</li><li></li></ul></li><li>内容组件<ul><li>text(span)</li><li>rich-text</li><li>button</li><li>image<ul><li>图片</li></ul></li><li>navigator<ul><li>导航</li></ul></li></ul></li></ul></li><li>API<ul><li>事件监听<ul><li>on开头，监听某些事件的触发</li><li>例如：wx.onWindowResize(function,callback)</li></ul></li><li>同步<ul><li>以Sync结尾</li><li>wx.setStorageSync(‘key’,value)向本地存储写入内容</li></ul></li><li>异步<ul><li>类似于$.ajax(options)函数，须通过success,fail,complete接受调用结果</li><li>wx.request()发起网络请求，通过success回调函数接受数据</li></ul></li></ul></li></ul><h3 id="小程序的版本"><a href="#小程序的版本" class="headerlink" title="小程序的版本"></a>小程序的版本</h3><ul><li>开发版本</li><li>体验版本</li><li>审核中的版本</li><li>线上版本</li></ul><h4 id="发布上线"><a href="#发布上线" class="headerlink" title="发布上线"></a>发布上线</h4><h3 id="WXML-模板语法"><a href="#WXML-模板语法" class="headerlink" title="WXML 模板语法"></a>WXML 模板语法</h3><ul><li>Mustache语法<ul><li>动态绑定内容：<code>&#123;&#123;&#125;&#125;</code></li><li>图片：<images src="">&lt;/image&gt;</li></ul></li><li>事件<ul><li>tap(触摸click)   bindtap/bind:tap <ul><li>事件传参：<code>data-xx=&#123;&#123;&#125;&#125;</code></li></ul></li><li>input bindinput/bind:input </li><li>change bindchange/bind:change 状态改变如checkbox</li></ul></li><li>条件渲染<ul><li>wx:if  动态创建和移除</li><li><block></block>不会被渲染</li><li><code>hidden=&#123;&#123;condition&#125;&#125;</code>  显示与隐藏  相当于display:none/block</li><li>wx:for  wx:key</li></ul></li><li><p>wxss</p><ul><li><p>rpx尺寸单位</p><ul><li><p>1px=2rpx</p></li><li><p>所有设备的宽度等分为750份</p></li></ul></li><li><p>@import样式导入</p></li><li><p>局部样式大于全局样式（权重）</p></li></ul></li></ul><h3 id="全局配置"><a href="#全局配置" class="headerlink" title="全局配置"></a>全局配置</h3><ul><li><p>app.json</p></li><li><p>下拉刷新</p><ul><li>“enablePullDownRefresh”: true</li></ul></li><li><p>上拉触底</p><ul><li>“onReachBottomDistance”: 0</li></ul></li><li><p>tabBar</p><ul><li><p>最少两个，最多五个</p></li><li><p>顶部</p><ul><li>没图标</li></ul></li><li>底部<ul><li>有图标</li></ul></li><li>backgroundColor</li><li>slectedIconPath  选中</li><li>borderStyle</li><li>iconPath 未选中</li><li>selectedColor 选中时文本的颜色</li><li>color 默认颜色</li></ul></li></ul><h3 id="页面配置"><a href="#页面配置" class="headerlink" title="页面配置"></a>页面配置</h3><figure class="highlight json"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><span class="line"><span class="attr">&quot;navigationBarBackgroundColor&quot;</span><span class="punctuation">:</span> <span class="string">&quot;#000000&quot;</span><span class="punctuation">,</span></span><br><span class="line"><span class="attr">&quot;navigationBarTitleText&quot;</span><span class="punctuation">:</span> <span class="string">&quot;消息&quot;</span><span class="punctuation">,</span></span><br><span class="line"><span class="attr">&quot;backgroundColor&quot;</span><span class="punctuation">:</span> <span class="string">&quot;#ffffff&quot;</span><span class="punctuation">,</span></span><br><span class="line"><span class="attr">&quot;backgroundTextStyle&quot;</span><span class="punctuation">:</span> <span class="string">&quot;light&quot;</span><span class="punctuation">,</span></span><br><span class="line"><span class="attr">&quot;enablePullDownRefresh&quot;</span><span class="punctuation">:</span> <span class="literal"><span class="keyword">false</span></span></span><br></pre></td></tr></table></figure><h3 id="网络请求数据"><a href="#网络请求数据" class="headerlink" title="网络请求数据"></a>网络请求数据</h3><p>配置request合法域名</p><figure class="highlight js"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br></pre></td><td class="code"><pre><span class="line">wx.<span class="title function_">request</span>(&#123;</span><br><span class="line">      <span class="attr">url</span>: <span class="string">&#x27;url&#x27;</span>,</span><br><span class="line">      <span class="attr">method</span>:<span class="string">&#x27;POST&#x27;</span>,</span><br><span class="line">      <span class="attr">success</span>:<span class="function">(<span class="params">res</span>)=&gt;</span>&#123;</span><br><span class="line">        <span class="variable language_">console</span>.<span class="title function_">log</span>(res.<span class="property">data</span>);</span><br><span class="line">      &#125;</span><br><span class="line">    &#125;)</span><br></pre></td></tr></table></figure><blockquote><p>跳过request合法域名校验</p><p>没有跨域和ajax请求，只是网络请求</p></blockquote><h4 id="案例"><a href="#案例" class="headerlink" title="案例"></a>案例</h4><ul><li>配置导航栏</li><li>配置tabBar</li><li>实现轮播图</li><li>实现九宫格</li><li>实现图片布局</li></ul><h3 id="页面导航"><a href="#页面导航" class="headerlink" title="页面导航"></a>页面导航</h3><ul><li><p>声明式：navigator  </p><ul><li><p>url：必须以<code>\</code>开头</p></li><li><p>跳转到tabBar需加<code>open-type=&quot;switchTab&quot;</code></p></li><li>非tabBar页面需加<code>open-type=&quot;navigate&quot;</code></li><li>后退<code>open-type=&quot;navigateBack&quot;</code></li></ul></li><li><p>编程式：API</p><ul><li>tabBar：wx.switchTab({url=’’})</li><li>非tabBar：wx.navigateTo({url=’’})</li><li>后退：wx.navigateBack()</li></ul></li></ul>]]></content>
    
    
      
      
    <summary type="html">&lt;h3 id=&quot;小程序和网页的不同点&quot;&gt;&lt;a href=&quot;#小程序和网页的不同点&quot; class=&quot;headerlink&quot; title=&quot;小程序和网页的不同点&quot;&gt;&lt;/a&gt;小程序和网页的不同点&lt;/h3&gt;&lt;p&gt;无法调用DOM，BOM 但可以调用各种API 例如：地理位置，扫码，支付&lt;/</summary>
      
    
    
    
    
    <category term="小程序" scheme="https://www.aurora0508.top/tags/%E5%B0%8F%E7%A8%8B%E5%BA%8F/"/>
    
  </entry>
  
</feed>
