<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
  <title>Ask_Js</title>
  
  
  <link href="/atom.xml" rel="self"/>
  
  <link href="http://q1019736727.github.io/"/>
  <updated>2019-04-08T14:10:16.000Z</updated>
  <id>http://q1019736727.github.io/</id>
  
  <author>
    <name>Ask_Js</name>
    
  </author>
  
  <generator uri="http://hexo.io/">Hexo</generator>
  
  <entry>
    <title>React.js之react-router</title>
    <link href="http://q1019736727.github.io/2019/03/17/react-router/"/>
    <id>http://q1019736727.github.io/2019/03/17/react-router/</id>
    <published>2019-03-17T13:50:23.000Z</published>
    <updated>2019-04-08T14:10:16.000Z</updated>
    
    <content type="html"><![CDATA[<h3 id="前言"><a href="#前言" class="headerlink" title="前言"></a>前言</h3><p>&emsp;当我刚刚开始接触react的时候，路由的跳转到底该使用react-router还是使用react-router-dom,这个是让我们很懵逼的，下面就先来说说react-router和react-router-dom的关系以及区别<br><a id="more"></a></p><h4 id="一-api的区别"><a href="#一-api的区别" class="headerlink" title="(一)api的区别"></a>(一)api的区别</h4><ul><li>react-router提供了router的核心api，如Router、Route、Switch等等，但是并没有提供相关dom操作的api</li><li>react-router-dom提供了通过dom触发的时间路由，例如BrowserRouter、Route、Link等</li></ul><h4 id="二-功能的差异性"><a href="#二-功能的差异性" class="headerlink" title="(二)功能的差异性"></a>(二)功能的差异性</h4><ul><li>react-router-dom是基于react-router实现的，并且加入了一些浏览器运行的一些功能，<br>  例如：Link组件会渲染一个a标签，BrowserRouter使用 HTML5 提供的 history API可以保证你的 UI 界面和 URL 保持同步，HashRouter使用 URL 的 hash 部分保证你的 UI 界面和 URL 保持同步</li></ul><p>所以综上所说因素，一般我们只要引入react-router-dom即可,react-router-dom会自动引入依赖库react-router,在<a href="mailto:react-router@v4.0" target="_blank" rel="noopener">react-router@v4.0</a>版本以后，React Router被拆分成三个包：react-router,react-router-dom和react-router-native，目前网站搭建只需要引入react-router-dom即可，更多用法可以查看<a href="https://reacttraining.com/react-router/web/guides/quick-start" target="_blank" rel="noopener">官网</a><br><figure class="highlight javascript"><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">yarn add react-router-dom</span><br><span class="line"><span class="comment">//或则</span></span><br><span class="line">npm install react-router-dom</span><br></pre></td></tr></table></figure></p><h3 id="react-router-dom"><a href="#react-router-dom" class="headerlink" title="react-router-dom"></a>react-router-dom</h3><h4 id="（一-BrowserRouter与HashRouter"><a href="#（一-BrowserRouter与HashRouter" class="headerlink" title="（一) BrowserRouter与HashRouter"></a>（一) BrowserRouter与HashRouter</h4><p>&emsp;HashRouter与BrowserRouter这两个路由是基本，我们需要将他们包裹在最外层，当然他们的内层也只能包裹一个元素，例如这样<br><figure class="highlight javascript"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">import</span> &#123;BrowserRouter <span class="keyword">as</span> Router, HashRouter, Route&#125; <span class="keyword">from</span> <span class="string">"react-router-dom"</span>;</span><br><span class="line"></span><br><span class="line">    &lt;HashRouter&gt;</span><br><span class="line">      &lt;div&gt;</span><br><span class="line">        &lt;Route exact path=<span class="string">'/'</span> component=&#123;Login&#125;&gt;<span class="xml"><span class="tag">&lt;/<span class="name">Route</span>&gt;</span></span></span><br><span class="line">        &lt;Route path=<span class="string">'/home'</span> component=&#123;Home&#125;&gt;<span class="xml"><span class="tag">&lt;/<span class="name">Route</span>&gt;</span></span></span><br><span class="line">     &lt;<span class="regexp">/div&gt;</span></span><br><span class="line"><span class="regexp">    &lt;/</span>HashRouter&gt;</span><br><span class="line">    </span><br><span class="line">    <span class="comment">//或则使用BrowserRouter这样</span></span><br><span class="line">    </span><br><span class="line">    &lt;Router&gt;</span><br><span class="line">      &lt;div&gt;</span><br><span class="line">        &lt;Route exact path=<span class="string">'/'</span> component=&#123;Login&#125;&gt;<span class="xml"><span class="tag">&lt;/<span class="name">Route</span>&gt;</span></span></span><br><span class="line">        &lt;Route path=<span class="string">'/home'</span> component=&#123;Home&#125;&gt;<span class="xml"><span class="tag">&lt;/<span class="name">Route</span>&gt;</span></span></span><br><span class="line">      &lt;<span class="regexp">/div&gt;</span></span><br><span class="line"><span class="regexp">    &lt;/</span>Router&gt;</span><br></pre></td></tr></table></figure></p><p>在这里我们要说说HashRouter和BrowserRouter的区别</p><ul><li>BrowserRouter使用HTML5历史记录API（pushState，replaceState和popstate事件）来保持您的UI与URL同步</li><li>HashRouter使用URL的哈希部分（即window.location.hash）来保持您的UI与URL同步，使得路径上会出现<span style="color:red"> # </span>键</li></ul><h4 id="二-Route"><a href="#二-Route" class="headerlink" title="(二) Route"></a>(二) Route</h4><p>Route 就像原材料，控制着我们应该对应显示的内容，也是最重要的路由组件<br>Route常用的属性，path、exact、component</p><ul><li>path：对应的路径</li><li>exact：仅当路径与location.pathname完全匹配时才匹配，当匹配到路劲后就不会再往下匹配</li><li>component：对应要显示的组件<figure class="highlight javascript"><figcaption><span>app.js</span></figcaption><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">import</span> &#123;BrowserRouter <span class="keyword">as</span> Router, HashRouter, Route&#125; <span class="keyword">from</span> <span class="string">"react-router-dom"</span>;</span><br><span class="line">    &lt;HashRouter&gt;</span><br><span class="line">      &lt;div&gt;</span><br><span class="line">        <span class="comment">/*一般这里都要加个exact，不然切换路径后，两个路径对应的组件都会被显示出来*/</span></span><br><span class="line">        &lt;Route exact path=<span class="string">'/'</span> component=&#123;Login&#125;&gt;<span class="xml"><span class="tag">&lt;/<span class="name">Route</span>&gt;</span></span></span><br><span class="line">        &lt;Route path=<span class="string">'/home'</span> component=&#123;Home&#125;&gt;<span class="xml"><span class="tag">&lt;/<span class="name">Route</span>&gt;</span></span></span><br><span class="line">      &lt;<span class="regexp">/div&gt;</span></span><br><span class="line"><span class="regexp">    &lt;/</span>HashRouter&gt;</span><br></pre></td></tr></table></figure></li></ul><h4 id="三-Link与NavLink"><a href="#三-Link与NavLink" class="headerlink" title="(三) Link与NavLink"></a>(三) Link与NavLink</h4><p>&emsp;Link与NavLink都是控制路由跳转的，当然NavLink所具有的功能比Link更多，所以，使用的时候视情况而定。控制路由跳转这只是其中的一种方法，我们也可以使用react-router里面的js方法实现跳转<br><figure class="highlight javascript"><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><br><span class="line"></span><br></pre></td></tr></table></figure></p><font color="red" size="4" face="黑体"> <strong>先暂时写在这儿，等有时间再接着完善</strong></font>]]></content>
    
    <summary type="html">
    
      &lt;h3 id=&quot;前言&quot;&gt;&lt;a href=&quot;#前言&quot; class=&quot;headerlink&quot; title=&quot;前言&quot;&gt;&lt;/a&gt;前言&lt;/h3&gt;&lt;p&gt;&amp;emsp;当我刚刚开始接触react的时候，路由的跳转到底该使用react-router还是使用react-router-dom,这个是让我们很懵逼的，下面就先来说说react-router和react-router-dom的关系以及区别&lt;br&gt;&lt;/p&gt;
    
    </summary>
    
      <category term="前端" scheme="http://q1019736727.github.io/categories/%E5%89%8D%E7%AB%AF/"/>
    
    
      <category term="React" scheme="http://q1019736727.github.io/tags/React/"/>
    
      <category term="react-router" scheme="http://q1019736727.github.io/tags/react-router/"/>
    
      <category term="react-router-dom" scheme="http://q1019736727.github.io/tags/react-router-dom/"/>
    
  </entry>
  
  <entry>
    <title>谈谈vuex</title>
    <link href="http://q1019736727.github.io/2019/03/11/vuex/"/>
    <id>http://q1019736727.github.io/2019/03/11/vuex/</id>
    <published>2019-03-11T07:30:27.000Z</published>
    <updated>2019-04-08T14:10:16.000Z</updated>
    
    <content type="html"><![CDATA[<h2 id="简介"><a href="#简介" class="headerlink" title="简介"></a>简介</h2><p>&emsp;Vuex 是一个专为 Vue.js 应用程序开发的状态管理模式。它采用集中式存储管理应用的所有组件的状态，并以相应的规则保证状态以一种可预测的方式发生变化。<br>&emsp;Vuex 的状态存储是响应式的。当 Vue 组件从 store 中读取状态的时候，若 store 中的状态发生变化，那么相应的组件也会相应地得到高效更新<br>&emsp;我们不能直接改变 store 中的状态。改变 store 中的状态的唯一途径就是显式地提交 (commit) mutation。<br><a id="more"></a></p><h2 id="安装"><a href="#安装" class="headerlink" title="安装"></a>安装</h2><p>&emsp;vuex的安装<br><figure class="highlight plain"><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">//npm 方式引入</span><br><span class="line">npm install vuex --save</span><br><span class="line"></span><br><span class="line">//yarn 方式引入</span><br><span class="line">yarn add vuex</span><br></pre></td></tr></table></figure></p><h2 id="vuex-基本概念"><a href="#vuex-基本概念" class="headerlink" title="vuex 基本概念"></a>vuex 基本概念</h2><p>vuex最主要的几个核心概念就是State,Getter,Mutations,Actions<br><br></p><h3 id="一-State"><a href="#一-State" class="headerlink" title="(一) State"></a>(一) State</h3><p><strong>state</strong>就是Vuex中的公共的状态, 可以将<strong>state</strong>看作是所有组件的<strong>data</strong>, 用于保存所有组件的公共数据，这里面的数据是响应式的，当很多地方引用了同<strong>state</strong>数据源并且未对数据进行深拷贝，那么当一个地方改变该数据，所有引用的地方数据都会发生变化。<br>  <figure class="highlight javascript"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment">//定义</span></span><br><span class="line"><span class="keyword">import</span> Vuex <span class="keyword">from</span> <span class="string">'vuex'</span></span><br><span class="line"><span class="keyword">import</span> Vue <span class="keyword">from</span> <span class="string">'vue'</span></span><br><span class="line">Vue.use(Vuex)</span><br><span class="line"></span><br><span class="line"><span class="keyword">const</span> store = <span class="keyword">new</span> Vuex.Store(&#123;</span><br><span class="line">  state:&#123;</span><br><span class="line">      todoList:[<span class="number">1</span>,<span class="number">2</span>,<span class="number">3</span>]</span><br><span class="line">  &#125;</span><br><span class="line">&#125;)</span><br><span class="line"></span><br><span class="line"><span class="comment">//组件获取</span></span><br><span class="line"><span class="keyword">this</span>.$store.state.todoList</span><br></pre></td></tr></table></figure></p><p><br><br><br></p><h3 id="二-Getter"><a href="#二-Getter" class="headerlink" title="(二) Getter"></a>(二) Getter</h3><p><strong>Getter</strong>是对state里面的数据进行预加工处理的函数方法，当我们需要对原始数据进行一个处理时，我们就需要用到getter，<br><figure class="highlight javascript"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">const</span> store = <span class="keyword">new</span> Vuex.Store(&#123;</span><br><span class="line">  state: &#123;</span><br><span class="line">    todoList: [</span><br><span class="line">      &#123; <span class="attr">time</span>: <span class="number">1</span>, <span class="attr">text</span>: <span class="string">'do some'</span>&#125;,</span><br><span class="line">      &#123; <span class="attr">time</span>: <span class="number">2</span>, <span class="attr">text</span>: <span class="string">'do some'</span> &#125;</span><br><span class="line">    ]</span><br><span class="line">  &#125;,</span><br><span class="line">  getters: &#123;</span><br><span class="line">      <span class="comment">//这里我们返回数据的长度</span></span><br><span class="line">    dealTodo: <span class="function"><span class="params">state</span> =&gt;</span> &#123;</span><br><span class="line">      <span class="keyword">return</span> state.todoList.length</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>Getter 会暴露为 store.getters 对象，我们可以以属性的形式访问这些值：<br><figure class="highlight javascript"><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">//使用</span></span><br><span class="line"><span class="keyword">this</span>.$store.getters.dealTodo</span><br></pre></td></tr></table></figure></p><p> <font color="red" size="4" face="黑体"> <strong>mapGetters 辅助函数</strong></font><br>当getters里面对象过多时，我们可以以ES6的语法形式解析里面的对象，mapGetters 辅助函数仅仅是将 store 中的 getter 映射到局部计算属性<span style="color:red">computed</span>：</p><figure class="highlight javascript"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">import</span> &#123; mapGetters &#125; <span class="keyword">from</span> <span class="string">'vuex'</span></span><br><span class="line"></span><br><span class="line"><span class="keyword">export</span> <span class="keyword">default</span> &#123;</span><br><span class="line">  computed: &#123;</span><br><span class="line">  <span class="comment">// 使用对象展开运算符将 getter 混入 computed 对象中</span></span><br><span class="line">    ...mapGetters([</span><br><span class="line">      <span class="string">'getters1'</span>,</span><br><span class="line">      <span class="string">'getters2'</span>,</span><br><span class="line">      <span class="string">'getters3'</span>,</span><br><span class="line">    ])</span><br><span class="line">  &#125;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><p>当然我们也可以使用对象的形式放入<br><figure class="highlight javascript"><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">mapGetters(&#123;</span><br><span class="line">    dataCount: <span class="string">'getters1'</span></span><br><span class="line">&#125;)</span><br></pre></td></tr></table></figure></p><p><br><br><br></p><h3 id="三-Mutations"><a href="#三-Mutations" class="headerlink" title="(三) Mutations"></a>(三) Mutations</h3><p><strong>Mutations</strong>是更改 Vuex 的 store 中的状态的唯一方法，且<span style="color:red">不能用于处理异步事件</span>,其中第一个参数是state, 第二参数是payload, 也就是传入数据<br><figure class="highlight javascript"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment">//实例</span></span><br><span class="line"><span class="keyword">const</span> store = <span class="keyword">new</span> Vuex.Store(&#123;</span><br><span class="line">  state: &#123;</span><br><span class="line">    count: <span class="number">1</span></span><br><span class="line">  &#125;,</span><br><span class="line">  mutations: &#123;</span><br><span class="line">    increment (state,payload) &#123;</span><br><span class="line">      <span class="comment">// 变更状态</span></span><br><span class="line">      state.count +=  payload.amount</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>此时我们不能直接调用store里面的mutations实例方法，而是要通过commit方式对应的type来触发该方法<br><figure class="highlight javascript"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment">//使用 </span></span><br><span class="line"></span><br><span class="line"><span class="comment">//方式1</span></span><br><span class="line"><span class="keyword">this</span>.$store.commit(<span class="string">'increment'</span>,&#123;<span class="attr">amount</span>:<span class="number">100</span>&#125;)</span><br><span class="line"></span><br><span class="line"><span class="comment">//方式2 直接使用包含 type 属性的对象</span></span><br><span class="line"><span class="keyword">this</span>.$store.commit(&#123;</span><br><span class="line">  type: <span class="string">'increment'</span>,</span><br><span class="line">  amount: <span class="number">10</span></span><br><span class="line">&#125;)</span><br></pre></td></tr></table></figure></p><p><strong><span style="color:red">Mutation 必须是同步函数</span></strong>，再次强调一下，所以存在异步操作的函数最好不要使用mutation里面的方法</p><p><strong><span style="color:red">mapMutations辅助函数</span></strong><br>mapMutations 辅助函数将组件中的 <span style="color:red">methods</span> 映射为 store.commit 调用（需要在根节点注入 store）<br><figure class="highlight javascript"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">import</span> &#123; mapMutations &#125; <span class="keyword">from</span> <span class="string">'vuex'</span></span><br><span class="line"></span><br><span class="line"><span class="keyword">export</span> <span class="keyword">default</span> &#123;</span><br><span class="line">  methods: &#123;</span><br><span class="line">      <span class="comment">//方式1</span></span><br><span class="line">    ...mapMutations([</span><br><span class="line">      <span class="string">'increment'</span>, <span class="comment">// 将 `this.increment()` 映射为 `this.$store.commit('increment')`</span></span><br><span class="line"></span><br><span class="line">      <span class="comment">// `mapMutations` 也支持载荷：</span></span><br><span class="line">      <span class="string">'incrementBy'</span> <span class="comment">// 将 `this.incrementBy(amount)` 映射为 `this.$store.commit('incrementBy', amount)`</span></span><br><span class="line">    ]),</span><br><span class="line">    </span><br><span class="line">    <span class="comment">//方式2</span></span><br><span class="line">    ...mapMutations(&#123;</span><br><span class="line">      add: <span class="string">'increment'</span> <span class="comment">// 将 `this.add()` 映射为 `this.$store.commit('increment')`</span></span><br><span class="line">    &#125;)</span><br><span class="line">  &#125;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure></p><p><br><br><br></p><h3 id="四-Action"><a href="#四-Action" class="headerlink" title="(四) Action"></a>(四) Action</h3><p>action 类似于 mutation，不同在于：</p><ul><li>action 提交的是 mutation，而不是直接变更状态。</li><li>action 可以<span style="color:red">包含任意异步操作</span>。</li><li>actions中的回调函数的第一个参数是context, 是一个与store实例具有相同属性和方法的对象<figure class="highlight javascript"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br></pre></td><td class="code"><pre><span class="line"></span><br><span class="line"><span class="keyword">const</span> store = <span class="keyword">new</span> Vuex.Store(&#123;</span><br><span class="line">  state: &#123;</span><br><span class="line">    count: <span class="number">0</span></span><br><span class="line">  &#125;,</span><br><span class="line">  mutations: &#123;</span><br><span class="line">    increment (state) &#123;</span><br><span class="line">      state.count++</span><br><span class="line">    &#125;</span><br><span class="line">  &#125;,</span><br><span class="line">  actions: &#123;</span><br><span class="line">      <span class="comment">//写法1</span></span><br><span class="line">    increment (context) &#123;</span><br><span class="line">      context.commit(<span class="string">'increment'</span>)</span><br><span class="line">    &#125;,</span><br><span class="line">    </span><br><span class="line">    <span class="comment">//写法2 我们也可以使用ES6语法</span></span><br><span class="line">     increment (&#123;state,commit&#125;) &#123;</span><br><span class="line">        commit(<span class="string">'increment'</span>)</span><br><span class="line">    &#125;</span><br><span class="line">  &#125;</span><br><span class="line">&#125;)</span><br></pre></td></tr></table></figure></li></ul><p>action的触发,当然action也和mutation的触发方式差不多，也同样支持包含 type 属性的对象方式分发，下面我们就简单写一种,当然关键字不一样，这个触发关键字是<strong>dispatch</strong><br><figure class="highlight javascript"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">this</span>.$store.dispatch(<span class="string">'increment'</span>,data)</span><br></pre></td></tr></table></figure></p><p>在上面我们也说到action可以进行异步操作，那么我们就可以以promise为例简单实现一下<br><figure class="highlight javascript"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">const</span> store = &#123;</span><br><span class="line">    <span class="comment">//...</span></span><br><span class="line">    actions:&#123;</span><br><span class="line">        increment(&#123;commit&#125;,data)&#123;</span><br><span class="line">            <span class="keyword">return</span> <span class="keyword">new</span> <span class="built_in">Promise</span>(<span class="function">(<span class="params">resolve</span>)=&gt;</span>&#123;</span><br><span class="line">                commit(<span class="string">'increment'</span>,data)</span><br><span class="line">                resolve()</span><br><span class="line">            &#125;)</span><br><span class="line">        &#125;</span><br><span class="line">    &#125;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure></p><p><strong><span style="color:red">mapActions辅助函数</span></strong><br>mapActions 辅助函数将组件中的 <span style="color:red">methods</span> 映射为 store.dispatch 调用（需要在根节点注入 store）<br><figure class="highlight javascript"><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"><span class="keyword">import</span> &#123; mapActions &#125; <span class="keyword">from</span> <span class="string">'vuex'</span></span><br><span class="line"></span><br><span class="line"><span class="keyword">export</span> <span class="keyword">default</span> &#123;</span><br><span class="line">  <span class="comment">// ...</span></span><br><span class="line">  methods: &#123;</span><br><span class="line">    ...mapActions([</span><br><span class="line">      <span class="comment">// 将 `this.increment()` 映射为 `this.$store.dispatch('increment')`</span></span><br><span class="line">      <span class="string">'increment'</span>, </span><br><span class="line"></span><br><span class="line">      <span class="comment">// `mapActions` 也支持载荷：</span></span><br><span class="line">      <span class="comment">// 将 `this.incrementBy(amount)` 映射为 `this.$store.dispatch('incrementBy', amount)`</span></span><br><span class="line">      <span class="string">'incrementBy'</span> </span><br><span class="line">    ]),</span><br><span class="line">    ...mapActions(&#123;</span><br><span class="line">    <span class="comment">// 将 `this.add()` 映射为 `this.$store.dispatch('increment')`</span></span><br><span class="line">      add: <span class="string">'increment'</span> </span><br><span class="line">    &#125;)</span><br><span class="line">  &#125;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure></p><p><br><br><br></p><h2 id="vuex项目结构拆分"><a href="#vuex项目结构拆分" class="headerlink" title="vuex项目结构拆分"></a>vuex项目结构拆分</h2><p>当项目store文件很大的时候，我们就不得不拆分项目的目录结构，大体上我们必须准守以下规则</p><ul><li>应用层级的状态应该集中到单个 store 对象中。</li><li>提交 mutation 是更改状态的唯一方法，并且这个过程是同步的。</li><li>异步逻辑都应该封装到 action 里面。</li></ul><p>只要遵循上面的规则，代码可以任意组织，下面是我经常性使用的组合形式<br><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br></pre></td><td class="code"><pre><span class="line">└── store</span><br><span class="line">    ├── index.js</span><br><span class="line">    ├── Type.js</span><br><span class="line">    ├── binding</span><br><span class="line">    │   ├── actions.js</span><br><span class="line">    │   ├── index.js</span><br><span class="line">    │   └── mutations.js</span><br><span class="line">    ├── house</span><br><span class="line">        ├── actions.js</span><br><span class="line">        ├── index.js</span><br><span class="line">        └── mutations.js</span><br></pre></td></tr></table></figure></p><p>store的根目录index.js用于整合各个局部状态store，使用modules整合<br><figure class="highlight javascript"><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">//文件 store/index.js</span></span><br><span class="line"></span><br><span class="line"><span class="keyword">import</span> Vuex <span class="keyword">from</span> <span class="string">'vuex'</span></span><br><span class="line"><span class="keyword">import</span> Vue <span class="keyword">from</span> <span class="string">'vue'</span></span><br><span class="line"><span class="keyword">import</span> houseStore <span class="keyword">from</span> <span class="string">'./house'</span></span><br><span class="line"><span class="keyword">import</span> bindingStore <span class="keyword">from</span> <span class="string">'./binding'</span></span><br><span class="line">Vue.use(Vuex)</span><br><span class="line"></span><br><span class="line"><span class="keyword">const</span> store = <span class="keyword">new</span> Vuex.Store(&#123;</span><br><span class="line">  modules:&#123;</span><br><span class="line">    house:houseStore, <span class="comment">//house store</span></span><br><span class="line">    binding:bindingStore  <span class="comment">//binding store</span></span><br><span class="line">  &#125;</span><br><span class="line">&#125;)</span><br><span class="line"></span><br><span class="line"><span class="keyword">export</span> <span class="keyword">default</span> store</span><br></pre></td></tr></table></figure></p><p>Type.js主要用于存储事件type名<br><figure class="highlight javascript"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment">//Type.js</span></span><br><span class="line"><span class="comment">//例如...</span></span><br><span class="line"><span class="comment">//操作1</span></span><br><span class="line"><span class="keyword">export</span> <span class="keyword">const</span> RRDUCELIST = <span class="string">'RRDUCELIST'</span></span><br><span class="line"><span class="comment">//操作2</span></span><br><span class="line"><span class="keyword">export</span> <span class="keyword">const</span> ADDLIST = <span class="string">'ADDLIST'</span></span><br></pre></td></tr></table></figure></p><p>局部store我就以binding为例子<br><figure class="highlight javascript"><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><br><span class="line"><span class="comment">/*----------------------------index.js-----------------------------*/</span></span><br><span class="line"><span class="comment">//index.js</span></span><br><span class="line"><span class="keyword">import</span> &#123;RRDUCELIST&#125; <span class="keyword">from</span> <span class="string">'@/store/Type.js'</span></span><br><span class="line"><span class="keyword">import</span> mutations <span class="keyword">from</span> <span class="string">'./mutations'</span></span><br><span class="line"><span class="keyword">import</span> actions <span class="keyword">from</span> <span class="string">'./actions'</span></span><br><span class="line"><span class="keyword">const</span> index = &#123;</span><br><span class="line">  state:&#123;</span><br><span class="line">    tableDta:[</span><br><span class="line">      &#123;<span class="attr">data</span>:[<span class="string">'数据1'</span>,<span class="string">'数据2'</span>,<span class="string">'数据3'</span>]&#125;,</span><br><span class="line">    ]</span><br><span class="line">  &#125;,</span><br><span class="line">  mutations,</span><br><span class="line">  actions,</span><br><span class="line">&#125;</span><br><span class="line"><span class="keyword">export</span> <span class="keyword">default</span> index</span><br><span class="line"></span><br><span class="line"></span><br><span class="line"><span class="comment">/*----------------------------mutations.js-----------------------------*/</span></span><br><span class="line"><span class="comment">//mutations</span></span><br><span class="line"><span class="keyword">import</span> &#123;RRDUCELIST,ADDLIST&#125; <span class="keyword">from</span> <span class="string">'@/store/Type.js'</span></span><br><span class="line"><span class="keyword">const</span> mutations = &#123;</span><br><span class="line">  <span class="comment">//删除数据</span></span><br><span class="line">  [RRDUCELIST](state, payload) &#123;</span><br><span class="line">    state.tableDta.splice(<span class="number">0</span>, <span class="number">1</span>)</span><br><span class="line">  &#125;,</span><br><span class="line">  <span class="comment">//增加数据</span></span><br><span class="line">  [ADDLIST](state,payload)&#123;</span><br><span class="line">    state.tableDta.push(payload)</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">default</span> mutations</span><br><span class="line"></span><br><span class="line"></span><br><span class="line"><span class="comment">/*----------------------------actions.js-----------------------------*/</span></span><br><span class="line"><span class="comment">//actions</span></span><br><span class="line"><span class="keyword">import</span> &#123;RRDUCELIST,ADDLIST&#125; <span class="keyword">from</span> <span class="string">'@/store/Type.js'</span></span><br><span class="line"><span class="keyword">const</span> actions = &#123;</span><br><span class="line">  reduceListAction(&#123;commit,state&#125;,index)&#123;</span><br><span class="line">    <span class="keyword">return</span> <span class="keyword">new</span> <span class="built_in">Promise</span>(<span class="function">(<span class="params">resolve, reject</span>) =&gt;</span> &#123;</span><br><span class="line">      commit(RRDUCELIST,index)</span><br><span class="line">      resolve()</span><br><span class="line">    &#125;)</span><br><span class="line">  &#125;,</span><br><span class="line">  addListAction(&#123;state,commit&#125;,data)&#123;</span><br><span class="line">    commit(ADDLIST,data)</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">default</span> actions</span><br></pre></td></tr></table></figure></p>]]></content>
    
    <summary type="html">
    
      &lt;h2 id=&quot;简介&quot;&gt;&lt;a href=&quot;#简介&quot; class=&quot;headerlink&quot; title=&quot;简介&quot;&gt;&lt;/a&gt;简介&lt;/h2&gt;&lt;p&gt;&amp;emsp;Vuex 是一个专为 Vue.js 应用程序开发的状态管理模式。它采用集中式存储管理应用的所有组件的状态，并以相应的规则保证状态以一种可预测的方式发生变化。&lt;br&gt;&amp;emsp;Vuex 的状态存储是响应式的。当 Vue 组件从 store 中读取状态的时候，若 store 中的状态发生变化，那么相应的组件也会相应地得到高效更新&lt;br&gt;&amp;emsp;我们不能直接改变 store 中的状态。改变 store 中的状态的唯一途径就是显式地提交 (commit) mutation。&lt;br&gt;&lt;/p&gt;
    
    </summary>
    
      <category term="前端" scheme="http://q1019736727.github.io/categories/%E5%89%8D%E7%AB%AF/"/>
    
    
      <category term="vue" scheme="http://q1019736727.github.io/tags/vue/"/>
    
      <category term="vuex" scheme="http://q1019736727.github.io/tags/vuex/"/>
    
  </entry>
  
  <entry>
    <title>SCSS常用基础功能整理</title>
    <link href="http://q1019736727.github.io/2019/03/06/scss/"/>
    <id>http://q1019736727.github.io/2019/03/06/scss/</id>
    <published>2019-03-06T13:01:54.000Z</published>
    <updated>2019-04-08T14:10:16.000Z</updated>
    
    <content type="html"><![CDATA[<p><img src="/2019/03/06/scss/scss.jpg" alt></p>   <a id="more"></a><p>&emsp;Sass 是一门高于 CSS 的元语言，它能用来清晰地、结构化地描述文件样式，有着比普通 CSS 更加强大的功能。<br>&emsp;Sass 能够提供更简洁、更优雅的语法，同时提供多种功能来创建可维护和管理的样式表。<br>其中Scss就是演化于Sass，Sass诞生于Ruby社区，只不过Sass写法更加的精简，Sass是有严格的缩进规范并且没有‘{}’和‘；’。而Scss则和css的规范是一致的。<br><br></p><h3 id="mixin"><a href="#mixin" class="headerlink" title="mixin"></a>mixin</h3><p>   &emsp;可以设置的通用样式，避免繁琐的重复代码，让css看起来更具条理性<br>   &emsp;关键字<code>@mixin</code> <code>@include</code><br><figure class="highlight scss"><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">//定义一个debug样式</span></span><br><span class="line">@<span class="keyword">mixin</span> dbug &#123;</span><br><span class="line">  <span class="attribute">border</span>: <span class="number">1px</span> solid red;</span><br><span class="line">&#125;</span><br><span class="line"><span class="selector-id">#container</span> &#123;</span><br><span class="line">  <span class="comment">//使用关键字@include使用该样式</span></span><br><span class="line">   @<span class="keyword">include</span> dbug;</span><br><span class="line">   <span class="selector-class">.box1</span> &#123;</span><br><span class="line">     <span class="attribute">color</span>: red;</span><br><span class="line">   &#125;</span><br><span class="line">   <span class="selector-class">.box2</span> &#123;</span><br><span class="line">     <span class="attribute">color</span>: blue;</span><br><span class="line">   &#125;</span><br><span class="line"> &#125;</span><br></pre></td></tr></table></figure></p><p>&emsp;当然mixin里面也和js的函数一样，可以接受参数<br><figure class="highlight scss"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br></pre></td><td class="code"><pre><span class="line">@<span class="keyword">mixin</span> dbug(<span class="variable">$color</span>) &#123;</span><br><span class="line">  <span class="comment">//接受形参$color</span></span><br><span class="line">  <span class="attribute">border</span>: <span class="number">1px</span> solid <span class="variable">$color</span>;</span><br><span class="line">&#125;</span><br><span class="line"><span class="selector-id">#container</span> &#123;</span><br><span class="line">   <span class="variable">$R</span>: <span class="number">#eee</span>;<span class="comment">//定义一个color值</span></span><br><span class="line">   @<span class="keyword">include</span> dbug(<span class="variable">$R</span>);</span><br><span class="line">   &gt;<span class="selector-class">.box1</span> &#123;</span><br><span class="line">     <span class="attribute">color</span>: red;</span><br><span class="line">   &#125;</span><br><span class="line">   &gt;<span class="selector-class">.box2</span> &#123;</span><br><span class="line">     <span class="attribute">color</span>: blue;</span><br><span class="line">   &#125;</span><br><span class="line"> &#125;</span><br></pre></td></tr></table></figure></p><p><br></p><h3 id="placeholder"><a href="#placeholder" class="headerlink" title="%placeholder"></a>%placeholder</h3><p>&emsp;placeholder的用法和mixin的用法差不多一样,只是不能接受参数,使用时前面修饰符是@extend<br>&emsp;关键字<code>%</code> <code>@extend</code> ，那么用%placeholder的方式上面可以写成<br><figure class="highlight scss"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment">//不能接受参数</span></span><br><span class="line">%dbug&#123;</span><br><span class="line">  <span class="attribute">border</span>: <span class="number">1px</span> solid red;</span><br><span class="line">&#125;</span><br><span class="line"><span class="selector-id">#container</span> &#123;</span><br><span class="line">  @<span class="keyword">extend</span> %dbug;</span><br><span class="line">  &gt;<span class="selector-class">.box1</span> &#123;</span><br><span class="line">    <span class="attribute">color</span>: red;</span><br><span class="line">  &#125;</span><br><span class="line">  &gt;<span class="selector-class">.box2</span> &#123;</span><br><span class="line">    <span class="attribute">color</span>: blue;</span><br><span class="line">  &#125;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure></p><p><br></p><h3 id="amp-以及冒号-的运用"><a href="#amp-以及冒号-的运用" class="headerlink" title="&amp;以及冒号:的运用"></a>&amp;以及冒号:的运用</h3><p>&emsp;&amp;代表着当前选择器,:冒号相当于一个连接符<br><figure class="highlight scss"><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="selector-class">.userCard</span>&#123;</span><br><span class="line">  <span class="attribute">width</span>: <span class="number">100px</span>;</span><br><span class="line">  <span class="comment">//多类选择器</span></span><br><span class="line">  &amp;<span class="selector-class">.active</span>&#123;</span><br><span class="line">    <span class="attribute">background</span>: yellow;</span><br><span class="line">  &#125;</span><br><span class="line">  <span class="comment">//详当于是 .userCard-name 的写法 </span></span><br><span class="line">  &amp;-name&#123;</span><br><span class="line">    <span class="attribute">color</span>: black;</span><br><span class="line">    <span class="comment">// font-size font-weight</span></span><br><span class="line">    <span class="attribute">font</span>:&#123;</span><br><span class="line">      size: <span class="number">28px</span>;</span><br><span class="line">      weight: bold;</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><br></p><h3 id="除法运算"><a href="#除法运算" class="headerlink" title="除法运算"></a>除法运算</h3><p>&emsp;以下三种情况 / (斜杠)将被视为除法运算符号：</p><p>&emsp;1.如果值，或值的一部分，是变量或者函数的返回值<br>&emsp;2.如果值被圆括号包裹<br>&emsp;3.如果值是算数表达式的一部分<br><figure class="highlight scss"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br></pre></td><td class="code"><pre><span class="line"><span class="selector-tag">p</span> &#123;</span><br><span class="line">  <span class="attribute">font</span>: <span class="number">10px</span>/<span class="number">8px</span>;             <span class="comment">// 直接使用除法，不会触发运算</span></span><br><span class="line">  <span class="variable">$width</span>: <span class="number">1000px</span>;</span><br><span class="line">  <span class="attribute">width</span>: <span class="variable">$width</span>/<span class="number">2</span>;            <span class="comment">// 使用变量,触发运算</span></span><br><span class="line">  <span class="attribute">width</span>: round(<span class="number">1.5</span>)/<span class="number">2</span>;        <span class="comment">// 使用一个函数,触发运算</span></span><br><span class="line">  <span class="attribute">height</span>: (<span class="number">500px</span>/<span class="number">2</span>);          <span class="comment">// 使用括号,触发运算</span></span><br><span class="line">  <span class="attribute">margin-left</span>: <span class="number">5px</span> + <span class="number">8px</span>/<span class="number">2px</span>; <span class="comment">// 使用加号,触发运算</span></span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line">编译为</span><br><span class="line"></span><br><span class="line"><span class="selector-tag">p</span> &#123;</span><br><span class="line">  <span class="attribute">font</span>: <span class="number">10px</span>/<span class="number">8px</span>; <span class="comment">//直接使用 / (斜杠),并未被编译</span></span><br><span class="line">  <span class="attribute">width</span>: <span class="number">500px</span>;</span><br><span class="line">  <span class="attribute">height</span>: <span class="number">250px</span>;</span><br><span class="line">  <span class="attribute">margin-left</span>: <span class="number">9px</span>; </span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure></p><p><br></p><h3 id="媒体查询"><a href="#媒体查询" class="headerlink" title="媒体查询"></a>媒体查询</h3><figure class="highlight scss"><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="comment">//手机宽度</span></span><br><span class="line">@<span class="keyword">mixin</span> phone &#123;</span><br><span class="line">  @<span class="keyword">media</span> (max-width: 500px) &#123;</span><br><span class="line">    @<span class="keyword">content</span>;</span><br><span class="line">  &#125;</span><br><span class="line">&#125;</span><br><span class="line"><span class="comment">//ipad宽度</span></span><br><span class="line">@<span class="keyword">mixin</span> ipad &#123;</span><br><span class="line">  @<span class="keyword">media</span> (min-width: 501px) and (max-width: 1024px) &#123;</span><br><span class="line">    @<span class="keyword">content</span>;</span><br><span class="line">  &#125;</span><br><span class="line">&#125;</span><br><span class="line"><span class="comment">//pc宽度</span></span><br><span class="line">@<span class="keyword">mixin</span> pc &#123;</span><br><span class="line">  @<span class="keyword">media</span> (min-width: 1025px) &#123;</span><br><span class="line">    @<span class="keyword">content</span>;</span><br><span class="line">  &#125;</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line"><span class="comment">//使用</span></span><br><span class="line"><span class="selector-id">#container</span>&#123;</span><br><span class="line">    @<span class="keyword">include</span> phone &#123;</span><br><span class="line">      <span class="attribute">background</span>: red;</span><br><span class="line">    &#125;</span><br><span class="line">    @<span class="keyword">include</span> ipad&#123;</span><br><span class="line">      <span class="attribute">background</span>: blue;</span><br><span class="line">    &#125;</span><br><span class="line">    @<span class="keyword">include</span> pc&#123;</span><br><span class="line">      <span class="attribute">background</span>: green;</span><br><span class="line">    &#125;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><p><br></p><h3 id="function的使用"><a href="#function的使用" class="headerlink" title="@function的使用"></a>@function的使用</h3><p>这个和js的写法都差不多,可以传入一个参数，并返回处理后的数据<br><figure class="highlight scss"><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">@function px(<span class="variable">$value</span>)&#123;</span><br><span class="line"> @return <span class="variable">$value</span>/<span class="number">2</span> + px;</span><br><span class="line">&#125;</span><br><span class="line"><span class="selector-id">#container</span>&#123;</span><br><span class="line">  <span class="attribute">width</span>: px(<span class="number">200</span>);</span><br><span class="line">  <span class="attribute">height</span>: px(<span class="number">200</span>);</span><br><span class="line">  <span class="attribute">background</span>:<span class="number">#000</span>;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure></p>]]></content>
    
    <summary type="html">
    
      &lt;p&gt;&lt;img src=&quot;/2019/03/06/scss/scss.jpg&quot; alt&gt;&lt;/p&gt;
    
    </summary>
    
      <category term="前端" scheme="http://q1019736727.github.io/categories/%E5%89%8D%E7%AB%AF/"/>
    
    
      <category term="scss" scheme="http://q1019736727.github.io/tags/scss/"/>
    
  </entry>
  
  <entry>
    <title>写一个简单的事件订阅中心eventsHub</title>
    <link href="http://q1019736727.github.io/2019/03/06/eventshub/"/>
    <id>http://q1019736727.github.io/2019/03/06/eventshub/</id>
    <published>2019-03-06T01:51:50.000Z</published>
    <updated>2019-04-08T14:10:16.000Z</updated>
    
    <content type="html"><![CDATA[<p>   &emsp;在有些时候，当我们写了两个组件，当需要相互通信，该想想怎么使两个组件之间可以互相监听事件，并且能够传递obj，那下面我们用VanillaJS来实现一个简单的小demo吧。</p>   <a id="more"></a><p> <br>  </p><h5 id="首先创建一个事件对象"><a href="#首先创建一个事件对象" class="headerlink" title="首先创建一个事件对象"></a>首先创建一个事件对象</h5>   <figure class="highlight javascript"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">const</span> eventsHub = &#123;&#125;</span><br></pre></td></tr></table></figure><p>   &emsp;那么接下来创建一个事件中心用来存储事件，创建的时候最好以obj的形式，不要以array形式创建。以obj方式我们能更快以订阅事件的name快速读取里面储存的fuction。<br>   <figure class="highlight javascript"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">const</span> eventsHub = &#123;</span><br><span class="line">      <span class="comment">//用于存储事件</span></span><br><span class="line">      events:&#123;&#125;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure></p><p><br></p><h5 id="事件绑定"><a href="#事件绑定" class="headerlink" title="事件绑定"></a>事件绑定</h5><p>   &emsp;事件绑定的时候，我们需要传入对应的事件名称key，以及callback函数，然后我们再拿这个key去事件中心去寻找是否存在该事件，存在该事件就继续网里面添加callback函数，不存在将该事件初始化一个空的Array，然后将传入的callback函数push进去<br>  <figure class="highlight javascript"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br></pre></td><td class="code"><pre><span class="line">on:<span class="function"><span class="keyword">function</span> (<span class="params">bindname,fn</span>) </span>&#123;</span><br><span class="line">      <span class="keyword">if</span> (<span class="keyword">this</span>.events[bindname] === <span class="literal">undefined</span>)&#123;</span><br><span class="line">          <span class="keyword">this</span>.events[bindname] = []</span><br><span class="line">      &#125;</span><br><span class="line">      <span class="keyword">this</span>.events[bindname].push(fn)</span><br><span class="line">  &#125;</span><br></pre></td></tr></table></figure></p><p>  <br></p><h5 id="事件执行"><a href="#事件执行" class="headerlink" title="事件执行"></a>事件执行</h5><p>   &emsp;查找该执行事件的key，获取Array里面的callback函数，全部执行<br> <figure class="highlight javascript"><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">emit:<span class="function"><span class="keyword">function</span> (<span class="params">bindname,data</span>) </span>&#123;</span><br><span class="line">    <span class="keyword">if</span> (<span class="keyword">this</span>.events[bindname]) &#123;</span><br><span class="line">        <span class="keyword">this</span>.events[bindname].map(<span class="function">(<span class="params">fn</span>)=&gt;</span>&#123;</span><br><span class="line">            fn.call(<span class="literal">undefined</span>,data)</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>  <br></p><h5 id="使用"><a href="#使用" class="headerlink" title="使用"></a>使用</h5>   <figure class="highlight javascript"><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></pre></td><td class="code"><pre><span class="line"><span class="keyword">const</span> eventsHub = &#123;</span><br><span class="line">    events:&#123;&#125;,</span><br><span class="line">    <span class="comment">//执行事件</span></span><br><span class="line">    emit:<span class="function"><span class="keyword">function</span> (<span class="params">bindname,data</span>) </span>&#123;</span><br><span class="line">        <span class="keyword">if</span> (<span class="keyword">this</span>.events[bindname]) &#123;</span><br><span class="line">            <span class="keyword">this</span>.events[bindname].map(<span class="function">(<span class="params">fn</span>)=&gt;</span>&#123;</span><br><span class="line">                fn.call(<span class="literal">undefined</span>,data)</span><br><span class="line">            &#125;)</span><br><span class="line">        &#125;</span><br><span class="line">    &#125;,</span><br><span class="line">    <span class="comment">//绑定事件</span></span><br><span class="line">    on:<span class="function"><span class="keyword">function</span> (<span class="params">bindname,fn</span>) </span>&#123;</span><br><span class="line">        <span class="keyword">if</span> (<span class="keyword">this</span>.events[bindname] === <span class="literal">undefined</span>)&#123;</span><br><span class="line">            <span class="keyword">this</span>.events[bindname] = []</span><br><span class="line">        &#125;</span><br><span class="line">        <span class="keyword">this</span>.events[bindname].push(fn)</span><br><span class="line">    &#125;</span><br><span class="line">    </span><br><span class="line">&#125;</span><br><span class="line"><span class="keyword">export</span> <span class="keyword">default</span> eventsHub</span><br><span class="line"></span><br><span class="line"></span><br><span class="line"><span class="comment">//订阅</span></span><br><span class="line">eventsHub.on(<span class="string">'eventName'</span>,(res)=&gt;&#123;</span><br><span class="line">    <span class="comment">//... do something</span></span><br><span class="line">&#125;)</span><br><span class="line"></span><br><span class="line"><span class="comment">//执行</span></span><br><span class="line"> eventsHub.emit(<span class="string">'eventName'</span>,data)</span><br></pre></td></tr></table></figure>]]></content>
    
    <summary type="html">
    
      &lt;p&gt;   &amp;emsp;在有些时候，当我们写了两个组件，当需要相互通信，该想想怎么使两个组件之间可以互相监听事件，并且能够传递obj，那下面我们用VanillaJS来实现一个简单的小demo吧。&lt;/p&gt;
    
    </summary>
    
      <category term="前端" scheme="http://q1019736727.github.io/categories/%E5%89%8D%E7%AB%AF/"/>
    
    
      <category term="eventsHub" scheme="http://q1019736727.github.io/tags/eventsHub/"/>
    
  </entry>
  
  <entry>
    <title>vue仿写cnode社区</title>
    <link href="http://q1019736727.github.io/2019/03/04/cnode/"/>
    <id>http://q1019736727.github.io/2019/03/04/cnode/</id>
    <published>2019-03-04T01:41:42.000Z</published>
    <updated>2023-10-11T02:16:44.126Z</updated>
    
    <content type="html"><![CDATA[<p>  &emsp;写的一个vue小项目,接口基于cnode社区<a href="https://cnodejs.org/api" target="_blank" rel="noopener">开放接口</a>,项目使用Vue2.0实现,写了一段时间了总结一下项目，该项目未适配手机屏幕。<br>  <a href="https://github.com/q1019736727/node-Vue" target="_blank" rel="noopener">源码地址</a> | <a href="http://q1019736727.github.io/node-Vue/node-vue/dist">预览地址</a></p><h4 id="项目主体结构"><a href="#项目主体结构" class="headerlink" title="项目主体结构"></a>项目主体结构</h4><p>  &emsp;因为项目较小,就没有使用vuex,网络方面使用axios。<img src="/2019/03/04/cnode/list.jpg" alt></p>   <a id="more"></a><h4 id="axios挂载"><a href="#axios挂载" class="headerlink" title="axios挂载"></a>axios挂载</h4><p>  &emsp;一般当我们网络请求时，都需要一个网络框架，这里我选择axios。每当一个组件需要网络请求时，都需要引入axios模块，为了避免这种重复操作，可以把axios挂载到Vue的原型上</p><p>  &emsp;入口文件main.js<br> <figure class="highlight javascript"><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">import</span> Axios <span class="keyword">from</span> <span class="string">'axios'</span></span><br><span class="line"><span class="keyword">import</span> Vue <span class="keyword">from</span> <span class="string">'vue'</span></span><br><span class="line"></span><br><span class="line"><span class="comment">/*这里可以随便命名,为了方便记住,我命名$http*/</span></span><br><span class="line">Vue.prototype.$http = Axios</span><br></pre></td></tr></table></figure></p><p>   &emsp;需要使用的组件调用<br><figure class="highlight javascript"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">this</span>.$http.get(<span class="string">'...'</span>,&#123;</span><br><span class="line">          params: &#123;</span><br><span class="line">            ...params</span><br><span class="line">          &#125;</span><br><span class="line">        &#125;).then(<span class="function">(<span class="params">res</span>) =&gt;</span> &#123;</span><br><span class="line">           <span class="comment">// ... do something</span></span><br><span class="line">        &#125;).catch(<span class="function"><span class="params">error</span> =&gt;</span>&#123;</span><br><span class="line">           <span class="comment">// ... do something</span></span><br><span class="line">        &#125;)</span><br></pre></td></tr></table></figure></p><h4 id="路由配置"><a href="#路由配置" class="headerlink" title="路由配置"></a>路由配置</h4><p>  &emsp;总共5个组件模块，顶部导航栏、主页列表、详情即评论区域、个人详情、分页器<br>  详情页的数据信息因为返回的html数据形式，这里引入了一个第三方mardown文本样式<br> <figure class="highlight javascript"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">@<span class="keyword">import</span> url(<span class="string">'../assets/markdown.css'</span>);<span class="comment">//引入markdown样式</span></span><br></pre></td></tr></table></figure></p><p>   &emsp;vue-router路由配置信息<br><figure class="highlight javascript"><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></pre></td><td class="code"><pre><span class="line">Router(&#123;</span><br><span class="line">  <span class="comment">// 如果需要去掉路径上的#，model使用history模式</span></span><br><span class="line">  <span class="comment">// mode:'history',</span></span><br><span class="line">  routes: [</span><br><span class="line">    &#123;</span><br><span class="line">      name:<span class="string">'root'</span>,<span class="comment">//router-link跳转时需要使用</span></span><br><span class="line">      path:<span class="string">'/'</span>,</span><br><span class="line">      components:&#123;</span><br><span class="line">        main: Publish<span class="comment">//这里和下面命名main是因为渲染的时候(router-view 时需要用)</span></span><br><span class="line">      &#125;</span><br><span class="line">    &#125;,</span><br><span class="line">    &#123;</span><br><span class="line">      name:<span class="string">'post-detail'</span>,</span><br><span class="line">      path:<span class="string">'/topic/:id&amp;:name'</span>,<span class="comment">//需要传递参数id和name,注意在</span></span><br><span class="line">      components:&#123;</span><br><span class="line">        main: Postdetail,</span><br><span class="line">        slider: Slider</span><br><span class="line">      &#125;</span><br><span class="line">    &#125;,</span><br><span class="line">    &#123;</span><br><span class="line">      name:<span class="string">'user-page'</span>,</span><br><span class="line">      path:<span class="string">'/user/:username'</span>,</span><br><span class="line">      components:&#123;</span><br><span class="line">        main:Userinfo</span><br><span class="line">      &#125;</span><br><span class="line">    &#125;,</span><br><span class="line"></span><br><span class="line">  ]</span><br><span class="line">&#125;)</span><br></pre></td></tr></table></figure></p><h4 id="分页器的实现"><a href="#分页器的实现" class="headerlink" title="分页器的实现"></a>分页器的实现</h4><p>   &emsp;在主页的底部，我们需要一个分页器。首先我们要理清需求，做一个最多显示5页的分页器，当大于5页的时候，前面显示省略号，页数也都加1，当页数小于5时，前面的省略号消失。</p><p>   &emsp;大体效果如下<br>   <img src="/2019/03/04/cnode/page.gif" alt></p><p>   &emsp;首先我们构建一个分页容器,其中<strong>ismore</strong>用于判断是否显示前边的省略号，<strong>selectIndex</strong>用于判断当前选中页数<br> <figure class="highlight html"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br></pre></td><td class="code"><pre><span class="line"><span class="tag">&lt;<span class="name">div</span> <span class="attr">class</span>=<span class="string">"page-wrapper"</span>&gt;</span></span><br><span class="line">  <span class="tag">&lt;<span class="name">button</span> @<span class="attr">click</span>=<span class="string">"changeBtn"</span>&gt;</span>首页<span class="tag">&lt;/<span class="name">button</span>&gt;</span></span><br><span class="line">  <span class="tag">&lt;<span class="name">button</span> @<span class="attr">click</span>=<span class="string">"changeBtn"</span>&gt;</span>上一页<span class="tag">&lt;/<span class="name">button</span>&gt;</span></span><br><span class="line">  <span class="tag">&lt;<span class="name">button</span> <span class="attr">v-show</span>=<span class="string">"ismore"</span>&gt;</span>......<span class="tag">&lt;/<span class="name">button</span>&gt;</span></span><br><span class="line">  <span class="tag">&lt;<span class="name">button</span> @<span class="attr">click</span>=<span class="string">"changeBtn(item)"</span> <span class="attr">v-for</span>=<span class="string">"item in Pages"</span> <span class="attr">:class</span>=<span class="string">"&#123;active: selectIndex === item&#125;"</span>&gt;</span>&#123;&#123;item&#125;&#125;<span class="tag">&lt;/<span class="name">button</span>&gt;</span></span><br><span class="line">  <span class="tag">&lt;<span class="name">button</span> @<span class="attr">click</span>=<span class="string">"changeBtn"</span>&gt;</span>下一页<span class="tag">&lt;/<span class="name">button</span>&gt;</span></span><br><span class="line"><span class="tag">&lt;/<span class="name">div</span>&gt;</span></span><br></pre></td></tr></table></figure></p><p>   &emsp;初始数据值<br><figure class="highlight javascript"><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">data:<span class="function"><span class="keyword">function</span>(<span class="params"></span>) </span>&#123;</span><br><span class="line">  <span class="keyword">return</span>&#123;</span><br><span class="line">    Pages:[<span class="number">1</span>,<span class="number">2</span>,<span class="number">3</span>,<span class="number">4</span>,<span class="number">5</span>,<span class="string">'......'</span>],<span class="comment">//初始页数</span></span><br><span class="line">    selectIndex:<span class="number">1</span>,<span class="comment">//初始选中状态</span></span><br><span class="line">    ismore:<span class="literal">false</span><span class="comment">//是否显示前面的......</span></span><br><span class="line">  &#125;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure></p><p>  &emsp; 按钮点击逻辑处理<br><figure class="highlight javascript"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br></pre></td><td class="code"><pre><span class="line">changeBtn(page)&#123;</span><br><span class="line">       <span class="comment">//过滤点击省略号事件</span></span><br><span class="line">       <span class="keyword">if</span> (<span class="keyword">typeof</span> page !== <span class="string">'number'</span>) &#123;</span><br><span class="line">         <span class="keyword">if</span> (<span class="keyword">typeof</span> page === <span class="string">'string'</span>)&#123;</span><br><span class="line">           <span class="keyword">return</span></span><br><span class="line">         &#125;</span><br><span class="line">         <span class="keyword">let</span> str = page.currentTarget.innerText</span><br><span class="line">         <span class="keyword">switch</span> (str) &#123;</span><br><span class="line">           <span class="keyword">case</span> <span class="string">'首页'</span>:</span><br><span class="line">             <span class="keyword">this</span>.Pages = [<span class="number">1</span>,<span class="number">2</span>,<span class="number">3</span>,<span class="number">4</span>,<span class="number">5</span>,<span class="string">'......'</span>];</span><br><span class="line">             <span class="keyword">this</span>.changeBtn(<span class="number">1</span>);</span><br><span class="line">             <span class="keyword">break</span></span><br><span class="line">           <span class="keyword">case</span> <span class="string">'上一页'</span>:</span><br><span class="line">             <span class="keyword">this</span>.$jq(<span class="string">'button.active'</span>).prev().click()</span><br><span class="line">             <span class="keyword">break</span></span><br><span class="line">           <span class="keyword">case</span> <span class="string">'下一页'</span>:</span><br><span class="line">             <span class="keyword">this</span>.$jq(<span class="string">'button.active'</span>).next().click()</span><br><span class="line">             <span class="keyword">break</span></span><br><span class="line">         &#125;</span><br><span class="line">         <span class="keyword">return</span></span><br><span class="line">       &#125;</span><br><span class="line">       <span class="keyword">this</span>.selectIndex = page;</span><br><span class="line">       <span class="keyword">if</span>(page&gt;<span class="number">4</span>)&#123;<span class="comment">//判断是否显示省略号</span></span><br><span class="line">         <span class="keyword">this</span>.ismore = <span class="literal">true</span>;</span><br><span class="line">       &#125;<span class="keyword">else</span>&#123;</span><br><span class="line">         <span class="keyword">this</span>.ismore = <span class="literal">false</span>;</span><br><span class="line">       &#125;</span><br><span class="line">       <span class="comment">//页码状态处理</span></span><br><span class="line">       <span class="keyword">if</span>(page == <span class="keyword">this</span>.Pages[<span class="number">4</span>] )&#123;</span><br><span class="line">         <span class="keyword">this</span>.Pages.shift();</span><br><span class="line">         <span class="keyword">this</span>.Pages.splice(<span class="number">4</span>,<span class="number">0</span>,<span class="keyword">this</span>.Pages[<span class="number">3</span>]+<span class="number">1</span>);</span><br><span class="line">       &#125;<span class="keyword">else</span> <span class="keyword">if</span>(page == <span class="keyword">this</span>.Pages[<span class="number">0</span>] &amp;&amp; page !=<span class="number">1</span>)&#123;</span><br><span class="line">         <span class="keyword">this</span>.Pages.unshift(<span class="keyword">this</span>.Pages[<span class="number">0</span>]<span class="number">-1</span>);</span><br><span class="line">         <span class="keyword">this</span>.Pages.splice(<span class="number">5</span>,<span class="number">1</span>);</span><br><span class="line">       &#125;</span><br><span class="line">       <span class="comment">//通知主页按钮已经点击，实时更新数据</span></span><br><span class="line">       <span class="keyword">this</span>.$emit(<span class="string">'changePage'</span>,page)</span><br><span class="line">     &#125;</span><br></pre></td></tr></table></figure></p><h4 id="总结"><a href="#总结" class="headerlink" title="总结"></a>总结</h4><p>   &emsp;总的说来，这是一个非常适合练手的项目，逻辑简单明了，页面逻辑也不是很复杂，可能其中还有些没讲到，不过可以下载源码在细致看一下，上面这些是我大致认为该项目还比较重要的内容，以此做个记录</p>]]></content>
    
    <summary type="html">
    
      &lt;p&gt;  &amp;emsp;写的一个vue小项目,接口基于cnode社区&lt;a href=&quot;https://cnodejs.org/api&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;开放接口&lt;/a&gt;,项目使用Vue2.0实现,写了一段时间了总结一下项目，该项目未适配手机屏幕。&lt;br&gt;  &lt;a href=&quot;https://github.com/q1019736727/node-Vue&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;源码地址&lt;/a&gt; | &lt;a href=&quot;http://q1019736727.github.io/node-Vue/node-vue/dist&quot;&gt;预览地址&lt;/a&gt;&lt;/p&gt;
&lt;h4 id=&quot;项目主体结构&quot;&gt;&lt;a href=&quot;#项目主体结构&quot; class=&quot;headerlink&quot; title=&quot;项目主体结构&quot;&gt;&lt;/a&gt;项目主体结构&lt;/h4&gt;&lt;p&gt;  &amp;emsp;因为项目较小,就没有使用vuex,网络方面使用axios。&lt;img src=&quot;/2019/03/04/cnode/list.jpg&quot; alt&gt;&lt;/p&gt;
    
    </summary>
    
      <category term="前端" scheme="http://q1019736727.github.io/categories/%E5%89%8D%E7%AB%AF/"/>
    
    
      <category term="vue" scheme="http://q1019736727.github.io/tags/vue/"/>
    
  </entry>
  
  <entry>
    <title>hello world</title>
    <link href="http://q1019736727.github.io/2019/02/27/hello-world/"/>
    <id>http://q1019736727.github.io/2019/02/27/hello-world/</id>
    <published>2019-02-27T03:36:51.000Z</published>
    <updated>2019-04-08T14:10:16.000Z</updated>
    
    <content type="html"><![CDATA[<p><img src="/2019/02/27/hello-world/SwiftJs.png" alt></p>]]></content>
    
    <summary type="html">
    
      
      
        &lt;p&gt;&lt;img src=&quot;/2019/02/27/hello-world/SwiftJs.png&quot; alt&gt;&lt;/p&gt;

      
    
    </summary>
    
    
  </entry>
  
</feed>
