<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
  <title>朱阳星的日常</title>
  
  
  <link href="https://www.zhuyangxing.cn/atom.xml" rel="self"/>
  
  <link href="https://www.zhuyangxing.cn/"/>
  <updated>2026-06-20T07:58:44.787Z</updated>
  <id>https://www.zhuyangxing.cn/</id>
  
  <author>
    <name>朱阳星</name>
    
  </author>
  
  <generator uri="https://hexo.io/">Hexo</generator>
  
  <entry>
    <title>20180403_react受控组件与非受控组件区别</title>
    <link href="https://www.zhuyangxing.cn/2018/04/03/20180403_react%E5%8F%97%E6%8E%A7%E7%BB%84%E4%BB%B6%E4%B8%8E%E9%9D%9E%E5%8F%97%E6%8E%A7%E7%BB%84%E4%BB%B6%E5%8C%BA%E5%88%AB/"/>
    <id>https://www.zhuyangxing.cn/2018/04/03/20180403_react%E5%8F%97%E6%8E%A7%E7%BB%84%E4%BB%B6%E4%B8%8E%E9%9D%9E%E5%8F%97%E6%8E%A7%E7%BB%84%E4%BB%B6%E5%8C%BA%E5%88%AB/</id>
    <published>2018-04-03T15:44:21.000Z</published>
    <updated>2026-06-20T07:58:44.787Z</updated>
    
    <content type="html"><![CDATA[<h1 id="20180403-react受控组件与非受控组件区别"><a href="#20180403-react受控组件与非受控组件区别" class="headerlink" title="20180403_react受控组件与非受控组件区别"></a>20180403_react受控组件与非受控组件区别</h1><p>受控组件与非受控组件区别</p><p><strong>受控组件：</strong><br>受react控制组件，即该组件受setState()控制<br>在change时重新设置state的值为event.target.value(text,textarea,select)或event.target.checked(radio&amp;checkbox)<br>通过state取值</p><p><strong>非受控组件：</strong><br>不受react控制组件，即该组件不受setState()控制与传统的HTML表单输入相似，input输入值即显示最新值,可以通过ref取值</p>]]></content>
    
    
    <summary type="html">20180403_react受控组件与非受控组件区别</summary>
    
    
    
    
  </entry>
  
  <entry>
    <title>20180402_使用react实现数据同步功能</title>
    <link href="https://www.zhuyangxing.cn/2018/04/02/20180402_%E4%BD%BF%E7%94%A8react%E5%AE%9E%E7%8E%B0%E6%95%B0%E6%8D%AE%E5%90%8C%E6%AD%A5%E5%8A%9F%E8%83%BD/"/>
    <id>https://www.zhuyangxing.cn/2018/04/02/20180402_%E4%BD%BF%E7%94%A8react%E5%AE%9E%E7%8E%B0%E6%95%B0%E6%8D%AE%E5%90%8C%E6%AD%A5%E5%8A%9F%E8%83%BD/</id>
    <published>2018-04-02T15:44:21.000Z</published>
    <updated>2026-06-20T07:58:44.787Z</updated>
    
    <content type="html"><![CDATA[<h1 id="20180402-使用react实现数据同步功能"><a href="#20180402-使用react实现数据同步功能" class="headerlink" title="20180402_使用react实现数据同步功能"></a>20180402_使用react实现数据同步功能</h1><p>要求如下</p><ol><li>输入框输入内容数据长度大于0，展示出预览信息</li><li>光标离开关闭预览信息</li><li>预览信息每隔4位插入一个特殊字符_,输入内容不变</li><li>限制长度为13位</li><li>只允许输入数字（0-9）<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><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><span class="line">80</span><br><span class="line">81</span><br><span class="line">82</span><br><span class="line">83</span><br><span class="line">84</span><br><span class="line">85</span><br><span class="line">86</span><br><span class="line">87</span><br><span class="line">88</span><br><span class="line">89</span><br><span class="line">90</span><br><span class="line">91</span><br><span class="line">92</span><br><span class="line">93</span><br><span class="line">94</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment">// Zinput.js</span></span><br><span class="line"><span class="keyword">import</span> <span class="title class_">React</span>, &#123;</span><br><span class="line">  <span class="title class_">Component</span></span><br><span class="line">&#125; <span class="keyword">from</span> <span class="string">&#x27;react&#x27;</span>;</span><br><span class="line"><span class="keyword">import</span> <span class="string">&#x27;./Zinput.css&#x27;</span></span><br><span class="line"></span><br><span class="line"><span class="comment">// <span class="doctag">NOTE:</span> 获取焦点事件 原生onFocus 即可</span></span><br><span class="line"><span class="comment">// <span class="doctag">NOTE:</span> 离开焦点事件 原生onBlur即可</span></span><br><span class="line"><span class="comment">// <span class="doctag">NOTE:</span> 输入框数据过滤 直接在change方法里进行过滤</span></span><br><span class="line"><span class="comment">// <span class="doctag">NOTE:</span> 条件处理 通过不同条件返回不同节点做条件处理</span></span><br><span class="line"><span class="keyword">class</span> <span class="title class_">Zinput</span> <span class="keyword">extends</span> <span class="title class_ inherited__">Component</span> &#123;</span><br><span class="line">  <span class="title function_">constructor</span>(<span class="params">props</span>) &#123;</span><br><span class="line">    <span class="variable language_">super</span>(props);</span><br><span class="line">    <span class="variable language_">this</span>.<span class="property">state</span> = &#123;</span><br><span class="line">      <span class="attr">value</span>: <span class="string">&#x27;&#x27;</span>,</span><br><span class="line">      <span class="attr">showBig</span>: <span class="literal">false</span>,</span><br><span class="line">    &#125;;</span><br><span class="line">    <span class="variable language_">this</span>.<span class="property">handleChange</span> = <span class="variable language_">this</span>.<span class="property">handleChange</span>.<span class="title function_">bind</span>(<span class="variable language_">this</span>);</span><br><span class="line">    <span class="variable language_">this</span>.<span class="property">inputOnFocus</span> = <span class="variable language_">this</span>.<span class="property">inputOnFocus</span>.<span class="title function_">bind</span>(<span class="variable language_">this</span>);</span><br><span class="line">    <span class="variable language_">this</span>.<span class="property">inputOnBlur</span> = <span class="variable language_">this</span>.<span class="property">inputOnBlur</span>.<span class="title function_">bind</span>(<span class="variable language_">this</span>);</span><br><span class="line">  &#125;</span><br><span class="line">  <span class="title function_">inputOnFocus</span>(<span class="params"></span>) &#123;</span><br><span class="line">    <span class="keyword">if</span> (<span class="variable language_">this</span>.<span class="property">state</span>.<span class="property">value</span>.<span class="property">length</span> &gt; <span class="number">0</span>) &#123;</span><br><span class="line">      <span class="variable language_">this</span>.<span class="title function_">setState</span>(&#123;</span><br><span class="line">        <span class="attr">showBig</span>: <span class="literal">true</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_">inputOnBlur</span>(<span class="params"></span>) &#123;</span><br><span class="line">    <span class="variable language_">this</span>.<span class="title function_">setState</span>(&#123;</span><br><span class="line">      <span class="attr">showBig</span>: <span class="literal">false</span></span><br><span class="line">    &#125;)</span><br><span class="line">    <span class="keyword">if</span>(<span class="variable language_">this</span>.<span class="property">props</span>.<span class="property">chanegNumber</span>)&#123;</span><br><span class="line">      <span class="variable language_">this</span>.<span class="property">props</span>.<span class="title function_">chanegNumber</span>(<span class="variable language_">this</span>.<span class="property">state</span>.<span class="property">value</span>)</span><br><span class="line">    &#125;</span><br><span class="line">  &#125;</span><br><span class="line">  <span class="title function_">handleChange</span>(<span class="params">event</span>) &#123;</span><br><span class="line">    <span class="keyword">let</span> val = event.<span class="property">target</span>.<span class="property">value</span>.<span class="title function_">substr</span>(<span class="number">0</span>, <span class="number">13</span>)</span><br><span class="line">      .<span class="title function_">replace</span>(<span class="regexp">/[^\d]/g</span>, <span class="string">&#x27;&#x27;</span>)</span><br><span class="line">    event.<span class="property">target</span>.<span class="property">value</span> = val</span><br><span class="line">    <span class="variable language_">this</span>.<span class="title function_">setState</span>(&#123;</span><br><span class="line">      <span class="attr">value</span>: val,</span><br><span class="line">      <span class="attr">showBig</span>: <span class="literal">true</span>,</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="comment">   * 根据字符串没隔len位插入一个下滑杠，返回处理后的字符串</span></span><br><span class="line"><span class="comment">   * <span class="doctag">@method</span>   <span class="variable">getStr</span></span></span><br><span class="line"><span class="comment">   * <span class="doctag">@author</span> 朱阳星</span></span><br><span class="line"><span class="comment">   * <span class="doctag">@datetime</span> 2018-04-02T09:57:58+080</span></span><br><span class="line"><span class="comment">   * <span class="doctag">@email</span>    zhuyangxing<span class="doctag">@foxmail</span>.com</span></span><br><span class="line"><span class="comment">   * <span class="doctag">@param</span>    &#123;<span class="type">String</span>&#125; str 待处理字符串</span></span><br><span class="line"><span class="comment">   * <span class="doctag">@param</span>    &#123;<span class="type">Number</span>&#125; len 每隔位数插入下滑杠</span></span><br><span class="line"><span class="comment">   * <span class="doctag">@return</span>   &#123;<span class="type">String</span>&#125; 处理后的字符串</span></span><br><span class="line"><span class="comment">   */</span></span><br><span class="line">  <span class="title function_">getStr</span>(<span class="params">str, len</span>) &#123;</span><br><span class="line">    <span class="keyword">let</span> lenth = str.<span class="property">length</span></span><br><span class="line">    <span class="keyword">let</span> len1 = len - <span class="number">1</span></span><br><span class="line">    <span class="keyword">let</span> newStr = <span class="string">&#x27;&#x27;</span></span><br><span class="line">    <span class="keyword">for</span> (<span class="keyword">var</span> i = <span class="number">0</span>; i &lt; lenth; i++) &#123;</span><br><span class="line">      <span class="keyword">if</span> (i % len === len1 &amp;&amp; i &gt; <span class="number">0</span>) &#123;</span><br><span class="line">        newStr += str.<span class="title function_">charAt</span>(i) + <span class="string">&#x27;_&#x27;</span></span><br><span class="line">      &#125; <span class="keyword">else</span> &#123;</span><br><span class="line">        newStr += str.<span class="title function_">charAt</span>(i)</span><br><span class="line">      &#125;</span><br><span class="line">    &#125;</span><br><span class="line">    <span class="keyword">if</span> (newStr.<span class="property">length</span> % (len + <span class="number">1</span>) === <span class="number">0</span>) &#123;</span><br><span class="line">      <span class="comment">// 解决最后一位为补充项问题</span></span><br><span class="line">      newStr = newStr.<span class="title function_">substr</span>(<span class="number">0</span>, newStr.<span class="property">length</span> - <span class="number">1</span>)</span><br><span class="line">    &#125;</span><br><span class="line">    <span class="keyword">return</span> newStr</span><br><span class="line">  &#125;</span><br><span class="line">  <span class="title function_">render</span>(<span class="params"></span>) &#123;</span><br><span class="line">    <span class="comment">// NOTE return 需要用圆括号包住并处理</span></span><br><span class="line">    <span class="comment">// NOTE 条件语句里没有节点也要用空字符串进行处理 否则sonalint会报错，页面也会报错</span></span><br><span class="line">    <span class="keyword">const</span> showBig = <span class="variable language_">this</span>.<span class="property">state</span>.<span class="property">showBig</span> ? (</span><br><span class="line">      <span class="language-xml"><span class="tag">&lt;<span class="name">div</span> <span class="attr">className</span>=<span class="string">&quot;big-show&quot;</span>&gt;</span>&#123; this.getStr(this.state.value,4) &#125;<span class="tag">&lt;/<span class="name">div</span>&gt;</span></span></span><br><span class="line">    ) : <span class="string">&#x27;&#x27;</span></span><br><span class="line">    <span class="keyword">return</span> (</span><br><span class="line">      <span class="language-xml"><span class="tag">&lt;<span class="name">div</span> <span class="attr">className</span>=<span class="string">&quot;zInput&quot;</span>&gt;</span></span></span><br><span class="line"><span class="language-xml">        <span class="tag">&lt;<span class="name">input</span> <span class="attr">className</span>=<span class="string">&quot;input&quot;</span> </span></span></span><br><span class="line"><span class="tag"><span class="language-xml">                <span class="attr">type</span> = <span class="string">&quot;text&quot;</span> </span></span></span><br><span class="line"><span class="tag"><span class="language-xml">                <span class="attr">onFocus</span>=<span class="string">&#123;</span> <span class="attr">this.inputOnFocus</span> &#125;</span></span></span><br><span class="line"><span class="tag"><span class="language-xml">                <span class="attr">onBlur</span>=<span class="string">&#123;</span> <span class="attr">this.inputOnBlur</span> &#125;</span></span></span><br><span class="line"><span class="tag"><span class="language-xml">                <span class="attr">value</span>=<span class="string">&#123;</span> <span class="attr">this.state.value</span> &#125; </span></span></span><br><span class="line"><span class="tag"><span class="language-xml">                <span class="attr">onChange</span>=<span class="string">&#123;</span> <span class="attr">this.handleChange</span> &#125;&gt;</span></span></span><br><span class="line"><span class="language-xml">                <span class="tag">&lt;/<span class="name">input</span>&gt;</span></span></span><br><span class="line"><span class="language-xml">        &#123;showBig&#125;</span></span><br><span class="line"><span class="language-xml">      <span class="tag">&lt;/<span class="name">div</span>&gt;</span></span></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="title class_">Zinput</span>; <span class="comment">// Don’t forget to use export default!</span></span><br></pre></td></tr></table></figure><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><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">&lt;!-- Zinput<span class="selector-class">.css</span> --&gt;</span><br><span class="line"><span class="selector-class">.zInput</span>&#123;</span><br><span class="line">    <span class="attribute">position</span>: absolute;</span><br><span class="line">    <span class="attribute">top</span>:<span class="number">80px</span>;</span><br><span class="line">    <span class="attribute">left</span>:<span class="number">40px</span>;</span><br><span class="line">    </span><br><span class="line">&#125;</span><br><span class="line"><span class="selector-class">.input</span> &#123;</span><br><span class="line">  <span class="attribute">position</span>: absolute;</span><br><span class="line">  <span class="attribute">top</span>: <span class="number">0</span>;</span><br><span class="line">  <span class="attribute">left</span>: <span class="number">0</span>;</span><br><span class="line">&#125;</span><br><span class="line"><span class="selector-class">.big-show</span> &#123;</span><br><span class="line">    <span class="attribute">position</span>: relative;</span><br><span class="line">    <span class="attribute">top</span>: -<span class="number">40px</span>;</span><br><span class="line">    <span class="attribute">font-size</span>: <span class="number">36px</span>;</span><br><span class="line">    <span class="attribute">line-height</span>: <span class="number">40px</span>;</span><br><span class="line">    <span class="attribute">background-color</span>: red;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure>功能虽然实现，但是肯定是作为某个节点的某个子组件使用的，父组件调用方法有两种</li></ol><p>1.使用refs直接获取子组件state的值</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></pre></td><td class="code"><pre><span class="line"><span class="title function_">constructor</span>(<span class="params">props</span>) &#123;</span><br><span class="line">  <span class="variable language_">super</span>(props);</span><br><span class="line">  <span class="variable language_">this</span>.<span class="property">handerClick2</span> = <span class="variable language_">this</span>.<span class="property">handerClick2</span>.<span class="title function_">bind</span>(<span class="variable language_">this</span>);</span><br><span class="line">&#125;</span><br><span class="line"><span class="title function_">handerClick2</span>(<span class="params"></span>)&#123;</span><br><span class="line">  <span class="comment">// NOTE 父组件通过refs获取子组件的state </span></span><br><span class="line">  <span class="variable language_">console</span>.<span class="title function_">log</span>(<span class="string">&quot;使用ref获取子组件的值&quot;</span>,<span class="variable language_">this</span>.<span class="property">refs</span>.<span class="property">zinput</span>.<span class="property">state</span>.<span class="property">value</span>)</span><br><span class="line">&#125;</span><br><span class="line"><span class="title function_">render</span>(<span class="params"></span>) &#123;</span><br><span class="line">  <span class="keyword">return</span> (</span><br><span class="line">    <span class="language-xml"><span class="tag">&lt;<span class="name">div</span> <span class="attr">className</span>=<span class="string">&quot;App&quot;</span>&gt;</span></span></span><br><span class="line"><span class="language-xml">      <span class="tag">&lt;<span class="name">Zinput</span> <span class="attr">ref</span>=<span class="string">&quot;zinput&quot;</span>&gt;</span><span class="tag">&lt;/<span class="name">Zinput</span>&gt;</span></span></span><br><span class="line"><span class="language-xml">      <span class="tag">&lt;<span class="name">input</span> <span class="attr">type</span>=<span class="string">&quot;button&quot;</span> <span class="attr">value</span>=<span class="string">&quot;获取电话号码的值22&quot;</span> <span class="attr">onClick</span>=<span class="string">&#123;</span> <span class="attr">this.handerClick2</span> &#125;/&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><span class="line">  );</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><p>2.每次子组件焦点离开时调用父组件传过来的方法，修改父组件state值</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></pre></td><td class="code"><pre><span class="line"><span class="title function_">constructor</span>(<span class="params">props</span>) &#123;</span><br><span class="line">  <span class="variable language_">super</span>(props);</span><br><span class="line">  <span class="variable language_">this</span>.<span class="property">state</span> = &#123;</span><br><span class="line">    <span class="attr">phoneNumber</span>: <span class="string">&#x27;&#x27;</span>,</span><br><span class="line">  &#125;;</span><br><span class="line">  <span class="variable language_">this</span>.<span class="property">handerClick</span> = <span class="variable language_">this</span>.<span class="property">handerClick</span>.<span class="title function_">bind</span>(<span class="variable language_">this</span>);</span><br><span class="line">  <span class="variable language_">this</span>.<span class="property">changePhoneNumber</span> = <span class="variable language_">this</span>.<span class="property">changePhoneNumber</span>.<span class="title function_">bind</span>(<span class="variable language_">this</span>);</span><br><span class="line">&#125;</span><br><span class="line"><span class="title function_">changePhoneNumber</span>(<span class="params">number</span>)&#123;</span><br><span class="line">  <span class="variable language_">this</span>.<span class="title function_">setState</span>(&#123;</span><br><span class="line">      <span class="attr">phoneNumber</span>: number,</span><br><span class="line">  &#125;)</span><br><span class="line">&#125;</span><br><span class="line"><span class="title function_">handerClick</span>(<span class="params"></span>)&#123;</span><br><span class="line">  <span class="comment">// NOTE 根据react的思想是在子组件处理完某件事的时候调用父组件的方法修改父组件的state值</span></span><br><span class="line">  <span class="variable language_">console</span>.<span class="title function_">log</span>(<span class="string">&quot;使用state获取值&quot;</span>,<span class="variable language_">this</span>.<span class="property">state</span>.<span class="property">phoneNumber</span>)</span><br><span class="line">&#125;</span><br><span class="line"><span class="title function_">render</span>(<span class="params"></span>) &#123;</span><br><span class="line">  <span class="keyword">return</span> (</span><br><span class="line">    <span class="language-xml"><span class="tag">&lt;<span class="name">div</span> <span class="attr">className</span>=<span class="string">&quot;App&quot;</span>&gt;</span></span></span><br><span class="line"><span class="language-xml">      <span class="tag">&lt;<span class="name">Zinput</span> <span class="attr">ref</span>=<span class="string">&quot;zinput&quot;</span> <span class="attr">chanegNumber</span>=<span class="string">&#123;this.changePhoneNumber&#125;</span>&gt;</span><span class="tag">&lt;/<span class="name">Zinput</span>&gt;</span></span></span><br><span class="line"><span class="language-xml">      <span class="tag">&lt;<span class="name">input</span> <span class="attr">type</span>=<span class="string">&quot;button&quot;</span> <span class="attr">value</span>=<span class="string">&quot;获取电话号码的值&quot;</span> <span class="attr">onClick</span>=<span class="string">&#123;</span> <span class="attr">this.handerClick</span> &#125;/&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><span class="line">  );</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure>]]></content>
    
    
    <summary type="html">20180402_使用react实现数据同步功能</summary>
    
    
    
    
  </entry>
  
  <entry>
    <title>20180402_获取树形结构的所有节点</title>
    <link href="https://www.zhuyangxing.cn/2018/04/02/20180402_%E8%8E%B7%E5%8F%96%E6%A0%91%E5%BD%A2%E7%BB%93%E6%9E%84%E7%9A%84%E6%89%80%E6%9C%89%E8%8A%82%E7%82%B9/"/>
    <id>https://www.zhuyangxing.cn/2018/04/02/20180402_%E8%8E%B7%E5%8F%96%E6%A0%91%E5%BD%A2%E7%BB%93%E6%9E%84%E7%9A%84%E6%89%80%E6%9C%89%E8%8A%82%E7%82%B9/</id>
    <published>2018-04-02T15:44:11.000Z</published>
    <updated>2026-06-20T07:58:44.787Z</updated>
    
    <content type="html"><![CDATA[<h1 id="20180402-获取树形结构的所有节点"><a href="#20180402-获取树形结构的所有节点" class="headerlink" title="20180402_获取树形结构的所有节点"></a>20180402_获取树形结构的所有节点</h1><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><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></pre></td><td class="code"><pre><span class="line"><span class="keyword">let</span> tree = &#123;</span><br><span class="line">    <span class="string">&quot;id&quot;</span>: <span class="number">1</span>,</span><br><span class="line">    <span class="string">&quot;label&quot;</span>: <span class="string">&quot;一级 1&quot;</span>,</span><br><span class="line">    <span class="string">&quot;children&quot;</span>: [&#123;</span><br><span class="line">        <span class="string">&quot;id&quot;</span>: <span class="number">3</span>,</span><br><span class="line">        <span class="string">&quot;label&quot;</span>: <span class="string">&quot;二级 2-1&quot;</span>,</span><br><span class="line">        <span class="string">&quot;children&quot;</span>: [&#123;</span><br><span class="line">            <span class="string">&quot;id&quot;</span>: <span class="number">4</span>,</span><br><span class="line">            <span class="string">&quot;label&quot;</span>: <span class="string">&quot;三级 3-1-1&quot;</span></span><br><span class="line">        &#125;, &#123;</span><br><span class="line">            <span class="string">&quot;id&quot;</span>: <span class="number">5</span>,</span><br><span class="line">            <span class="string">&quot;label&quot;</span>: <span class="string">&quot;三级 3-1-2&quot;</span>,</span><br><span class="line">            <span class="string">&quot;disabled&quot;</span>: <span class="literal">true</span></span><br><span class="line">        &#125;]</span><br><span class="line">    &#125;, &#123;</span><br><span class="line">        <span class="string">&quot;id&quot;</span>: <span class="number">2</span>,</span><br><span class="line">        <span class="string">&quot;label&quot;</span>: <span class="string">&quot;二级 2-2&quot;</span>,</span><br><span class="line">        <span class="string">&quot;disabled&quot;</span>: <span class="literal">true</span>,</span><br><span class="line">        <span class="string">&quot;children&quot;</span>: [&#123;</span><br><span class="line">            <span class="string">&quot;id&quot;</span>: <span class="number">6</span>,</span><br><span class="line">            <span class="string">&quot;label&quot;</span>: <span class="string">&quot;三级 3-2-1&quot;</span></span><br><span class="line">        &#125;, &#123;</span><br><span class="line">            <span class="string">&quot;id&quot;</span>: <span class="number">7</span>,</span><br><span class="line">            <span class="string">&quot;label&quot;</span>: <span class="string">&quot;三级 3-2-2&quot;</span>,</span><br><span class="line">            <span class="string">&quot;disabled&quot;</span>: <span class="literal">true</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="comment">/**</span></span><br><span class="line"><span class="comment"> * 把树形结构拍平获取所有节点</span></span><br><span class="line"><span class="comment"> * <span class="doctag">@method</span>   <span class="variable">getNode</span></span></span><br><span class="line"><span class="comment"> * <span class="doctag">@param</span>    &#123;<span class="type">Object</span>&#125;                node 要拍平结构的树对象</span></span><br><span class="line"><span class="comment"> * <span class="doctag">@return</span>   &#123;<span class="type">Array</span>&#125;                      拍平后的节点数组，不包含节点的子节点信息</span></span><br><span class="line"><span class="comment"> * <span class="doctag">@author</span> 朱阳星</span></span><br><span class="line"><span class="comment"> * <span class="doctag">@email</span>  zhuyangxing<span class="doctag">@foxmail</span>.com</span></span><br><span class="line"><span class="comment"> * <span class="doctag">@datetime</span> 2018-04-01T16:42:52+080</span></span><br><span class="line"><span class="comment"> */</span></span><br><span class="line"><span class="keyword">function</span> <span class="title function_">getNode</span>(<span class="params">node</span>) &#123;</span><br><span class="line">    <span class="keyword">let</span> result = []</span><br><span class="line">    <span class="keyword">let</span> _getNode = <span class="keyword">function</span> (<span class="params">node</span>) &#123;</span><br><span class="line">        <span class="keyword">let</span> tmp =<span class="title class_">JSON</span>.<span class="title function_">parse</span>(<span class="title class_">JSON</span>.<span class="title function_">stringify</span>(node))</span><br><span class="line">        <span class="keyword">delete</span> tmp.<span class="property">children</span></span><br><span class="line">        result.<span class="title function_">push</span>(tmp) <span class="comment">//移除拍平数组的子元素,只保留节点相关元素</span></span><br><span class="line">        <span class="keyword">let</span> child = node.<span class="property">children</span></span><br><span class="line">        <span class="keyword">if</span> (child != <span class="literal">undefined</span> &amp;&amp; child.<span class="property">length</span> &gt; <span class="number">0</span>) &#123;</span><br><span class="line">            child.<span class="title function_">forEach</span>(<span class="function"><span class="params">ele</span>=&gt;</span>&#123;</span><br><span class="line">                <span class="variable language_">arguments</span>.<span class="title function_">callee</span>(ele)</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_">_getNode</span>(node)</span><br><span class="line">    _getNode=<span class="literal">null</span></span><br><span class="line">    <span class="keyword">return</span> result</span><br><span class="line">&#125;</span><br><span class="line"><span class="title function_">getNode</span>(tree)</span><br></pre></td></tr></table></figure>]]></content>
    
    
    <summary type="html">20180402_获取树形结构的所有节点</summary>
    
    
    
    
  </entry>
  
  <entry>
    <title>20180330_使用vue简单实现手机号银行卡的同步显示功能</title>
    <link href="https://www.zhuyangxing.cn/2018/03/30/20180330_%E4%BD%BF%E7%94%A8vue%E7%AE%80%E5%8D%95%E5%AE%9E%E7%8E%B0%E6%89%8B%E6%9C%BA%E5%8F%B7%E9%93%B6%E8%A1%8C%E5%8D%A1%E7%9A%84%E5%90%8C%E6%AD%A5%E6%98%BE%E7%A4%BA%E5%8A%9F%E8%83%BD/"/>
    <id>https://www.zhuyangxing.cn/2018/03/30/20180330_%E4%BD%BF%E7%94%A8vue%E7%AE%80%E5%8D%95%E5%AE%9E%E7%8E%B0%E6%89%8B%E6%9C%BA%E5%8F%B7%E9%93%B6%E8%A1%8C%E5%8D%A1%E7%9A%84%E5%90%8C%E6%AD%A5%E6%98%BE%E7%A4%BA%E5%8A%9F%E8%83%BD/</id>
    <published>2018-03-30T15:44:21.000Z</published>
    <updated>2026-06-20T07:58:44.787Z</updated>
    
    <content type="html"><![CDATA[<h1 id="20180330-使用vue简单实现手机号银行卡的同步显示功能"><a href="#20180330-使用vue简单实现手机号银行卡的同步显示功能" class="headerlink" title="20180330_使用vue简单实现手机号银行卡的同步显示功能"></a>20180330_使用vue简单实现手机号银行卡的同步显示功能</h1><h1 id="简单实现手机号银行卡的同步显示功能"><a href="#简单实现手机号银行卡的同步显示功能" class="headerlink" title="简单实现手机号银行卡的同步显示功能"></a>简单实现手机号银行卡的同步显示功能</h1><p><strong>这是某盟的一道面试题</strong><br>难道不都是只要有了清晰的思路后边写边优化么<br>当时我就说了思路用计算属性根据输入框的内容计算出预览框的值<br>处理focus和blur事件即可<br>非要手写，手写根本写不出啊，然后面试官就认为我不会 无语了   </p><h2 id="要求如下"><a href="#要求如下" class="headerlink" title="要求如下"></a>要求如下</h2><ol><li>输入框输入内容数据长度大于0，展示出预览信息</li><li>光标离开关闭预览信息</li><li>预览信息每隔4位插入一个特殊字符_,输入内容不变</li></ol><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><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></pre></td><td class="code"><pre><span class="line"><span class="tag">&lt;<span class="name">template</span> <span class="attr">lang</span>=<span class="string">&quot;html&quot;</span>&gt;</span></span><br><span class="line">  <span class="tag">&lt;<span class="name">div</span> <span class="attr">class</span>=<span class="string">&quot;zInput&quot;</span>&gt;</span></span><br><span class="line">      <span class="tag">&lt;<span class="name">div</span> <span class="attr">class</span>=<span class="string">&quot;big-show&quot;</span> <span class="attr">v-show</span>=<span class="string">&quot;showBig&quot;</span>&gt;</span>&#123;&#123;txt2&#125;&#125;<span class="tag">&lt;/<span class="name">div</span>&gt;</span></span><br><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></span><br><span class="line"><span class="tag">             @<span class="attr">blur</span>=<span class="string">&quot;handerBlur&quot;</span></span></span><br><span class="line"><span class="tag">             @<span class="attr">focus</span>=<span class="string">&quot;handerFocus&quot;</span></span></span><br><span class="line"><span class="tag">             <span class="attr">v-model</span>=<span class="string">&quot;txt&quot;</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><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">export</span> <span class="keyword">default</span> &#123;</span></span><br><span class="line"><span class="language-javascript">    <span class="attr">name</span>: <span class="string">&#x27;z-input&#x27;</span>,</span></span><br><span class="line"><span class="language-javascript">    <span class="title function_">data</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">txt</span>: <span class="string">&#x27;&#x27;</span>,</span></span><br><span class="line"><span class="language-javascript">            <span class="attr">showBig</span>: <span class="literal">false</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="attr">computed</span>: &#123;</span></span><br><span class="line"><span class="language-javascript">        <span class="attr">txt2</span>: <span class="keyword">function</span> (<span class="params"></span>) &#123;</span></span><br><span class="line"><span class="language-javascript">            <span class="keyword">if</span> (<span class="variable language_">this</span>.<span class="property">txt</span>.<span class="property">length</span> &gt; <span class="number">0</span>) &#123;</span></span><br><span class="line"><span class="language-javascript">                <span class="variable language_">this</span>.<span class="property">showBig</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="keyword">return</span> <span class="variable language_">this</span>.<span class="title function_">getStr</span>(<span class="variable language_">this</span>.<span class="property">txt</span>, <span class="number">4</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="attr">methods</span>: &#123;</span></span><br><span class="line"><span class="language-javascript">        <span class="title function_">handerBlur</span> () &#123;</span></span><br><span class="line"><span class="language-javascript">            <span class="variable language_">this</span>.<span class="property">showBig</span> = <span class="literal">false</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_">handerFocus</span> (evt) &#123;</span></span><br><span class="line"><span class="language-javascript">            <span class="keyword">if</span> (evt.<span class="property">target</span>.<span class="property">value</span>.<span class="property">length</span> &gt; <span class="number">0</span>) &#123;</span></span><br><span class="line"><span class="language-javascript">                <span class="variable language_">this</span>.<span class="property">showBig</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">        &#125;,</span></span><br><span class="line"><span class="language-javascript">        <span class="title function_">getStr</span> (str, len) &#123;</span></span><br><span class="line"><span class="language-javascript">            <span class="keyword">let</span> lenth = str.<span class="property">length</span></span></span><br><span class="line"><span class="language-javascript">            <span class="keyword">let</span> len1 = len - <span class="number">1</span></span></span><br><span class="line"><span class="language-javascript">            <span class="keyword">let</span> newStr = <span class="string">&#x27;&#x27;</span></span></span><br><span class="line"><span class="language-javascript">            <span class="keyword">for</span> (<span class="keyword">var</span> i = <span class="number">0</span>; i &lt; lenth; i++) &#123;</span></span><br><span class="line"><span class="language-javascript">                <span class="keyword">if</span> (i % len === len1 &amp;&amp; i &gt; <span class="number">0</span>) &#123;</span></span><br><span class="line"><span class="language-javascript">                    newStr += str.<span class="title function_">charAt</span>(i) + <span class="string">&#x27;_&#x27;</span></span></span><br><span class="line"><span class="language-javascript">                &#125; <span class="keyword">else</span> &#123;</span></span><br><span class="line"><span class="language-javascript">                    newStr += str.<span class="title function_">charAt</span>(i)</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="keyword">if</span> (newStr.<span class="property">length</span> % (len + <span class="number">1</span>) === <span class="number">0</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">                newStr = newStr.<span class="title function_">substr</span>(<span class="number">0</span>, newStr.<span class="property">length</span> - <span class="number">1</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">return</span> newStr</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><span class="line"><span class="tag">&lt;<span class="name">style</span> <span class="attr">lang</span>=<span class="string">&quot;less&quot;</span>&gt;</span><span class="language-css"></span></span><br><span class="line"><span class="language-css"><span class="selector-class">.zInput</span>&#123;</span></span><br><span class="line"><span class="language-css">    <span class="attribute">position</span>: relative;</span></span><br><span class="line"><span class="language-css">    <span class="selector-class">.big-show</span> &#123;</span></span><br><span class="line"><span class="language-css">        <span class="attribute">position</span>: absolute;</span></span><br><span class="line"><span class="language-css">        <span class="attribute">top</span>: -<span class="number">40px</span>;</span></span><br><span class="line"><span class="language-css">        <span class="attribute">font-size</span>: <span class="number">36px</span>;</span></span><br><span class="line"><span class="language-css">        <span class="attribute">line-height</span>: <span class="number">40px</span>;</span></span><br><span class="line"><span class="language-css">        <span class="attribute">background-color</span>: red;</span></span><br><span class="line"><span class="language-css">    &#125;</span></span><br><span class="line"><span class="language-css">&#125;</span></span><br><span class="line"><span class="language-css"><span class="selector-class">.zInput</span>&#123;</span></span><br><span class="line"><span class="language-css">    <span class="attribute">top</span>:<span class="number">50px</span>;</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></pre></td></tr></table></figure><p>如果再加入个长度限制，则以上方法就不合适了,更换实现方案<br><code>v-model</code>其实是个<a href="https://cn.vuejs.org/v2/guide/components.html#%E4%BD%BF%E7%94%A8%E8%87%AA%E5%AE%9A%E4%B9%89%E4%BA%8B%E4%BB%B6%E7%9A%84%E8%A1%A8%E5%8D%95%E8%BE%93%E5%85%A5%E7%BB%84%E4%BB%B6">语法糖</a><br>分开写为<code>v-bind:value</code>和<code>v-on:input</code></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><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></pre></td><td class="code"><pre><span class="line"><span class="tag">&lt;<span class="name">template</span> <span class="attr">lang</span>=<span class="string">&quot;html&quot;</span>&gt;</span></span><br><span class="line">  <span class="tag">&lt;<span class="name">div</span> <span class="attr">class</span>=<span class="string">&quot;zInput&quot;</span>&gt;</span></span><br><span class="line">      <span class="tag">&lt;<span class="name">div</span> <span class="attr">class</span>=<span class="string">&quot;big-show&quot;</span> <span class="attr">v-show</span>=<span class="string">&quot;showBig&quot;</span>&gt;</span>&#123;&#123;txt2&#125;&#125;<span class="tag">&lt;/<span class="name">div</span>&gt;</span></span><br><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></span><br><span class="line"><span class="tag">             @<span class="attr">blur</span>=<span class="string">&quot;handerBlur&quot;</span></span></span><br><span class="line"><span class="tag">             @<span class="attr">focus</span>=<span class="string">&quot;handerFocus&quot;</span></span></span><br><span class="line"><span class="tag">             <span class="attr">v-bind:value</span>=<span class="string">&quot;txt&quot;</span></span></span><br><span class="line"><span class="tag">             <span class="attr">v-on:input</span>=<span class="string">&quot;handerInput&quot;</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><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">export</span> <span class="keyword">default</span> &#123;</span></span><br><span class="line"><span class="language-javascript">    <span class="attr">name</span>: <span class="string">&#x27;z-input&#x27;</span>,</span></span><br><span class="line"><span class="language-javascript">    <span class="title function_">data</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">txt</span>: <span class="string">&#x27;&#x27;</span>,</span></span><br><span class="line"><span class="language-javascript">            <span class="attr">txt2</span>: <span class="string">&#x27;&#x27;</span>,</span></span><br><span class="line"><span class="language-javascript">            <span class="attr">showBig</span>: <span class="literal">false</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="attr">methods</span>: &#123;</span></span><br><span class="line"><span class="language-javascript">        <span class="title function_">handerInput</span> (evt) &#123;</span></span><br><span class="line"><span class="language-javascript">            <span class="keyword">let</span> val = evt.<span class="property">target</span>.<span class="property">value</span>.<span class="title function_">substr</span>(<span class="number">0</span>, <span class="number">13</span>)</span></span><br><span class="line"><span class="language-javascript">            <span class="comment">// 限制长度13位</span></span></span><br><span class="line"><span class="language-javascript">            <span class="variable language_">this</span>.<span class="property">txt</span> = val</span></span><br><span class="line"><span class="language-javascript">            evt.<span class="property">target</span>.<span class="property">value</span> = val</span></span><br><span class="line"><span class="language-javascript">            <span class="keyword">if</span> (<span class="variable language_">this</span>.<span class="property">txt</span>.<span class="property">length</span> &gt; <span class="number">0</span>) &#123;</span></span><br><span class="line"><span class="language-javascript">                <span class="variable language_">this</span>.<span class="property">showBig</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="variable language_">this</span>.<span class="property">txt2</span> = <span class="variable language_">this</span>.<span class="title function_">getStr</span>(<span class="variable language_">this</span>.<span class="property">txt</span>, <span class="number">4</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_">handerBlur</span> () &#123;</span></span><br><span class="line"><span class="language-javascript">            <span class="variable language_">this</span>.<span class="property">showBig</span> = <span class="literal">false</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_">handerFocus</span> (evt) &#123;</span></span><br><span class="line"><span class="language-javascript">            <span class="keyword">if</span> (evt.<span class="property">target</span>.<span class="property">value</span>.<span class="property">length</span> &gt; <span class="number">0</span>) &#123;</span></span><br><span class="line"><span class="language-javascript">                <span class="variable language_">this</span>.<span class="property">showBig</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">        &#125;,</span></span><br><span class="line"><span class="language-javascript">        <span class="title function_">getStr</span> (str, len) &#123;</span></span><br><span class="line"><span class="language-javascript">            <span class="keyword">let</span> lenth = str.<span class="property">length</span></span></span><br><span class="line"><span class="language-javascript">            <span class="keyword">let</span> len1 = len - <span class="number">1</span></span></span><br><span class="line"><span class="language-javascript">            <span class="keyword">let</span> newStr = <span class="string">&#x27;&#x27;</span></span></span><br><span class="line"><span class="language-javascript">            <span class="keyword">for</span> (<span class="keyword">var</span> i = <span class="number">0</span>; i &lt; lenth; i++) &#123;</span></span><br><span class="line"><span class="language-javascript">                <span class="keyword">if</span> (i % len === len1 &amp;&amp; i &gt; <span class="number">0</span>) &#123;</span></span><br><span class="line"><span class="language-javascript">                    newStr += str.<span class="title function_">charAt</span>(i) + <span class="string">&#x27;_&#x27;</span></span></span><br><span class="line"><span class="language-javascript">                &#125; <span class="keyword">else</span> &#123;</span></span><br><span class="line"><span class="language-javascript">                    newStr += str.<span class="title function_">charAt</span>(i)</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="keyword">if</span> (newStr.<span class="property">length</span> % (len + <span class="number">1</span>) === <span class="number">0</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">                newStr = newStr.<span class="title function_">substr</span>(<span class="number">0</span>, newStr.<span class="property">length</span> - <span class="number">1</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">return</span> newStr</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></pre></td></tr></table></figure><p>限制只能输入数字<br>首先想到的是在<code>keyup</code>时把非数字过滤掉<br>但是事实是先执行<code>keydown</code>-&gt;<code>handerInput</code>-&gt;<code>keyup</code></p><p>那就在<code>keydown</code>时处理呗，但是keydown修改<code>evt.target.value</code>后<br>在<code>handerInput</code>取到的<code>evt.target.value</code>依旧是未处理的所以说在<code>keydown</code>处理不起作用<br>必须要在<code>handerInput</code>时处理</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></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></span><br><span class="line"><span class="tag">       @<span class="attr">blur</span>=<span class="string">&quot;handerBlur&quot;</span></span></span><br><span class="line"><span class="tag">       @<span class="attr">focus</span>=<span class="string">&quot;handerFocus&quot;</span></span></span><br><span class="line"><span class="tag">       @<span class="attr">keyup</span>=<span class="string">&quot;handerKeyup&quot;</span></span></span><br><span class="line"><span class="tag">       @<span class="attr">keydown</span>=<span class="string">&quot;handerKeydown&quot;</span></span></span><br><span class="line"><span class="tag">       <span class="attr">v-bind:value</span>=<span class="string">&quot;txt&quot;</span></span></span><br><span class="line"><span class="tag">       <span class="attr">v-on:input</span>=<span class="string">&quot;handerInput&quot;</span>&gt;</span></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 function_">handerKeydown</span> (evt) &#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;handerKeydown&#x27;</span>)</span></span><br><span class="line"><span class="language-javascript">           evt.<span class="property">target</span>.<span class="property">value</span> = evt.<span class="property">target</span>.<span class="property">value</span>.<span class="title function_">replace</span>(<span class="regexp">/[^\d]/g</span>, <span class="string">&#x27;&#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">       &#125;,</span></span><br><span class="line"><span class="language-javascript">       <span class="title function_">handerKeyup</span> (evt) &#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;keyup&#x27;</span>)</span></span><br><span class="line"><span class="language-javascript">           evt.<span class="property">target</span>.<span class="property">value</span> = evt.<span class="property">target</span>.<span class="property">value</span>.<span class="title function_">replace</span>(<span class="regexp">/[^\d]/g</span>, <span class="string">&#x27;&#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">       &#125;,</span></span><br><span class="line"><span class="language-javascript">       <span class="title function_">handerInput</span> (evt) &#123;</span></span><br><span class="line"><span class="language-javascript">           <span class="keyword">let</span> val = evt.<span class="property">target</span>.<span class="property">value</span>.<span class="title function_">substr</span>(<span class="number">0</span>, <span class="number">13</span>).<span class="title function_">replace</span>(<span class="regexp">/[^\d]/g</span>, <span class="string">&#x27;&#x27;</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;handerInput__val&#x27;</span>, val)</span></span><br><span class="line"><span class="language-javascript">           <span class="comment">//这里拿到的val是纯数字</span></span></span><br><span class="line"><span class="language-javascript">           evt.<span class="property">target</span>.<span class="property">value</span> = val</span></span><br><span class="line"><span class="language-javascript">           <span class="variable language_">this</span>.<span class="property">txt</span> = val</span></span><br><span class="line"><span class="language-javascript">           <span class="keyword">if</span> (<span class="variable language_">this</span>.<span class="property">txt</span>.<span class="property">length</span> &gt; <span class="number">0</span>) &#123;</span></span><br><span class="line"><span class="language-javascript">               <span class="variable language_">this</span>.<span class="property">showBig</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="variable language_">this</span>.<span class="property">txt2</span> = <span class="variable language_">this</span>.<span class="title function_">getStr</span>(<span class="variable language_">this</span>.<span class="property">txt</span>, <span class="number">4</span>)</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>]]></content>
    
    
    <summary type="html">20180330_使用vue简单实现手机号银行卡的同步显示功能</summary>
    
    
    
    
  </entry>
  
  <entry>
    <title>20180330_论vue项目api相关代码的组织方式</title>
    <link href="https://www.zhuyangxing.cn/2018/03/30/20180330_%E8%AE%BAvue%E9%A1%B9%E7%9B%AEapi%E7%9B%B8%E5%85%B3%E4%BB%A3%E7%A0%81%E7%9A%84%E7%BB%84%E7%BB%87%E6%96%B9%E5%BC%8F/"/>
    <id>https://www.zhuyangxing.cn/2018/03/30/20180330_%E8%AE%BAvue%E9%A1%B9%E7%9B%AEapi%E7%9B%B8%E5%85%B3%E4%BB%A3%E7%A0%81%E7%9A%84%E7%BB%84%E7%BB%87%E6%96%B9%E5%BC%8F/</id>
    <published>2018-03-30T15:44:21.000Z</published>
    <updated>2026-06-20T07:58:44.787Z</updated>
    
    <content type="html"><![CDATA[<h1 id="20180330-论vue项目api相关代码的组织方式"><a href="#20180330-论vue项目api相关代码的组织方式" class="headerlink" title="20180330_论vue项目api相关代码的组织方式"></a>20180330_论vue项目api相关代码的组织方式</h1><p>看了下项目组同事的代码，发现不同项目有不同的组织版本  </p><p><strong>版本一：</strong></p><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></pre></td><td class="code"><pre><span class="line">├─apis</span><br><span class="line">│      a.api.js</span><br><span class="line">│      b.api.js</span><br><span class="line">│      b.api.js</span><br><span class="line">│      d.api.js</span><br></pre></td></tr></table></figure><p>每个api文件里都是这样的代码</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></pre></td><td class="code"><pre><span class="line"><span class="comment">// d.api.js</span></span><br><span class="line"><span class="keyword">import</span> axios <span class="keyword">from</span> <span class="string">&#x27;@/utils/http&#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_">editUser</span> (<span class="params">Param</span>) &#123;</span><br><span class="line">    <span class="keyword">return</span> axios.<span class="title function_">post</span>(<span class="string">&#x27;url1&#x27;</span>, &#123;</span><br><span class="line">        ...<span class="title class_">Param</span></span><br><span class="line">    &#125;)</span><br><span class="line">&#125;</span><br><span class="line"><span class="keyword">export</span> <span class="keyword">function</span> <span class="title function_">deleteUser</span> (<span class="params">Param</span>) &#123;</span><br><span class="line">    <span class="keyword">return</span> axios.<span class="title function_">post</span>(<span class="string">&#x27;url2&#x27;</span>, &#123;</span><br><span class="line">        ...<span class="title class_">Param</span></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">import</span> &#123;editUser&#125; <span class="keyword">from</span> <span class="string">&#x27;@/apis/d.api.js&#x27;</span></span><br></pre></td></tr></table></figure><p>这种方法的缺点：</p><ol><li>新增一个借口就新增一个方法</li><li>任何需要调用借口的地方都需要引入</li><li>api文件里只有url和函数名不一样,其他都一样,应该封装到一起</li><li>查看所有接口需一个一个函数去看,麻烦</li></ol><p><strong>版本二：</strong><br>干脆不把api统一到一起，把axios挂载到vue对象上只在需要的地方写</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">this.$axios.post(url,params).then()</span><br></pre></td></tr></table></figure><p>这种方法缺点：</p><ol><li>如果修改url路径,需要全局搜索替换改动地方较多</li><li>无法查看所有接口，不便于全局掌控</li></ol><p><strong>版本三:</strong></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></pre></td><td class="code"><pre><span class="line"><span class="comment">// apis/index.js</span></span><br><span class="line"><span class="comment">// 把所有api的url统一在一起并挂在到vue对象上</span></span><br><span class="line"><span class="comment">// 所有接口都在一个文件里会比较大</span></span><br><span class="line"><span class="comment">// 可以按功能模块分组编写</span></span><br><span class="line"><span class="keyword">let</span> <span class="variable constant_">ENV</span> = &#123;</span><br><span class="line">    <span class="attr">name1</span>: <span class="string">&#x27;url1&#x27;</span>, </span><br><span class="line">    <span class="comment">// 用户相关接口</span></span><br><span class="line">    <span class="attr">name2</span>: <span class="string">&#x27;url2&#x27;</span>, </span><br><span class="line">    <span class="comment">// 积分相关接口</span></span><br><span class="line">    <span class="attr">name3</span>: <span class="string">&#x27;url3&#x27;</span>,</span><br><span class="line">    <span class="comment">// 产品相关接口</span></span><br><span class="line">    <span class="attr">name4</span>: <span class="string">&#x27;url4&#x27;</span>, </span><br><span class="line">&#125;</span><br><span class="line"><span class="keyword">export</span> <span class="keyword">default</span> <span class="variable constant_">ENV</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></pre></td><td class="code"><pre><span class="line"><span class="comment">// src/main.js</span></span><br><span class="line"><span class="keyword">import</span> api <span class="keyword">from</span> <span class="string">&#x27;@/apis/index.js&#x27;</span></span><br><span class="line"><span class="title class_">Vue</span>.<span class="property"><span class="keyword">prototype</span></span>.<span class="property">$api</span> = api</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></pre></td><td class="code"><pre><span class="line"><span class="comment">//需要调用接口的js文件</span></span><br><span class="line"><span class="variable language_">this</span>.<span class="property">$axios</span>.<span class="title function_">post</span>(<span class="variable language_">this</span>.<span class="property">$api</span>.<span class="property">name1</span>,params).<span class="title function_">then</span>()</span><br></pre></td></tr></table></figure><p>缺点：</p><ol><li>暂时没想到<br>优点:</li><li>更改url时只需要改动一个地方</li><li>可以在一个地方查看所有接口</li></ol>]]></content>
    
    
    <summary type="html">20180330_论vue项目api相关代码的组织方式</summary>
    
    
    
    
  </entry>
  
  <entry>
    <title>20180327_vueDevtool 崩溃解决方案</title>
    <link href="https://www.zhuyangxing.cn/2018/03/27/20180327_vueDevtool%20%E5%B4%A9%E6%BA%83%E8%A7%A3%E5%86%B3%E6%96%B9%E6%A1%88/"/>
    <id>https://www.zhuyangxing.cn/2018/03/27/20180327_vueDevtool%20%E5%B4%A9%E6%BA%83%E8%A7%A3%E5%86%B3%E6%96%B9%E6%A1%88/</id>
    <published>2018-03-27T15:44:21.000Z</published>
    <updated>2026-06-20T07:58:44.787Z</updated>
    
    <content type="html"><![CDATA[<h1 id="20180327-vueDevtool-崩溃解决方案"><a href="#20180327-vueDevtool-崩溃解决方案" class="headerlink" title="20180327_vueDevtool 崩溃解决方案"></a>20180327_vueDevtool 崩溃解决方案</h1><p>关闭vuex的recording和event的recording,仅在需要的时候打开</p>]]></content>
    
    
    <summary type="html">20180327_vueDevtool 崩溃解决方案</summary>
    
    
    
    
  </entry>
  
  <entry>
    <title>20180327_字段B的校验规则根据字段A的值发生改变实现方案</title>
    <link href="https://www.zhuyangxing.cn/2018/03/27/20180327_%E5%AD%97%E6%AE%B5B%E7%9A%84%E6%A0%A1%E9%AA%8C%E8%A7%84%E5%88%99%E6%A0%B9%E6%8D%AE%E5%AD%97%E6%AE%B5A%E7%9A%84%E5%80%BC%E5%8F%91%E7%94%9F%E6%94%B9%E5%8F%98%E5%AE%9E%E7%8E%B0%E6%96%B9%E6%A1%88/"/>
    <id>https://www.zhuyangxing.cn/2018/03/27/20180327_%E5%AD%97%E6%AE%B5B%E7%9A%84%E6%A0%A1%E9%AA%8C%E8%A7%84%E5%88%99%E6%A0%B9%E6%8D%AE%E5%AD%97%E6%AE%B5A%E7%9A%84%E5%80%BC%E5%8F%91%E7%94%9F%E6%94%B9%E5%8F%98%E5%AE%9E%E7%8E%B0%E6%96%B9%E6%A1%88/</id>
    <published>2018-03-27T15:44:21.000Z</published>
    <updated>2026-06-20T07:58:44.787Z</updated>
    
    <content type="html"><![CDATA[<h1 id="20180327-字段B的校验规则根据字段A的值发生改变实现方案"><a href="#20180327-字段B的校验规则根据字段A的值发生改变实现方案" class="headerlink" title="20180327_字段B的校验规则根据字段A的值发生改变实现方案"></a>20180327_字段B的校验规则根据字段A的值发生改变实现方案</h1><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><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><span class="line">80</span><br><span class="line">81</span><br><span class="line">82</span><br><span class="line">83</span><br><span class="line">84</span><br><span class="line">85</span><br><span class="line">86</span><br><span class="line">87</span><br><span class="line">88</span><br><span class="line">89</span><br><span class="line">90</span><br><span class="line">91</span><br><span class="line">92</span><br><span class="line">93</span><br><span class="line">94</span><br><span class="line">95</span><br><span class="line">96</span><br><span class="line">97</span><br><span class="line">98</span><br><span class="line">99</span><br><span class="line">100</span><br><span class="line">101</span><br><span class="line">102</span><br><span class="line">103</span><br><span class="line">104</span><br><span class="line">105</span><br><span class="line">106</span><br><span class="line">107</span><br><span class="line">108</span><br><span class="line">109</span><br><span class="line">110</span><br><span class="line">111</span><br><span class="line">112</span><br><span class="line">113</span><br><span class="line">114</span><br><span class="line">115</span><br><span class="line">116</span><br><span class="line">117</span><br><span class="line">118</span><br><span class="line">119</span><br><span class="line">120</span><br><span class="line">121</span><br><span class="line">122</span><br><span class="line">123</span><br><span class="line">124</span><br><span class="line">125</span><br><span class="line">126</span><br><span class="line">127</span><br><span class="line">128</span><br><span class="line">129</span><br><span class="line">130</span><br><span class="line">131</span><br><span class="line">132</span><br><span class="line">133</span><br><span class="line">134</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment">&lt;!-- 动态设置校验规则 --&gt;</span></span><br><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">el-dialog</span> <span class="attr">title</span>=<span class="string">&quot;动态设置校验规则&quot;</span></span></span><br><span class="line"><span class="tag">         <span class="attr">:visible.sync</span>=<span class="string">&quot;dialogVisible&quot;</span></span></span><br><span class="line"><span class="tag">         <span class="attr">size</span>=<span class="string">&quot;small&quot;</span></span></span><br><span class="line"><span class="tag">         <span class="attr">:close-on-click-modal</span>=<span class="string">&quot;false&quot;</span></span></span><br><span class="line"><span class="tag">         <span class="attr">:close-on-press-escape</span>=<span class="string">&quot;false&quot;</span></span></span><br><span class="line"><span class="tag">         <span class="attr">:show-close</span>=<span class="string">&quot;false&quot;</span>&gt;</span></span><br><span class="line">  <span class="tag">&lt;<span class="name">el-form</span> <span class="attr">ref</span>=<span class="string">&quot;form&quot;</span></span></span><br><span class="line"><span class="tag">           <span class="attr">:model</span>=<span class="string">&quot;form&quot;</span></span></span><br><span class="line"><span class="tag">           <span class="attr">:rules</span>=<span class="string">&quot;rules&quot;</span></span></span><br><span class="line"><span class="tag">           <span class="attr">label-width</span>=<span class="string">&quot;80px&quot;</span>&gt;</span></span><br><span class="line">      <span class="tag">&lt;<span class="name">el-form-item</span> <span class="attr">label</span>=<span class="string">&quot;证件信息&quot;</span></span></span><br><span class="line"><span class="tag">                    <span class="attr">required</span>&gt;</span></span><br><span class="line">          <span class="tag">&lt;<span class="name">el-row</span>&gt;</span></span><br><span class="line">              <span class="tag">&lt;<span class="name">el-col</span> <span class="attr">:span</span>=<span class="string">&quot;8&quot;</span>&gt;</span></span><br><span class="line">                  <span class="tag">&lt;<span class="name">el-form-item</span> <span class="attr">prop</span>=<span class="string">&quot;certificateType&quot;</span>&gt;</span></span><br><span class="line">                      <span class="tag">&lt;<span class="name">el-select</span> <span class="attr">v-model</span>=<span class="string">&quot;form.certificateType&quot;</span></span></span><br><span class="line"><span class="tag">                                 <span class="attr">clearable</span></span></span><br><span class="line"><span class="tag">                                 @<span class="attr">change</span>=<span class="string">&quot;changeHander&quot;</span></span></span><br><span class="line"><span class="tag">                                 <span class="attr">placeholder</span>=<span class="string">&quot;请选择证件类型&quot;</span>&gt;</span></span><br><span class="line">                          <span class="tag">&lt;<span class="name">el-option</span> <span class="attr">label</span>=<span class="string">&quot;身份证&quot;</span></span></span><br><span class="line"><span class="tag">                                     <span class="attr">value</span>=<span class="string">&quot;id&quot;</span>&gt;</span><span class="tag">&lt;/<span class="name">el-option</span>&gt;</span></span><br><span class="line">                          <span class="tag">&lt;<span class="name">el-option</span> <span class="attr">label</span>=<span class="string">&quot;护照&quot;</span></span></span><br><span class="line"><span class="tag">                                     <span class="attr">value</span>=<span class="string">&quot;passPort&quot;</span>&gt;</span><span class="tag">&lt;/<span class="name">el-option</span>&gt;</span></span><br><span class="line">                      <span class="tag">&lt;/<span class="name">el-select</span>&gt;</span></span><br><span class="line">                  <span class="tag">&lt;/<span class="name">el-form-item</span>&gt;</span></span><br><span class="line">              <span class="tag">&lt;/<span class="name">el-col</span>&gt;</span></span><br><span class="line">              <span class="tag">&lt;<span class="name">el-col</span> <span class="attr">class</span>=<span class="string">&quot;line&quot;</span></span></span><br><span class="line"><span class="tag">                      <span class="attr">:span</span>=<span class="string">&quot;1&quot;</span>&gt;</span><span class="symbol">&amp;nbsp;</span><span class="tag">&lt;/<span class="name">el-col</span>&gt;</span></span><br><span class="line">              <span class="tag">&lt;<span class="name">el-col</span> <span class="attr">:span</span>=<span class="string">&quot;15&quot;</span>&gt;</span></span><br><span class="line">                  <span class="tag">&lt;<span class="name">el-form-item</span> <span class="attr">label</span>=<span class="string">&quot;&quot;</span></span></span><br><span class="line"><span class="tag">                                <span class="attr">ref</span>=<span class="string">&quot;certificateNum&quot;</span></span></span><br><span class="line"><span class="tag">                                <span class="attr">:rules</span>=<span class="string">&quot;certificateNumRule&quot;</span></span></span><br><span class="line"><span class="tag">                                <span class="attr">prop</span>=<span class="string">&quot;certificateNum&quot;</span>&gt;</span></span><br><span class="line">                      <span class="tag">&lt;<span class="name">el-input</span> <span class="attr">placeholder</span>=<span class="string">&quot;请输入证件号&quot;</span></span></span><br><span class="line"><span class="tag">                                <span class="attr">v-model</span>=<span class="string">&quot;form.certificateNum&quot;</span>&gt;</span><span class="tag">&lt;/<span class="name">el-input</span>&gt;</span></span><br><span class="line">                  <span class="tag">&lt;/<span class="name">el-form-item</span>&gt;</span></span><br><span class="line">              <span class="tag">&lt;/<span class="name">el-col</span>&gt;</span></span><br><span class="line">          <span class="tag">&lt;/<span class="name">el-row</span>&gt;</span></span><br><span class="line">      <span class="tag">&lt;/<span class="name">el-form-item</span>&gt;</span></span><br><span class="line">  <span class="tag">&lt;/<span class="name">el-form</span>&gt;</span></span><br><span class="line">  <span class="tag">&lt;<span class="name">div</span> <span class="attr">slot</span>=<span class="string">&quot;footer&quot;</span></span></span><br><span class="line"><span class="tag">       <span class="attr">class</span>=<span class="string">&quot;dialog-footer&quot;</span>&gt;</span></span><br><span class="line">      <span class="tag">&lt;<span class="name">el-button</span> @<span class="attr">click</span>=<span class="string">&quot;cancelDialog(&#x27;form&#x27;)&quot;</span></span></span><br><span class="line"><span class="tag">                 <span class="attr">size</span>=<span class="string">&quot;small&quot;</span>&gt;</span>取 消<span class="tag">&lt;/<span class="name">el-button</span>&gt;</span></span><br><span class="line">      <span class="tag">&lt;<span class="name">el-button</span> <span class="attr">type</span>=<span class="string">&quot;primary&quot;</span></span></span><br><span class="line"><span class="tag">                 @<span class="attr">click</span>=<span class="string">&quot;saveDialog(&#x27;form&#x27;)&quot;</span></span></span><br><span class="line"><span class="tag">                 <span class="attr">size</span>=<span class="string">&quot;small&quot;</span>&gt;</span>确 定<span class="tag">&lt;/<span class="name">el-button</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">el-dialog</span>&gt;</span></span><br><span class="line"><span class="tag">&lt;/<span class="name">template</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">export</span> <span class="keyword">default</span> &#123;</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">visible</span>: &#123;</span></span><br><span class="line"><span class="language-javascript">          <span class="attr">type</span>: <span class="title class_">Boolean</span>,</span></span><br><span class="line"><span class="language-javascript">          <span class="attr">default</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">  &#125;,</span></span><br><span class="line"><span class="language-javascript">  <span class="attr">computed</span>: &#123;</span></span><br><span class="line"><span class="language-javascript">      <span class="attr">dialogVisible</span>: &#123;</span></span><br><span class="line"><span class="language-javascript">          <span class="title function_">set</span> (newValue) &#123;</span></span><br><span class="line"><span class="language-javascript">              <span class="variable language_">this</span>.$emit(<span class="string">&#x27;update:visible&#x27;</span>, newValue)</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_">get</span> () &#123;</span></span><br><span class="line"><span class="language-javascript">              <span class="keyword">return</span> <span class="variable language_">this</span>.<span class="property">visible</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 class="title function_">data</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">certificateNumRule</span>: [],</span></span><br><span class="line"><span class="language-javascript">          <span class="attr">form</span>: &#123;</span></span><br><span class="line"><span class="language-javascript">              <span class="attr">certificateType</span>: <span class="string">&#x27;&#x27;</span>,</span></span><br><span class="line"><span class="language-javascript">              <span class="attr">certificateNum</span>: <span class="string">&#x27;&#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="attr">rules</span>: &#123;</span></span><br><span class="line"><span class="language-javascript">              <span class="attr">id</span>: [&#123;</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">                  <span class="attr">min</span>: <span class="number">18</span>,</span></span><br><span class="line"><span class="language-javascript">                  <span class="attr">max</span>: <span class="number">18</span>,</span></span><br><span class="line"><span class="language-javascript">                  <span class="attr">message</span>: <span class="string">&#x27;请输入长度18位的身份证号&#x27;</span>,</span></span><br><span class="line"><span class="language-javascript">                  <span class="attr">trigger</span>: <span class="string">&#x27;blur&#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="attr">passPort</span>: [&#123;</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">                  <span class="attr">min</span>: <span class="number">6</span>,</span></span><br><span class="line"><span class="language-javascript">                  <span class="attr">max</span>: <span class="number">6</span>,</span></span><br><span class="line"><span class="language-javascript">                  <span class="attr">message</span>: <span class="string">&#x27;请输入长度6位的护照号&#x27;</span>,</span></span><br><span class="line"><span class="language-javascript">                  <span class="attr">trigger</span>: <span class="string">&#x27;blur&#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="attr">certificateType</span>: [&#123;</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">                  <span class="attr">message</span>: <span class="string">&#x27;请选择证件类型&#x27;</span>,</span></span><br><span class="line"><span class="language-javascript">                  <span class="attr">trigger</span>: <span class="string">&#x27;blur,change&#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">  &#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_">changeHander</span> (val) &#123;</span></span><br><span class="line"><span class="language-javascript">          <span class="keyword">if</span> (val === <span class="string">&#x27;id&#x27;</span>) &#123;</span></span><br><span class="line"><span class="language-javascript">              <span class="variable language_">this</span>.<span class="property">certificateNumRule</span> = <span class="variable language_">this</span>.<span class="property">rules</span>.<span class="property">id</span></span></span><br><span class="line"><span class="language-javascript">          &#125; <span class="keyword">else</span> <span class="keyword">if</span> (val === <span class="string">&#x27;passPort&#x27;</span>) &#123;</span></span><br><span class="line"><span class="language-javascript">              <span class="variable language_">this</span>.<span class="property">certificateNumRule</span> = <span class="variable language_">this</span>.<span class="property">rules</span>.<span class="property">passPort</span></span></span><br><span class="line"><span class="language-javascript">          &#125; <span class="keyword">else</span> &#123;</span></span><br><span class="line"><span class="language-javascript">              <span class="variable language_">this</span>.<span class="property">certificateNumRule</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_">this</span>.$nextTick(<span class="function">() =&gt;</span> &#123;</span></span><br><span class="line"><span class="language-javascript">              <span class="variable language_">this</span>.<span class="property">$refs</span>.<span class="property">certificateNum</span>.<span class="title function_">resetField</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="variable language_">this</span>.<span class="property">$refs</span>.<span class="property">certificateNum</span>.<span class="title function_">resetField</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_">cancelDialog</span> (formName) &#123;</span></span><br><span class="line"><span class="language-javascript">          <span class="variable language_">this</span>.<span class="property">$refs</span>[formName].<span class="title function_">resetFields</span>()</span></span><br><span class="line"><span class="language-javascript">          <span class="variable language_">this</span>.<span class="property">dialogVisible</span> = <span class="literal">false</span></span></span><br><span class="line"><span class="language-javascript">          <span class="variable language_">this</span>.$emit(<span class="string">&#x27;cancel&#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_">saveDialog</span> (formName) &#123;</span></span><br><span class="line"><span class="language-javascript">          <span class="variable language_">this</span>.<span class="property">$refs</span>[formName].<span class="title function_">validate</span>(<span class="function"><span class="params">valid</span> =&gt;</span> &#123;</span></span><br><span class="line"><span class="language-javascript">              <span class="keyword">if</span> (valid) &#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;校验通过&#x27;</span>)</span></span><br><span class="line"><span class="language-javascript">              &#125; <span class="keyword">else</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;校验失败&#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">  &#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>]]></content>
    
    
    <summary type="html">20180327_字段B的校验规则根据字段A的值发生改变实现方案</summary>
    
    
    
    
  </entry>
  
  <entry>
    <title>20180327_elementui用resetFields()无法清空表格原因</title>
    <link href="https://www.zhuyangxing.cn/2018/03/27/20180327_elementui%E7%94%A8resetFields()%E6%97%A0%E6%B3%95%E6%B8%85%E7%A9%BA%E8%A1%A8%E6%A0%BC%E5%8E%9F%E5%9B%A0/"/>
    <id>https://www.zhuyangxing.cn/2018/03/27/20180327_elementui%E7%94%A8resetFields()%E6%97%A0%E6%B3%95%E6%B8%85%E7%A9%BA%E8%A1%A8%E6%A0%BC%E5%8E%9F%E5%9B%A0/</id>
    <published>2018-03-27T15:44:20.000Z</published>
    <updated>2026-06-20T07:58:44.787Z</updated>
    
    <content type="html"><![CDATA[<h1 id="20180327-elementui用resetFields-无法清空表格原因"><a href="#20180327-elementui用resetFields-无法清空表格原因" class="headerlink" title="20180327_elementui用resetFields()无法清空表格原因"></a>20180327_elementui用resetFields()无法清空表格原因</h1><p><code>el-form-item</code>必须要有<code>prop</code>才能有用<br>详见<a href="http://element.eleme.io/#/zh-CN/component/form#form-item-attributes">官方文档</a></p>]]></content>
    
    
    <summary type="html">20180327_elementui用resetFields()无法清空表格原因</summary>
    
    
    
    
  </entry>
  
  <entry>
    <title>20180327_如何在文本框blur时,写业务逻辑</title>
    <link href="https://www.zhuyangxing.cn/2018/03/27/20180327_%E5%A6%82%E4%BD%95%E5%9C%A8%E6%96%87%E6%9C%AC%E6%A1%86blur%E6%97%B6,%E5%86%99%E4%B8%9A%E5%8A%A1%E9%80%BB%E8%BE%91/"/>
    <id>https://www.zhuyangxing.cn/2018/03/27/20180327_%E5%A6%82%E4%BD%95%E5%9C%A8%E6%96%87%E6%9C%AC%E6%A1%86blur%E6%97%B6,%E5%86%99%E4%B8%9A%E5%8A%A1%E9%80%BB%E8%BE%91/</id>
    <published>2018-03-27T15:44:20.000Z</published>
    <updated>2026-06-20T07:58:44.787Z</updated>
    
    <content type="html"><![CDATA[<h1 id="20180327-如何在文本框blur时-写业务逻辑"><a href="#20180327-如何在文本框blur时-写业务逻辑" class="headerlink" title="20180327_如何在文本框blur时,写业务逻辑"></a>20180327_如何在文本框blur时,写业务逻辑</h1><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">el-input</span> @<span class="attr">blur</span>=<span class="string">&quot;idBlurHander&quot;</span>&gt;</span><span class="tag">&lt;/<span class="name">el-input</span>&gt;</span></span><br></pre></td></tr></table></figure>]]></content>
    
    
    <summary type="html">20180327_如何在文本框blur时,写业务逻辑</summary>
    
    
    
    
  </entry>
  
  <entry>
    <title>20180327_对象数组根据某属性过滤对象</title>
    <link href="https://www.zhuyangxing.cn/2018/03/27/20180327_%E5%AF%B9%E8%B1%A1%E6%95%B0%E7%BB%84%E6%A0%B9%E6%8D%AE%E6%9F%90%E5%B1%9E%E6%80%A7%E8%BF%87%E6%BB%A4%E5%AF%B9%E8%B1%A1/"/>
    <id>https://www.zhuyangxing.cn/2018/03/27/20180327_%E5%AF%B9%E8%B1%A1%E6%95%B0%E7%BB%84%E6%A0%B9%E6%8D%AE%E6%9F%90%E5%B1%9E%E6%80%A7%E8%BF%87%E6%BB%A4%E5%AF%B9%E8%B1%A1/</id>
    <published>2018-03-27T15:44:19.000Z</published>
    <updated>2026-06-20T07:58:44.787Z</updated>
    
    <content type="html"><![CDATA[<h1 id="20180327-对象数组根据某属性过滤对象"><a href="#20180327-对象数组根据某属性过滤对象" class="headerlink" title="20180327_对象数组根据某属性过滤对象"></a>20180327_对象数组根据某属性过滤对象</h1><p><strong>对象数组根据某属性过滤对象</strong></p><p>自己写了个包放npm了 在<a href="https://www.npmjs.com/package/remove-duplicate-object-by-attr">这里</a></p><p><strong>对象数组根据某个属性的值返回该对象，或者返回该对象另一个属性的某个值</strong></p><p>自己写了个包放npm了 在<a href="https://www.npmjs.com/package/get-attr-by-another-attr">这里</a></p><p><strong>对象数组根据某属性进行排序显示</strong></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></pre></td><td class="code"><pre><span class="line"><span class="keyword">var</span> infoObj = [</span><br><span class="line">  &#123;</span><br><span class="line">    <span class="attr">name</span>: <span class="string">&quot;张三&quot;</span>,</span><br><span class="line">    <span class="attr">sex</span>: <span class="string">&#x27;female&#x27;</span>,</span><br><span class="line">    <span class="attr">age</span>: <span class="number">30</span>,</span><br><span class="line">  &#125;,</span><br><span class="line">  &#123;</span><br><span class="line">    <span class="attr">name</span>: <span class="string">&quot;李四&quot;</span>,</span><br><span class="line">    <span class="attr">sex</span>: <span class="string">&#x27;male&#x27;</span>,</span><br><span class="line">    <span class="attr">age</span>: <span class="number">20</span>,</span><br><span class="line">  &#125;,</span><br><span class="line">  &#123;</span><br><span class="line">    <span class="attr">name</span>: <span class="string">&quot;王五&quot;</span>,</span><br><span class="line">    <span class="attr">sex</span>: <span class="string">&#x27;female&#x27;</span>,</span><br><span class="line">    <span class="attr">age</span>: <span class="number">40</span>,</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_">compare</span>(<span class="params">propertyName</span>) &#123;</span><br><span class="line">  <span class="keyword">return</span> <span class="keyword">function</span> (<span class="params">object1, object2</span>) &#123;</span><br><span class="line">    <span class="keyword">var</span> value1 = object1[propertyName];</span><br><span class="line">    <span class="keyword">var</span> value2 = object2[propertyName];</span><br><span class="line">    <span class="keyword">return</span> value1 - value2</span><br><span class="line">  &#125;</span><br><span class="line">&#125;</span><br><span class="line">infoObj.<span class="title function_">sort</span>(<span class="title function_">compare</span>(<span class="string">&quot;age&quot;</span>))</span><br></pre></td></tr></table></figure>]]></content>
    
    
    <summary type="html">20180327_对象数组根据某属性过滤对象</summary>
    
    
    
    
  </entry>
  
  <entry>
    <title>20180327_点击tab页切换数据，不同tab页出现数据混乱问题</title>
    <link href="https://www.zhuyangxing.cn/2018/03/27/20180327_%E7%82%B9%E5%87%BBtab%E9%A1%B5%E5%88%87%E6%8D%A2%E6%95%B0%E6%8D%AE%EF%BC%8C%E4%B8%8D%E5%90%8Ctab%E9%A1%B5%E5%87%BA%E7%8E%B0%E6%95%B0%E6%8D%AE%E6%B7%B7%E4%B9%B1%E9%97%AE%E9%A2%98/"/>
    <id>https://www.zhuyangxing.cn/2018/03/27/20180327_%E7%82%B9%E5%87%BBtab%E9%A1%B5%E5%88%87%E6%8D%A2%E6%95%B0%E6%8D%AE%EF%BC%8C%E4%B8%8D%E5%90%8Ctab%E9%A1%B5%E5%87%BA%E7%8E%B0%E6%95%B0%E6%8D%AE%E6%B7%B7%E4%B9%B1%E9%97%AE%E9%A2%98/</id>
    <published>2018-03-27T15:44:18.000Z</published>
    <updated>2026-06-20T07:58:44.787Z</updated>
    
    <content type="html"><![CDATA[<h1 id="20180327-点击tab页切换数据，不同tab页出现数据混乱问题"><a href="#20180327-点击tab页切换数据，不同tab页出现数据混乱问题" class="headerlink" title="20180327_点击tab页切换数据，不同tab页出现数据混乱问题"></a>20180327_点击tab页切换数据，不同tab页出现数据混乱问题</h1><p><strong>前提条件：</strong><br>一个页面有3个tab,点击不同tab分别加载不同数据，每次点击都会从服务端重新加载一次数据  </p><p><strong>问题：</strong><br>tab分别为A,B,C 点击A时发送请求,在请求返回结果时判断当前选中的是哪个tab<br>根据当前tab把返回值填充到哪个tab的data数据里<br>聪明如你，可能已经发现这种设计的问题了<br>如果快速切换先点A立马再点B可能返回A的数据但填充的是B的表格，就很容易造成数据错乱  </p><p><strong>解决方案：</strong>    </p><ol><li>ajax请求时把a,b,c作为冗余项传给服务端，服务端可以不作处理，返回结果根据该冗余项给A,B,C的某个tab的data进行赋值，确保tab与数据不混乱  </li><li>判断ajax请求结果是否可缓存，如果可缓存则只需要请求3次缓存数据即可大大减少请求数据</li></ol>]]></content>
    
    
    <summary type="html">20180327_点击tab页切换数据，不同tab页出现数据混乱问题</summary>
    
    
    
    
  </entry>
  
  <entry>
    <title>20180327_element-ui单独调用某一个字段的校验功能</title>
    <link href="https://www.zhuyangxing.cn/2018/03/27/20180327_element-ui%E5%8D%95%E7%8B%AC%E8%B0%83%E7%94%A8%E6%9F%90%E4%B8%80%E4%B8%AA%E5%AD%97%E6%AE%B5%E7%9A%84%E6%A0%A1%E9%AA%8C%E5%8A%9F%E8%83%BD/"/>
    <id>https://www.zhuyangxing.cn/2018/03/27/20180327_element-ui%E5%8D%95%E7%8B%AC%E8%B0%83%E7%94%A8%E6%9F%90%E4%B8%80%E4%B8%AA%E5%AD%97%E6%AE%B5%E7%9A%84%E6%A0%A1%E9%AA%8C%E5%8A%9F%E8%83%BD/</id>
    <published>2018-03-27T15:44:11.000Z</published>
    <updated>2026-06-20T07:58:44.787Z</updated>
    
    <content type="html"><![CDATA[<h1 id="20180327-element-ui单独调用某一个字段的校验功能"><a href="#20180327-element-ui单独调用某一个字段的校验功能" class="headerlink" title="20180327_element-ui单独调用某一个字段的校验功能"></a>20180327_element-ui单独调用某一个字段的校验功能</h1><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_">this</span>.<span class="property">$refs</span>[ruleFormName].<span class="title function_">validateField</span>(<span class="string">&#x27;checkPass&#x27;</span>);</span><br></pre></td></tr></table></figure><p> 直接调用表单需要校验的某个prop即可(问了两个同事都不知道有这个方法)，<a href="http://element.eleme.io/#/zh-CN/component/form#zi-ding-yi-xiao-yan-gui-ze">官方示例</a></p>]]></content>
    
    
    <summary type="html">20180327_element-ui单独调用某一个字段的校验功能</summary>
    
    
    
    
  </entry>
  
  <entry>
    <title>20180327_el-checkbox选中之后保存key显示value</title>
    <link href="https://www.zhuyangxing.cn/2018/03/27/20180327_el-checkbox%E9%80%89%E4%B8%AD%E4%B9%8B%E5%90%8E%E4%BF%9D%E5%AD%98key%E6%98%BE%E7%A4%BAvalue/"/>
    <id>https://www.zhuyangxing.cn/2018/03/27/20180327_el-checkbox%E9%80%89%E4%B8%AD%E4%B9%8B%E5%90%8E%E4%BF%9D%E5%AD%98key%E6%98%BE%E7%A4%BAvalue/</id>
    <published>2018-03-27T15:44:01.000Z</published>
    <updated>2026-06-20T07:58:44.786Z</updated>
    
    <content type="html"><![CDATA[<h1 id="20180327-el-checkbox选中之后保存key显示value"><a href="#20180327-el-checkbox选中之后保存key显示value" class="headerlink" title="20180327_el-checkbox选中之后保存key显示value"></a>20180327_el-checkbox选中之后保存key显示value</h1><p>官方demo里全部只有一个label<br>  <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">el-checkbox</span> <span class="attr">label</span>=<span class="string">&quot;选中值&quot;</span>&gt;</span>显示值<span class="tag">&lt;/<span class="name">el-checkbox</span>&gt;</span></span><br></pre></td></tr></table></figure></p>]]></content>
    
    
    <summary type="html">20180327_el-checkbox选中之后保存key显示value</summary>
    
    
    
    
  </entry>
  
  <entry>
    <title>20180326_如何让一个数组的内容扩充为原来的10倍</title>
    <link href="https://www.zhuyangxing.cn/2018/03/26/20180326_%E5%A6%82%E4%BD%95%E8%AE%A9%E4%B8%80%E4%B8%AA%E6%95%B0%E7%BB%84%E7%9A%84%E5%86%85%E5%AE%B9%E6%89%A9%E5%85%85%E4%B8%BA%E5%8E%9F%E6%9D%A5%E7%9A%8410%E5%80%8D/"/>
    <id>https://www.zhuyangxing.cn/2018/03/26/20180326_%E5%A6%82%E4%BD%95%E8%AE%A9%E4%B8%80%E4%B8%AA%E6%95%B0%E7%BB%84%E7%9A%84%E5%86%85%E5%AE%B9%E6%89%A9%E5%85%85%E4%B8%BA%E5%8E%9F%E6%9D%A5%E7%9A%8410%E5%80%8D/</id>
    <published>2018-03-26T15:44:18.000Z</published>
    <updated>2026-06-20T07:58:44.786Z</updated>
    
    <content type="html"><![CDATA[<h1 id="20180326-如何让一个数组的内容扩充为原来的10倍"><a href="#20180326-如何让一个数组的内容扩充为原来的10倍" class="headerlink" title="20180326_如何让一个数组的内容扩充为原来的10倍"></a>20180326_如何让一个数组的内容扩充为原来的10倍</h1><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">let</span> a =[<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> b =<span class="title class_">JSON</span>.<span class="title function_">parse</span>(<span class="title class_">JSON</span>.<span class="title function_">stringify</span>(a))</span><br><span class="line"><span class="comment">// 原来数组已存在,只需要重复9次即可</span></span><br><span class="line"><span class="keyword">for</span>(<span class="keyword">let</span> i=<span class="number">0</span>;i&lt;<span class="number">9</span>;i++)&#123;</span><br><span class="line">  a.<span class="title function_">push</span>(...b)</span><br><span class="line">&#125;</span><br><span class="line"><span class="variable language_">console</span>.<span class="title function_">log</span>(a.<span class="property">length</span>,a)</span><br></pre></td></tr></table></figure>]]></content>
    
    
    <summary type="html">20180326_如何让一个数组的内容扩充为原来的10倍</summary>
    
    
    
    
  </entry>
  
  <entry>
    <title>论`&lt;el-upload&gt;`的正确使用方法</title>
    <link href="https://www.zhuyangxing.cn/2018/03/13/20180313_%E8%AE%BAel-upload%E7%9A%84%E6%AD%A3%E7%A1%AE%E4%BD%BF%E7%94%A8%E6%96%B9%E6%B3%95/"/>
    <id>https://www.zhuyangxing.cn/2018/03/13/20180313_%E8%AE%BAel-upload%E7%9A%84%E6%AD%A3%E7%A1%AE%E4%BD%BF%E7%94%A8%E6%96%B9%E6%B3%95/</id>
    <published>2018-03-13T15:44:18.000Z</published>
    <updated>2026-06-20T07:58:44.786Z</updated>
    
    <content type="html"><![CDATA[<h1 id="论的正确使用方法"><a href="#论的正确使用方法" class="headerlink" title="论&lt;el-upload&gt;的正确使用方法"></a>论<code>&lt;el-upload&gt;</code>的正确使用方法</h1><p>表单里有上传控件<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><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></pre></td><td class="code"><pre><span class="line"><span class="tag">&lt;<span class="name">el-form</span> <span class="attr">:model</span>=<span class="string">&quot;ruleForm&quot;</span></span></span><br><span class="line"><span class="tag">         <span class="attr">ref</span>=<span class="string">&quot;ruleForm&quot;</span>&gt;</span></span><br><span class="line">    <span class="tag">&lt;<span class="name">el-form-item</span> <span class="attr">label</span>=<span class="string">&quot;上传文件&quot;</span>&gt;</span></span><br><span class="line">        <span class="tag">&lt;<span class="name">el-upload</span> <span class="attr">class</span>=<span class="string">&quot;upload-demo&quot;</span></span></span><br><span class="line"><span class="tag">                   <span class="attr">:on-success</span>=<span class="string">&quot;successUpload&quot;</span></span></span><br><span class="line"><span class="tag">                   <span class="attr">:action</span>=<span class="string">&quot;mixinUploadUrl&quot;</span></span></span><br><span class="line"><span class="tag">                   <span class="attr">:on-remove</span>=<span class="string">&quot;handleRemove&quot;</span></span></span><br><span class="line"><span class="tag">                   <span class="attr">:file-list</span>=<span class="string">&quot;fileList&quot;</span>&gt;</span></span><br><span class="line">            <span class="tag">&lt;<span class="name">el-button</span> <span class="attr">size</span>=<span class="string">&quot;small&quot;</span></span></span><br><span class="line"><span class="tag">                       <span class="attr">type</span>=<span class="string">&quot;primary&quot;</span>&gt;</span>点击上传<span class="tag">&lt;/<span class="name">el-button</span>&gt;</span></span><br><span class="line">        <span class="tag">&lt;/<span class="name">el-upload</span>&gt;</span></span><br><span class="line">    <span class="tag">&lt;/<span class="name">el-form-item</span>&gt;</span></span><br><span class="line">    <span class="tag">&lt;<span class="name">el-form-item</span>&gt;</span></span><br><span class="line">        <span class="tag">&lt;<span class="name">el-button</span> <span class="attr">type</span>=<span class="string">&quot;primary&quot;</span></span></span><br><span class="line"><span class="tag">                   @<span class="attr">click</span>=<span class="string">&quot;submitForm(&#x27;ruleForm&#x27;)&quot;</span>&gt;</span>导出<span class="tag">&lt;/<span class="name">el-button</span>&gt;</span></span><br><span class="line">    <span class="tag">&lt;/<span class="name">el-form-item</span>&gt;</span></span><br><span class="line"><span class="tag">&lt;/<span class="name">el-form</span>&gt;</span></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">export</span> <span class="keyword">default</span> &#123;</span></span><br><span class="line"><span class="language-javascript">  <span class="title function_">data</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">fileList</span>: [],</span></span><br><span class="line"><span class="language-javascript">          <span class="attr">ruleForm</span>: &#123;</span></span><br><span class="line"><span class="language-javascript">              <span class="attr">fileList</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 class="attr">methods</span>: &#123;</span></span><br><span class="line"><span class="language-javascript">    <span class="title function_">handleRemove</span> (file, fileList) &#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="keyword">let</span> tmp = <span class="variable language_">this</span>.<span class="property">ruleForm</span>.<span class="property">fileList</span></span></span><br><span class="line"><span class="language-javascript">        <span class="keyword">let</span> url = file.<span class="property">response</span>.<span class="property">result</span>[<span class="number">0</span>].<span class="property">url</span></span></span><br><span class="line"><span class="language-javascript">        <span class="keyword">if</span> (tmp.<span class="title function_">includes</span>(url)) &#123;</span></span><br><span class="line"><span class="language-javascript">            tmp.<span class="title function_">splice</span>(tmp.<span class="title function_">findIndex</span>(<span class="function"><span class="params">item</span> =&gt;</span> &#123;</span></span><br><span class="line"><span class="language-javascript">                <span class="keyword">return</span> item === url</span></span><br><span class="line"><span class="language-javascript">            &#125;), <span class="number">1</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_">successUpload</span> (response, file, fileList, $event) &#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="variable language_">this</span>.<span class="property">ruleForm</span>.<span class="property">fileList</span>.<span class="title function_">push</span>(file.<span class="property">response</span>.<span class="property">result</span>[<span class="number">0</span>].<span class="property">url</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_">submitForm</span> (formName) &#123;</span></span><br><span class="line"><span class="language-javascript">        <span class="keyword">let</span> fileList = <span class="variable language_">this</span>.<span class="property">ruleForm</span>.<span class="property">fileList</span></span></span><br><span class="line"><span class="language-javascript">        <span class="comment">// 使用fileList与服务端交互 该字段只包含服务端数据</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></pre></td></tr></table></figure><p>其实<code>successUpload</code>和<code>handleRemove</code>没有必要使用，只需要在提交的时候获取到已经上传到服务端的文件相关信息(如服务端保存路径，唯一标识等)即可  </p><p>观察<code>fileList</code>在文件上传前后没有任何变化，说明该字段不是动态的<br>推测应该有个字段保存着服务端返回数据列表仔细查看后发现的确如此<br>其实<code>el-upload</code>组件有个属性<code>uploadFiles</code>是会根据上传文件结果进行动态处理的，上传成功增加一个移除掉一个，提交表单时只需要处理该字段即可</p><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><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="tag">&lt;<span class="name">el-form</span> <span class="attr">:model</span>=<span class="string">&quot;ruleForm&quot;</span></span></span><br><span class="line"><span class="tag">         <span class="attr">ref</span>=<span class="string">&quot;ruleForm&quot;</span>&gt;</span></span><br><span class="line">    <span class="tag">&lt;<span class="name">el-form-item</span> <span class="attr">label</span>=<span class="string">&quot;上传文件&quot;</span>&gt;</span></span><br><span class="line">        <span class="tag">&lt;<span class="name">el-upload</span> <span class="attr">ref</span>=<span class="string">&quot;uploada&quot;</span></span></span><br><span class="line"><span class="tag">                   <span class="attr">:action</span>=<span class="string">&quot;mixinUploadUrl&quot;</span></span></span><br><span class="line"><span class="tag">                   <span class="attr">:file-list</span>=<span class="string">&quot;fileList&quot;</span>&gt;</span></span><br><span class="line">            <span class="tag">&lt;<span class="name">el-button</span> <span class="attr">size</span>=<span class="string">&quot;small&quot;</span></span></span><br><span class="line"><span class="tag">                       <span class="attr">type</span>=<span class="string">&quot;primary&quot;</span>&gt;</span>点击上传<span class="tag">&lt;/<span class="name">el-button</span>&gt;</span></span><br><span class="line">        <span class="tag">&lt;/<span class="name">el-upload</span>&gt;</span></span><br><span class="line">    <span class="tag">&lt;/<span class="name">el-form-item</span>&gt;</span></span><br><span class="line">    <span class="tag">&lt;<span class="name">el-form-item</span>&gt;</span></span><br><span class="line">        <span class="tag">&lt;<span class="name">el-button</span> <span class="attr">type</span>=<span class="string">&quot;primary&quot;</span></span></span><br><span class="line"><span class="tag">                   @<span class="attr">click</span>=<span class="string">&quot;submitForm(&#x27;ruleForm&#x27;)&quot;</span>&gt;</span>导出<span class="tag">&lt;/<span class="name">el-button</span>&gt;</span></span><br><span class="line">    <span class="tag">&lt;/<span class="name">el-form-item</span>&gt;</span></span><br><span class="line"><span class="tag">&lt;/<span class="name">el-form</span>&gt;</span></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">export</span> <span class="keyword">default</span> &#123;</span></span><br><span class="line"><span class="language-javascript">  <span class="title function_">data</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">fileList</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="attr">methods</span>: &#123;</span></span><br><span class="line"><span class="language-javascript">    <span class="title function_">submitForm</span> (formName) &#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="variable language_">this</span>.<span class="property">$refs</span>.<span class="property">uploada</span>.<span class="property">uploadFiles</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></pre></td></tr></table></figure>]]></content>
    
    
    <summary type="html">论`&lt;el-upload&gt;`的正确使用方法</summary>
    
    
    
    
  </entry>
  
  <entry>
    <title>如何理解redux的middleware中间件</title>
    <link href="https://www.zhuyangxing.cn/2018/03/09/20180309_%E5%A6%82%E4%BD%95%E7%90%86%E8%A7%A3redux%E7%9A%84middleware%E4%B8%AD%E9%97%B4%E4%BB%B6/"/>
    <id>https://www.zhuyangxing.cn/2018/03/09/20180309_%E5%A6%82%E4%BD%95%E7%90%86%E8%A7%A3redux%E7%9A%84middleware%E4%B8%AD%E9%97%B4%E4%BB%B6/</id>
    <published>2018-03-09T15:44:18.000Z</published>
    <updated>2026-06-20T07:58:44.786Z</updated>
    
    <content type="html"><![CDATA[<h1 id="如何理解redux的middleware中间件"><a href="#如何理解redux的middleware中间件" class="headerlink" title="如何理解redux的middleware中间件"></a>如何理解redux的middleware中间件</h1><p>如果需要在dispatch前后分别打印出action,和action后的state，我们需要怎么做<br>实现方案如下：<br>首先我们想到在前后分别添加console,每次调用都在调用前后加console  </p><ol><li><p>在每次dispatch前后加console  </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></pre></td><td class="code"><pre><span class="line"><span class="variable language_">console</span>.<span class="title function_">log</span>(<span class="string">&quot;start &quot;</span>,action)</span><br><span class="line">store.<span class="title function_">dispatch</span>(action)</span><br><span class="line"><span class="variable language_">console</span>.<span class="title function_">log</span>(<span class="string">&quot;end &quot;</span>,store.<span class="title function_">getState</span>())</span><br></pre></td></tr></table></figure><p>  但是这样每一次调用都要多写两行代码,总的来说会出现很多console，最容易想到的就是把这段代码封装到一个函数里，每次需要的时候调用函数即可  </p></li><li><p>定义成方法，在需要dispatch时调用方法</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></pre></td><td class="code"><pre><span class="line"><span class="keyword">function</span> <span class="title function_">dispatchAndLog</span>(<span class="params">store,action</span>)&#123;</span><br><span class="line">  <span class="variable language_">console</span>.<span class="title function_">log</span>(<span class="string">&quot;start &quot;</span>,action)</span><br><span class="line">  store.<span class="title function_">dispatch</span>(action)</span><br><span class="line">  <span class="variable language_">console</span>.<span class="title function_">log</span>(<span class="string">&quot;end &quot;</span>,store.<span class="title function_">getState</span>())</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><p>  调用dispatch的地方改为调用如下代码</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">dispatchAndLog(store,action)</span><br></pre></td></tr></table></figure><p>  这样来说貌似可以了,但是每次都调用一个非api方法，新人不易理解，还是应该调用原有api,然后又有了修改默认dispatch的方案  </p></li><li><p>修改默认的dispatch方法<br>  在以后的调用中直接调用<code>store.dispatch</code>即可</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">const</span> next = store.<span class="property">dispatch</span></span><br><span class="line">store.<span class="property">dispatch</span> = fuction <span class="title function_">dispatchAndLog</span>(<span class="params">store,action</span>)&#123;</span><br><span class="line">  <span class="variable language_">console</span>.<span class="title function_">log</span>(<span class="string">&quot;start &quot;</span>,action)</span><br><span class="line">  <span class="keyword">let</span> result = <span class="title function_">next</span>(action)</span><br><span class="line">  <span class="variable language_">console</span>.<span class="title function_">log</span>(<span class="string">&quot;end &quot;</span>,store.<span class="title function_">getState</span>())</span><br><span class="line">  <span class="keyword">return</span> result</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><p>  这样看起来蛮好的，但是如果我现在不仅需要这一个打印日志的功能还需要一个能提供报错信息的功能<br>  我们可能想到如下方案  </p></li><li><p>添加出错报告功能</p></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">function</span> <span class="title function_">patchStoreToAddLog</span>(<span class="params">store,action</span>)&#123;</span><br><span class="line">  <span class="keyword">const</span> next = store.<span class="property">dispatch</span></span><br><span class="line">  store.<span class="property">dispatch</span> = <span class="keyword">function</span> <span class="title function_">dispatchAndLog</span>(<span class="params">store,action</span>)&#123;</span><br><span class="line">    <span class="variable language_">console</span>.<span class="title function_">log</span>(<span class="string">&quot;start &quot;</span>,action)</span><br><span class="line">    <span class="keyword">let</span> result = <span class="title function_">next</span>(action)</span><br><span class="line">    <span class="variable language_">console</span>.<span class="title function_">log</span>(<span class="string">&quot;end &quot;</span>,store.<span class="title function_">getState</span>())</span><br><span class="line">    <span class="keyword">return</span> result</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_">patchStoreToAddCrashReporting</span>(<span class="params">store,action</span>)&#123;</span><br><span class="line">  <span class="keyword">const</span> next = store.<span class="property">dispatch</span></span><br><span class="line">  store.<span class="property">dispatch</span> = <span class="keyword">function</span> <span class="title function_">dispatchAndCrashReporting</span>(<span class="params">store,action</span>)&#123;</span><br><span class="line">    <span class="keyword">try</span> &#123;</span><br><span class="line">      <span class="keyword">return</span> <span class="title function_">next</span>(action)</span><br><span class="line">    &#125; <span class="keyword">catch</span> (err) &#123;</span><br><span class="line">      <span class="variable language_">console</span>.<span class="title function_">error</span>(<span class="string">&#x27;Caught an exception!&#x27;</span>, err)</span><br><span class="line">      <span class="comment">// 把错误信息发送到其他监控系统</span></span><br><span class="line">       <span class="keyword">throw</span> err</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><p>  这样即要日志，又要报错的时候依次调用两个函数即可</p>  <figure class="highlight js"><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="title function_">patchStoreToAddLog</span>(store,action)</span><br><span class="line"><span class="title function_">patchStoreToAddCrashReporting</span>(store,action)</span><br></pre></td></tr></table></figure><p>  这样还是原来问题每次调用都要写两个，麻烦<br>  更好方案如下：   </p><ol start="5"><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></pre></td><td class="code"><pre><span class="line"><span class="keyword">function</span> <span class="title function_">logger</span>(<span class="params">store</span>) &#123;</span><br><span class="line">  <span class="keyword">const</span> next = store.<span class="property">dispatch</span></span><br><span class="line">  <span class="comment">// Previously:</span></span><br><span class="line">  <span class="comment">// store.dispatch = function dispatchAndLog(action) &#123;</span></span><br><span class="line">  <span class="keyword">return</span> <span class="keyword">function</span> <span class="title function_">dispatchAndLog</span>(<span class="params">action</span>) &#123;</span><br><span class="line">    <span class="variable language_">console</span>.<span class="title function_">log</span>(<span class="string">&#x27;dispatching&#x27;</span>, action)</span><br><span class="line">    <span class="keyword">let</span> result = <span class="title function_">next</span>(action)</span><br><span class="line">    <span class="variable language_">console</span>.<span class="title function_">log</span>(<span class="string">&#x27;next state&#x27;</span>, store.<span class="title function_">getState</span>())</span><br><span class="line">    <span class="keyword">return</span> result;</span><br><span class="line">  &#125;</span><br><span class="line">&#125;</span><br><span class="line"><span class="keyword">function</span> <span class="title function_">crashReporting</span>(<span class="params">store</span>)&#123;</span><br><span class="line">  <span class="keyword">const</span> next = store.<span class="property">dispatch</span></span><br><span class="line">  <span class="keyword">return</span> <span class="keyword">function</span> <span class="title function_">dispatchAndCrashReporting</span>(<span class="params">action</span>)&#123;</span><br><span class="line">    <span class="keyword">try</span> &#123;</span><br><span class="line">      <span class="keyword">return</span> <span class="title function_">next</span>(action)</span><br><span class="line">    &#125; <span class="keyword">catch</span> (err) &#123;</span><br><span class="line">      <span class="variable language_">console</span>.<span class="title function_">error</span>(<span class="string">&#x27;Caught an exception!&#x27;</span>, err)</span><br><span class="line">      <span class="comment">// 把错误信息发送到其他监控系统</span></span><br><span class="line">       <span class="keyword">throw</span> err</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><p>  调用方法如下<br>  <figure class="highlight js"><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="title function_">logger</span>(store)(action)</span><br><span class="line"><span class="title function_">crashReporting</span>(store)(action)</span><br></pre></td></tr></table></figure><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><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"><span class="keyword">function</span> <span class="title function_">applyMiddlewareByMonkeypatching</span>(<span class="params">store, middlewares</span>)&#123;</span><br><span class="line">   middlewares = middlewares.<span class="title function_">slice</span>()</span><br><span class="line">   middlewares.<span class="title function_">reverse</span>() <span class="comment">//确保卸载后面的插件包在里面，后面执行</span></span><br><span class="line">   middlewares.<span class="title function_">forEach</span>(<span class="function"><span class="params">middleware</span>=&gt;</span></span><br><span class="line">    <span class="comment">//每一个middleware都可以直接调用前一个 middleware 包装过的 store.dispatch</span></span><br><span class="line">     store.<span class="property">dispatch</span> = <span class="title function_">middleware</span>(store)</span><br><span class="line">   )</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><br>  调用如下<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="title function_">applyMiddlewareByMonkeypatching</span>(store,[logger,crashReporting])</span><br></pre></td></tr></table></figure><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><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="comment">// according to https://redux.js.org/api-reference/store#dispatch</span></span><br><span class="line"><span class="comment">// store.dispatch(action) 返回新的state 即新的store</span></span><br><span class="line">store.<span class="property">dispatch</span> = <span class="title function_">logger</span>(<span class="title function_">crashReporting</span>(store))</span><br><span class="line"><span class="comment">//也就等同于如下代码</span></span><br><span class="line">store.<span class="property">dispatch</span> = <span class="keyword">function</span> <span class="title function_">dispatchAndLog</span>(<span class="params">action</span>) &#123;</span><br><span class="line">  <span class="variable language_">console</span>.<span class="title function_">log</span>(<span class="string">&#x27;dispatching&#x27;</span>, action)</span><br><span class="line">  <span class="keyword">let</span> result = <span class="keyword">function</span> <span class="title function_">dispatchAndCrashReporting</span>(<span class="params">action</span>)&#123;</span><br><span class="line">    <span class="keyword">try</span> &#123;</span><br><span class="line">      <span class="keyword">return</span> <span class="title function_">next</span>(action)</span><br><span class="line">    &#125; <span class="keyword">catch</span> (err) &#123;</span><br><span class="line">      <span class="variable language_">console</span>.<span class="title function_">error</span>(<span class="string">&#x27;Caught an exception!&#x27;</span>, err)</span><br><span class="line">      <span class="comment">// 把错误信息发送到其他监控系统</span></span><br><span class="line">       <span class="keyword">throw</span> err</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>(<span class="string">&#x27;next state&#x27;</span>, store.<span class="title function_">getState</span>())</span><br><span class="line">  <span class="keyword">return</span> result;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><br>  这种方法已经很好了，但是它依旧是修改原来的store.dispatch方法,我们可以想办法不修改默认的<code>store.dispatch</code>方法 </p><ol start="6"><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><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">function</span> <span class="title function_">logger</span>(<span class="params">store</span>) &#123;</span><br><span class="line">  <span class="keyword">return</span> <span class="keyword">function</span> <span class="title function_">wrapperDispatchAndLog</span>(<span class="params">next</span>)&#123;</span><br><span class="line">    <span class="keyword">return</span> <span class="keyword">function</span> <span class="title function_">dispatchAndLog</span>(<span class="params">action</span>) &#123;</span><br><span class="line">      <span class="variable language_">console</span>.<span class="title function_">log</span>(<span class="string">&#x27;dispatching&#x27;</span>, action)</span><br><span class="line">      <span class="keyword">let</span> result = <span class="title function_">next</span>(action)</span><br><span class="line">      <span class="variable language_">console</span>.<span class="title function_">log</span>(<span class="string">&#x27;next state&#x27;</span>, store.<span class="title function_">getState</span>())</span><br><span class="line">      <span class="keyword">return</span> result;</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="comment">// es6写法</span></span><br><span class="line"><span class="keyword">const</span> <span class="title function_">logger</span> = store =&gt; <span class="function"><span class="params">next</span> =&gt;</span> <span class="function"><span class="params">action</span> =&gt;</span> &#123;</span><br><span class="line">      <span class="variable language_">console</span>.<span class="title function_">log</span>(<span class="string">&#x27;dispatching&#x27;</span>, action)</span><br><span class="line">      <span class="keyword">let</span> result = <span class="title function_">next</span>(action)</span><br><span class="line">      <span class="variable language_">console</span>.<span class="title function_">log</span>(<span class="string">&#x27;next state&#x27;</span>, store.<span class="title function_">getState</span>())</span><br><span class="line">      <span class="keyword">return</span> result;</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="comment">// 修改遍历函数</span></span><br><span class="line"><span class="keyword">function</span> <span class="title function_">applyMiddleware</span> (<span class="params">store, middlewares</span>)&#123;</span><br><span class="line">  middlewares = middlewares.<span class="title function_">splice</span>()</span><br><span class="line">  middlewares.<span class="title function_">reverse</span>()</span><br><span class="line">  <span class="keyword">let</span> dispatch = store.<span class="property">dispatch</span></span><br><span class="line">  middlewares.<span class="title function_">forEach</span>(<span class="function"><span class="params">middleware</span>=&gt;</span>&#123;</span><br><span class="line">    dispatch = <span class="title function_">middleware</span>(store)(dispatch)</span><br><span class="line">  &#125;)</span><br><span class="line">  <span class="keyword">return</span> <span class="title class_">Object</span>.<span class="title function_">assign</span>(&#123;&#125;,store,dispatch)</span><br><span class="line">&#125;</span><br><span class="line"><span class="comment">// 调用方法 </span></span><br><span class="line"><span class="comment">// 返回经过middleware包装过的含有新dispatch的store</span></span><br><span class="line"><span class="title function_">applyMiddleware</span>(store,[logger,crashReporting])</span><br></pre></td></tr></table></figure>]]></content>
    
    
    <summary type="html">如何理解redux的middleware中间件</summary>
    
    
    
    
  </entry>
  
  <entry>
    <title>vue-router前端权限控制问题</title>
    <link href="https://www.zhuyangxing.cn/2018/03/08/20180308_vue-router%E5%89%8D%E7%AB%AF%E6%9D%83%E9%99%90%E6%8E%A7%E5%88%B6%E9%97%AE%E9%A2%98/"/>
    <id>https://www.zhuyangxing.cn/2018/03/08/20180308_vue-router%E5%89%8D%E7%AB%AF%E6%9D%83%E9%99%90%E6%8E%A7%E5%88%B6%E9%97%AE%E9%A2%98/</id>
    <published>2018-03-08T15:44:18.000Z</published>
    <updated>2026-06-20T07:58:44.786Z</updated>
    
    <content type="html"><![CDATA[<h1 id="vue-router前端权限控制问题"><a href="#vue-router前端权限控制问题" class="headerlink" title="vue-router前端权限控制问题"></a>vue-router前端权限控制问题</h1><p>前提纲要：<br>1.用户A和用户B有不同的权限。<br>  页面分左侧菜单部分和右侧内容部分，右侧内容可能有不同路径的不同内容<br>  最简单例子为点击左侧用户管理<br>  右侧显示用户列表<br>  点击某条内容详情<br>  右侧显示某一用户的详细内容<br>2.用户A可以访问路径权限如下：</p><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></pre></td><td class="code"><pre><span class="line">a/list</span><br><span class="line">a/detail/:id</span><br><span class="line">a/list/:id </span><br></pre></td></tr></table></figure><p>用户B可以访问路径权限如下：</p><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></pre></td><td class="code"><pre><span class="line">b/list</span><br><span class="line">b/detail/:id</span><br><span class="line">b/list/:id</span><br></pre></td></tr></table></figure><p>3.正常用户登陆进去可以看到自己的菜单，<br>点击菜单右侧内容部分发生变化，然后在右侧操作,更改页面url，左侧菜单不变，右侧内容页发生变化</p><p>碰到问题如下：<br>用户B登陆进去点击菜单进入<code>b/detail/:id</code>然后保存为书签（即保存该路径）退出<br>然后用户A登陆点击保存的标签页，正常获取左侧菜单权限，左侧菜单正常显示，但是右侧却根据url显示了自己权限外的<code>b/detail/:id</code>的内容(暂不考虑跟服务端交互问题，虽说服务端可以再掉用接口时给出无权限返回，前端再根据返回进行逻辑处理，但即便这样前端页面显示依旧不正常)</p><p>解决方案：<br>在路由进入之前，根据路由的meta属性的某一字段比对所有的可访问权限(这个在登录时已经获取了，可以存在localstorage里)，如果能找到则进去否则跳转到某个固定页，这样就解决了权限问题</p>]]></content>
    
    
    <summary type="html">vue-router前端权限控制问题</summary>
    
    
    
    
  </entry>
  
  <entry>
    <title>对于oop面向对象编程的理解</title>
    <link href="https://www.zhuyangxing.cn/2018/03/06/20180306_%E5%AF%B9%E4%BA%8Eoop%E9%9D%A2%E5%90%91%E5%AF%B9%E8%B1%A1%E7%BC%96%E7%A8%8B%E7%9A%84%E7%90%86%E8%A7%A3/"/>
    <id>https://www.zhuyangxing.cn/2018/03/06/20180306_%E5%AF%B9%E4%BA%8Eoop%E9%9D%A2%E5%90%91%E5%AF%B9%E8%B1%A1%E7%BC%96%E7%A8%8B%E7%9A%84%E7%90%86%E8%A7%A3/</id>
    <published>2018-03-06T15:44:18.000Z</published>
    <updated>2026-06-20T07:58:44.786Z</updated>
    
    <content type="html"><![CDATA[<h1 id="对于oop面向对象编程的理解"><a href="#对于oop面向对象编程的理解" class="headerlink" title="对于oop面向对象编程的理解"></a>对于oop面向对象编程的理解</h1><p>OOP(Object  Oriented Programming)面向对象编程<br>这个东西好几年之前就知道<br>继承，封装，多态全都知道<br>时间久全忘记了，最近群里有朋友讲起就再次重新回顾下 </p><p>目标：重用性，灵活性，扩展性<br>特征：封装性，继承，多态</p><p>封装性：<br>人有以下几个公共特征可以封装在一起,作为一个正常的对象叫人<br>姓名<br>身份证号<br>会说话<br>会写字</p><p>继承性<br>学生是人，老师也是人<br>所以学生对象可以继承自人，教师对象也可以继承自人</p><p>多态性<br>执行的是相同的事情但是获取到的是不同的结果<br>现在有3个人，张三，李四，王五分别获取他们的职业，可能会得到不同的结果如”工人”，”农民”，”老师”等。这就属于多态。当然获取身份证号也不一样 这也算多态</p>]]></content>
    
    
    <summary type="html">对于oop面向对象编程的理解</summary>
    
    
    
    
  </entry>
  
  <entry>
    <title>对于`Promise`部分属性的理解</title>
    <link href="https://www.zhuyangxing.cn/2018/03/05/20180305_%E5%AF%B9%E4%BA%8E%60Promise%60%E9%83%A8%E5%88%86%E5%B1%9E%E6%80%A7%E7%9A%84%E7%90%86%E8%A7%A3/"/>
    <id>https://www.zhuyangxing.cn/2018/03/05/20180305_%E5%AF%B9%E4%BA%8E%60Promise%60%E9%83%A8%E5%88%86%E5%B1%9E%E6%80%A7%E7%9A%84%E7%90%86%E8%A7%A3/</id>
    <published>2018-03-05T15:44:19.000Z</published>
    <updated>2026-06-20T07:58:44.786Z</updated>
    
    <content type="html"><![CDATA[<h1 id="对于Promise部分属性的理解"><a href="#对于Promise部分属性的理解" class="headerlink" title="对于Promise部分属性的理解"></a>对于<code>Promise</code>部分属性的理解</h1><h2 id="对于Promise-then-和Promise-catch-的理解"><a href="#对于Promise-then-和Promise-catch-的理解" class="headerlink" title="对于Promise.then()和Promise.catch()的理解"></a>对于<code>Promise.then()</code>和<code>Promise.catch()</code>的理解</h2><p>今天碰到问题是这样子的:<br>调试bug的时候发现axios走了then也走了有catch,在我印象里是走了then就不该走catch(后来发现是我理解错了)<br>代码是这样的</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></pre></td><td class="code"><pre><span class="line"><span class="variable language_">this</span>.<span class="property">axios</span>.<span class="title function_">post</span>(<span class="string">&#x27;/user/login&#x27;</span>, params)</span><br><span class="line">    .<span class="title function_">then</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>(<span class="string">&#x27;response&#x27;</span>, res)</span><br><span class="line">    &#125;)</span><br><span class="line">    .<span class="title function_">catch</span>(<span class="function"><span class="params">err</span> =&gt;</span> &#123;</span><br><span class="line">      <span class="comment">// 这个catch catch的是then里的异常，then里如果有任何异常都会被catch捕获</span></span><br><span class="line">        <span class="variable language_">console</span>.<span class="title function_">log</span>(<span class="string">&#x27;catch&#x27;</span>)</span><br><span class="line">        <span class="variable language_">console</span>.<span class="title function_">error</span>(err.<span class="property">message</span>)</span><br><span class="line">    &#125;)</span><br></pre></td></tr></table></figure><p>仔细看了<code>Promise.catch()</code>MCDN是这样解释的</p><blockquote><p>The catch() method returns a Promise and deals with rejected cases only. It behaves the same as calling Promise.prototype.then(undefined, onRejected) (in fact, calling obj.catch(onRejected) internally calls obj.then(undefined, onRejected)).</p></blockquote><p>简单来讲调用<code>Promise.catch()</code>等于调用<code>Promise.prototype.then(undefined, onRejected)</code><br>由于<code>Promise.then()</code>返回的是一个<code>Promise</code>对象，返回值解释如下：</p><blockquote><p>throws an error, the promise returned by then gets rejected with the thrown error as its value;</p></blockquote><p>如果抛出异常返回一个执行<code>rejected</code>的<code>Promise</code>对象即相当于调用返回<code>Promise</code>的<code>Promise.then(undefined, onRejected)</code></p><p>对于<code>Promise.catch()</code>的返回值是这样解释的：</p><blockquote><p>The Promise returned by catch() is rejected if onRejected throws an error or returns a Promise which is itself rejected; otherwise, it is resolved.</p></blockquote><p>如果<code>Promise.catch()</code>又抛出异常则相当于又调用<code>Promise.then(undefined, onRejected)</code><br>如果未抛出异常则相当于调用<code>Promise.then(onResolved,undefined)</code></p><h2 id="promise-all-是顺序开始-异步执行-顺序返回"><a href="#promise-all-是顺序开始-异步执行-顺序返回" class="headerlink" title="promise.all()是顺序开始,异步执行,顺序返回"></a>promise.all()是顺序开始,异步执行,顺序返回</h2><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">// 示例代码</span></span><br><span class="line"><span class="keyword">const</span> <span class="title function_">getRandom</span> = (<span class="params"></span>) =&gt; +(<span class="title class_">Math</span>.<span class="title function_">random</span>()*<span class="number">1000</span>).<span class="title function_">toFixed</span>(<span class="number">0</span>);</span><br><span class="line"></span><br><span class="line"><span class="keyword">const</span> <span class="title function_">asyncTask</span> = taskID =&gt; <span class="keyword">new</span> <span class="title class_">Promise</span>(<span class="function"><span class="params">resolve</span> =&gt;</span> &#123;</span><br><span class="line">    <span class="keyword">let</span> timeout = <span class="title function_">getRandom</span>();</span><br><span class="line">    <span class="variable language_">console</span>.<span class="title function_">log</span>(<span class="string">`taskID=<span class="subst">$&#123;taskID&#125;</span> start.`</span>);</span><br><span class="line">    <span class="built_in">setTimeout</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">`taskID=<span class="subst">$&#123;taskID&#125;</span> finished in time=<span class="subst">$&#123;timeout&#125;</span>.`</span>);</span><br><span class="line">        <span class="title function_">resolve</span>(taskID)</span><br><span class="line">    &#125;, timeout);</span><br><span class="line">&#125;);</span><br><span class="line"></span><br><span class="line"><span class="title class_">Promise</span>.<span class="title function_">all</span>([<span class="title function_">asyncTask</span>(<span class="number">1</span>),<span class="title function_">asyncTask</span>(<span class="number">2</span>),<span class="title function_">asyncTask</span>(<span class="number">3</span>)])</span><br><span class="line">.<span class="title function_">then</span>(<span class="function"><span class="params">resultList</span> =&gt;</span> &#123;</span><br><span class="line">    <span class="variable language_">console</span>.<span class="title function_">log</span>(<span class="string">&#x27;results:&#x27;</span>,resultList);</span><br><span class="line">&#125;);</span><br></pre></td></tr></table></figure><p>详见<a href="https://segmentfault.com/q/1010000008174264/a-1020000008175569">这里</a></p>]]></content>
    
    
    <summary type="html">对于`Promise`部分属性的理解</summary>
    
    
    
    
  </entry>
  
  <entry>
    <title>自定义组件分类</title>
    <link href="https://www.zhuyangxing.cn/2018/03/05/20180305_%E8%87%AA%E5%AE%9A%E4%B9%89%E7%BB%84%E4%BB%B6%E5%88%86%E7%B1%BB/"/>
    <id>https://www.zhuyangxing.cn/2018/03/05/20180305_%E8%87%AA%E5%AE%9A%E4%B9%89%E7%BB%84%E4%BB%B6%E5%88%86%E7%B1%BB/</id>
    <published>2018-03-05T15:44:18.000Z</published>
    <updated>2026-06-20T07:58:44.786Z</updated>
    
    <content type="html"><![CDATA[<h1 id="自定义组件分类"><a href="#自定义组件分类" class="headerlink" title="自定义组件分类"></a>自定义组件分类</h1><p>组件分两种</p><ol><li>容器组件(存储状态及状态逻辑,不考虑显示问题)</li><li>显示组件(只做显示使用，不存储任何状态)</li></ol><p>虽然这个概念来源于react,但用在vue组件里也是一样 </p><p>容器组件仅仅做数据提取，然后渲染对应的子组件(显示组件)<br>显示组件可以高效的复用，甚至可以废掉重新做一个显示组件,而不需处理任何业务逻辑。<br>因为任何逻辑都已经在容器组件里处理过了,在业务逻辑不变的情况下，如果要改页面只需修改显示组件即可</p><p><strong>Q1:容器组件和显示组件中间的数据映射，该如何处理?</strong>  </p><blockquote><p>如容器组件里保存的是code如0,1<br>而显示组件需要显示的是name如男,女</p></blockquote><p><strong>A1:其实两种方式均可，建议如下</strong></p><ol><li>如果是固定数量的值建议放在显示组件里：<br>  如男女，已婚未婚这种前后端协商好的甚至是可以硬编码到代码里的字段建议放在显示组件处理</li><li>如果不是固定数量的值建议放在容器组件里：<br>  如需根据服务端返回的数据字典(该字典可通过其他渠道维护非硬编码在代码里)查找对比后显示的<br>  因需要与服务端交互就不能作为显示组件处理</li></ol>]]></content>
    
    
    <summary type="html">自定义组件分类</summary>
    
    
    
    
  </entry>
  
</feed>
