碧波飘萍 發表於 2019-7-7 19:41:00

微信小程序之组件开发中的基础知识

<p>  跟着视频开始小程序的项目的开发,视频中这个小程序已经上线了,可以很好的看着小程序的界面进行开发,昨天看了一下具体的需求,觉得真的细节好多啊,而且其中设计的组件的思想也是很好的,能够很好的实现代码的复用,实现代码的解耦合,这个视频讲解的是真的好,好好学习一下。</p>
<p><span style="font-size: 16px"><strong>组件component开发</strong></span></p>
<p>  小程序中的大部分的页面其实都是由组件来组合起来的,所以开发适合需求的组件是非常重要的,来进行组件的开发。</p>
<p><strong>(1)在与pages同级目录下创建components文件目录,来存放所有需要进行开发的组件</strong></p>
<p><img src="https://img2018.cnblogs.com/blog/1095081/201907/1095081-20190706091554178-1512028481.png"></p>
<p><strong>(2)之后在components文件夹下面进行组件的创建,首先也是创建一个空的文件夹,然后在创建components组件</strong></p>
<p><img src="https://img2018.cnblogs.com/blog/1095081/201907/1095081-20190706091836046-311380044.png"></p>
<p><strong>(3)页面中如何引用组件</strong></p>
<p>在静态页面中的json文件下进行组件的引用,例如:可以在classic文件夹中的classid.wxml文件中使用like组件,可以这样做:</p>
<p>在classic文件夹下的classic.json文件中引入组件的路径</p>
<p><img src="https://img2018.cnblogs.com/blog/1095081/201907/1095081-20190706093132426-828883856.png"></p>
<p><img src="https://img2018.cnblogs.com/blog/1095081/201907/1095081-20190706093629546-1015292886.png"></p>
<p>这个路径是有问题的,所以没法显示,很显然,这里使用的是相对路径,如果使用绝对路径就没问题了:"v-like":"/components/like/index"</p>
<p>在页面中使用组件,在classic.wxml文件中使用v-like组件</p>
<p>&nbsp;<img src="https://img2018.cnblogs.com/blog/1095081/201907/1095081-20190706093902087-345866355.png"></p>
<p><strong>(4)静态图片文件夹的创建</strong></p>
<p>注意:这里需要创建images文件夹,可以直接在组件中创建文件夹,只供组件来使用,也可以在components文件夹下面创建images文件夹,所有的组件共用一个images文件夹,同时创建pages同级images文件夹,供pages中页面使用</p>
<p><img src="https://img2018.cnblogs.com/blog/1095081/201907/1095081-20190706165949552-1494012223.png"></p>
<p><strong>(5)组件中image组件的使用</strong></p>
<p>image组件的官方文档:</p>
<p>https://developers.weixin.qq.com/miniprogram/dev/component/image.html</p>
<p>&nbsp;注意:</p>
<p>在小程序的关于尺寸的单位,一种是px,一种是rpx。其中rpx是和我们平常页面开发中的px是一致的,但是px是平常开发的px的二倍,也就是在小程序中px是rpx的二倍的关系,这个原则只限于在iPhone6这种机型下面才试用,其他机型不一定是2倍的关系,这里还有一点,就是rpx是自适应的,绝大多数情况下都可以使用的,但是有些地方还是需要选择的,必须说是字体的大小,可能就不需要自适应,设计成固定大小的字体</p>
<p><strong>(6)设置全局样式</strong></p>
<p>这个需要新建全局样式文件,例如可以在根目录新建一个app.wxss的样式文件来作为全局样式文件</p>
<p><img src="https://img2018.cnblogs.com/blog/1095081/201907/1095081-20190706180818176-42596005.png"></p>
<p>打开调试器可以看到,小程序会自动添加page标签的,所以可以设置page标签的样式,组件中的样式也会变化!</p>
<p>注意:并不是所有的全局样式对组件都起作用,只有很少的css样式是可以从全局样式中继承的,但是在页面中是可以继承的,classic.wxml页面文件中是可以继承app.wxss文件中的样式的,具体的文档如下:组件样式下面有详细介绍</p>
<p>https://developers.weixin.qq.com/miniprogram/dev/framework/custom-component/wxml-wxss.html</p>
<p><img src="https://img2018.cnblogs.com/blog/1095081/201907/1095081-20190706181559224-2021315134.png"></p>
<p><strong>(7)设置组件的自定义宽度</strong></p>
<div>display: inline-flex;可以直接使用display的inline-flex的值来设置组件的自适应宽度</div>
<div><strong>(8)事件的触发</strong></div>
<div>官方的文档中有详细介绍:</div>
<div>https://developers.weixin.qq.com/miniprogram/dev/framework/view/wxml/event.html#%E4%BA%8B%E4%BB%B6%E8%AF%A6%E8%A7%A3</div>
<div>这里主要使用到的是手指触摸事件,也就是通常PC端的点击事件具体的写法,是在js文件中来写事件的逻辑代码的</div>
<div>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> wxml中</span>
&lt;view bind:tap="onLike" class="container"&gt;
&lt;image src="images/like.png" /&gt;
&lt;text&gt;999&lt;/text&gt;
&lt;/view&gt;

<span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> js中 这个是需要写在methods中的</span>
<span style="color: rgba(0, 128, 0, 1)">/*</span><span style="color: rgba(0, 128, 0, 1)">*
   * 组件的方法列表
   </span><span style="color: rgba(0, 128, 0, 1)">*/</span><span style="color: rgba(0, 0, 0, 1)">
methods: {
    onLike:</span><span style="color: rgba(0, 0, 255, 1)">function</span><span style="color: rgba(0, 0, 0, 1)">(event){
      console.log(event);
    }
}</span></pre>
</div>
<p><strong>(9)三元表达式</strong></p>
<p>这个就要涉及到js中的逻辑代码的编写了,看看三元运算符的格式,来实现一个数据的切换</p>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 128, 128, 1)"> 1</span> &lt;!--三元运算符的使用--&gt;
<span style="color: rgba(0, 128, 128, 1)"> 2</span> &lt;view bind:tap="onLike" class="container"&gt;
<span style="color: rgba(0, 128, 128, 1)"> 3</span>   &lt;image src="{{like?yesSrc:noSrc}}" /&gt;
<span style="color: rgba(0, 128, 128, 1)"> 4</span>   &lt;text&gt;{{like?count1:count2}}&lt;/text&gt;
<span style="color: rgba(0, 128, 128, 1)"> 5</span> &lt;/view&gt;
<span style="color: rgba(0, 128, 128, 1)"> 6</span>
<span style="color: rgba(0, 128, 128, 1)"> 7</span> &lt;!--数据是需要定义在js中的,其中data是专门来存放数据变量的--&gt;
<span style="color: rgba(0, 128, 128, 1)"> 8</span>   <span style="color: rgba(0, 128, 0, 1)">/*</span><span style="color: rgba(0, 128, 0, 1)">*
</span><span style="color: rgba(0, 128, 128, 1)"> 9</span> <span style="color: rgba(0, 128, 0, 1)">   * 组件的初始数据
</span><span style="color: rgba(0, 128, 128, 1)">10</span>    <span style="color: rgba(0, 128, 0, 1)">*/</span>
<span style="color: rgba(0, 128, 128, 1)">11</span> <span style="color: rgba(0, 0, 0, 1)">data: {
</span><span style="color: rgba(0, 128, 128, 1)">12</span>   like:<span style="color: rgba(0, 0, 255, 1)">false</span><span style="color: rgba(0, 0, 0, 1)">,
</span><span style="color: rgba(0, 128, 128, 1)">13</span>   count1:9<span style="color: rgba(0, 0, 0, 1)">,
</span><span style="color: rgba(0, 128, 128, 1)">14</span>   count2:99<span style="color: rgba(0, 0, 0, 1)">,
</span><span style="color: rgba(0, 128, 128, 1)">15</span>   yesSrc:'images/like.png'<span style="color: rgba(0, 0, 0, 1)">,
</span><span style="color: rgba(0, 128, 128, 1)">16</span>   noSrc:'images/like@dis.png'
<span style="color: rgba(0, 128, 128, 1)">17</span>   },</pre>
</div>
<p>&nbsp;<strong>(10)组件的封装性和开放性</strong></p>
<p>组件的封装肯定要好坏之分,那么什么是决定组件封装的好坏,也就是让人感觉很好用,让人用着舒服呢?视频中的老师说的是:</p>
<p>1)你是要思考什么数据是封装到组件中的,而什么数据是开放出来的</p>
<p>2)关于粒度的问题</p>
<p>粒度在这里就是指的是封装的组件的难易程度以及组件的功能的强大与否</p>
<p><strong>(11)js文件中properties属性列表的设置</strong></p>
<p>这个是主要来设置用到的变量的类型以及初始值,还有一个observer属性的,在开发中可以把对外开放的数据来在这里进行定义,同样页面中是用{{}}语法来取值</p>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 128, 0, 1)">/*</span><span style="color: rgba(0, 128, 0, 1)">*
   * 组件的属性列表
   </span><span style="color: rgba(0, 128, 0, 1)">*/</span><span style="color: rgba(0, 0, 0, 1)">
properties: {
    like:{
      type:Boolean, </span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 设置变量类型必填</span>
      value:<span style="color: rgba(0, 0, 255, 1)">false</span>, <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">设置默认值 选填</span>
      observer:<span style="color: rgba(0, 0, 255, 1)">function</span>(){ <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 选填</span>
<span style="color: rgba(0, 0, 0, 1)">
      }
    },
    count:{
      type:Number
    }
},</span></pre>
</div>
<p><strong>(12)属性在methods中的应用</strong></p>
<p>直接看代码吧,这个和之前的各种语言的用法道理是一样的</p>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 128, 128, 1)"> 1</span>   <span style="color: rgba(0, 128, 0, 1)">/*</span><span style="color: rgba(0, 128, 0, 1)">*
</span><span style="color: rgba(0, 128, 128, 1)"> 2</span> <span style="color: rgba(0, 128, 0, 1)">   * 组件的方法列表
</span><span style="color: rgba(0, 128, 128, 1)"> 3</span>    <span style="color: rgba(0, 128, 0, 1)">*/</span>
<span style="color: rgba(0, 128, 128, 1)"> 4</span> <span style="color: rgba(0, 0, 0, 1)">methods: {
</span><span style="color: rgba(0, 128, 128, 1)"> 5</span>   onLike:<span style="color: rgba(0, 0, 255, 1)">function</span><span style="color: rgba(0, 0, 0, 1)">(event){
</span><span style="color: rgba(0, 128, 128, 1)"> 6</span>       <span style="color: rgba(0, 0, 255, 1)">var</span> like = <span style="color: rgba(0, 0, 255, 1)">this</span>.properties.like; <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 用变量来接收属性的值</span>
<span style="color: rgba(0, 128, 128, 1)"> 7</span>       <span style="color: rgba(0, 0, 255, 1)">var</span> count = <span style="color: rgba(0, 0, 255, 1)">this</span><span style="color: rgba(0, 0, 0, 1)">.properties.count;
</span><span style="color: rgba(0, 128, 128, 1)"> 8</span>
<span style="color: rgba(0, 128, 128, 1)"> 9</span>       count = like?count-1:count+1<span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 128, 128, 1)">10</span>       <span style="color: rgba(0, 0, 255, 1)">this</span>.setData({ <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 变量赋值之后需要重新设置Data的值</span>
<span style="color: rgba(0, 128, 128, 1)">11</span> <span style="color: rgba(0, 0, 0, 1)">      count:count,
</span><span style="color: rgba(0, 128, 128, 1)">12</span>         like:!<span style="color: rgba(0, 0, 0, 1)">like
</span><span style="color: rgba(0, 128, 128, 1)">13</span> <span style="color: rgba(0, 0, 0, 1)">      })
</span><span style="color: rgba(0, 128, 128, 1)">14</span> <span style="color: rgba(0, 0, 0, 1)">    }
</span><span style="color: rgba(0, 128, 128, 1)">15</span>   }</pre>
</div>
<p><strong>(13)从服务器获取数据</strong></p>
<p>这个主要是调用接口,从服务器上获取数据的方式,很苦恼,并没有权限从老师搭建的后台服务器上获取数据,我没有购买慕课网上的课程,没有办法获取到那个特殊的开发者key,这里只是记录一下获取数据的方法以及数据如何处理</p>
<p>官方的文档来学习一下:</p>
<p>https://developers.weixin.qq.com/miniprogram/dev/api/network/request/wx.request.html</p>
<p>看看代码:</p>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 128, 128, 1)"> 1</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 这个是在classic.js中</span>
<span style="color: rgba(0, 128, 128, 1)"> 2</span><span style="color: rgba(0, 128, 0, 1)">/*</span><span style="color: rgba(0, 128, 0, 1)">*
</span><span style="color: rgba(0, 128, 128, 1)"> 3</span> <span style="color: rgba(0, 128, 0, 1)">   * 生命周期函数--监听页面加载
</span><span style="color: rgba(0, 128, 128, 1)"> 4</span>    <span style="color: rgba(0, 128, 0, 1)">*/</span>
<span style="color: rgba(0, 128, 128, 1)"> 5</span>   onLoad: <span style="color: rgba(0, 0, 255, 1)">function</span><span style="color: rgba(0, 0, 0, 1)"> (options) {
</span><span style="color: rgba(0, 128, 128, 1)"> 6</span> <span style="color: rgba(0, 0, 0, 1)">    wx.request({
</span><span style="color: rgba(0, 128, 128, 1)"> 7</span>       url: 'http://bl.7yue.pro/v1/classic/latest'<span style="color: rgba(0, 0, 0, 1)">,
</span><span style="color: rgba(0, 128, 128, 1)"> 8</span> <span style="color: rgba(0, 0, 0, 1)">      header: {
</span><span style="color: rgba(0, 128, 128, 1)"> 9</span>         appKey:'K0LDaSADSDLWWbF'
<span style="color: rgba(0, 128, 128, 1)">10</span> <span style="color: rgba(0, 0, 0, 1)">      },
</span><span style="color: rgba(0, 128, 128, 1)">11</span>       success:<span style="color: rgba(0, 0, 255, 1)">function</span><span style="color: rgba(0, 0, 0, 1)">(){
</span><span style="color: rgba(0, 128, 128, 1)">12</span>         <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">返回结果成功之后 数据的处理</span>
<span style="color: rgba(0, 128, 128, 1)">13</span> <span style="color: rgba(0, 0, 0, 1)">      }
</span><span style="color: rgba(0, 128, 128, 1)">14</span> <span style="color: rgba(0, 0, 0, 1)">    })
</span><span style="color: rgba(0, 128, 128, 1)">15</span> <span style="color: rgba(0, 0, 0, 1)">},
</span><span style="color: rgba(0, 128, 128, 1)">16</span>
<span style="color: rgba(0, 128, 128, 1)">17</span> <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> ES6中箭头函数的写法</span>
<span style="color: rgba(0, 128, 128, 1)">18</span>   <span style="color: rgba(0, 128, 0, 1)">/*</span><span style="color: rgba(0, 128, 0, 1)">*
</span><span style="color: rgba(0, 128, 128, 1)">19</span> <span style="color: rgba(0, 128, 0, 1)">   * 生命周期函数--监听页面加载
</span><span style="color: rgba(0, 128, 128, 1)">20</span>    <span style="color: rgba(0, 128, 0, 1)">*/</span>
<span style="color: rgba(0, 128, 128, 1)">21</span>   onLoad: <span style="color: rgba(0, 0, 255, 1)">function</span><span style="color: rgba(0, 0, 0, 1)"> (options) {
</span><span style="color: rgba(0, 128, 128, 1)">22</span>   console.log(<span style="color: rgba(0, 0, 255, 1)">this</span><span style="color: rgba(0, 0, 0, 1)">.data.test)
</span><span style="color: rgba(0, 128, 128, 1)">23</span> <span style="color: rgba(0, 0, 0, 1)">    wx.request({
</span><span style="color: rgba(0, 128, 128, 1)">24</span>       url: 'http://bl.7yue.pro/v1/classic/latest'<span style="color: rgba(0, 0, 0, 1)">,
</span><span style="color: rgba(0, 128, 128, 1)">25</span> <span style="color: rgba(0, 0, 0, 1)">      header: {
</span><span style="color: rgba(0, 128, 128, 1)">26</span>         appKey:'K0LDaSADSDLWWbF'
<span style="color: rgba(0, 128, 128, 1)">27</span> <span style="color: rgba(0, 0, 0, 1)">      },
</span><span style="color: rgba(0, 128, 128, 1)">28</span>       success:(res)=&gt;<span style="color: rgba(0, 0, 0, 1)">{
</span><span style="color: rgba(0, 128, 128, 1)">29</span>         <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">返回结果成功之后 数据的处理</span>
<span style="color: rgba(0, 128, 128, 1)">30</span>         console.log(<span style="color: rgba(0, 0, 255, 1)">this</span><span style="color: rgba(0, 0, 0, 1)">.data.test);
</span><span style="color: rgba(0, 128, 128, 1)">31</span> <span style="color: rgba(0, 0, 0, 1)">      }
</span><span style="color: rgba(0, 128, 128, 1)">32</span> <span style="color: rgba(0, 0, 0, 1)">    })
</span><span style="color: rgba(0, 128, 128, 1)">33</span>   },</pre>
</div>
<p><strong>(14)代码优化</strong></p>
<p>这个主要是来优化请求的接口的方法的,我们把一些通用的数据抽离出来,来写成公共的方法,供许多模块来一起调用</p>
<p><img src="https://img2018.cnblogs.com/blog/1095081/201907/1095081-20190707171610293-1705660300.png"></p>
<p>在http.js中来封装wx.request</p>
<p>具体的config.js中代码:</p>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 128, 128, 1)"> 1</span> <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> const关键字是声明不变的值的时候来用的,相当于Java中静态变量</span>
<span style="color: rgba(0, 128, 128, 1)"> 2</span> export const config =<span style="color: rgba(0, 0, 0, 1)"> {
</span><span style="color: rgba(0, 128, 128, 1)"> 3</span>   api_base_url:'http://bl.7yue.pro/v1/'<span style="color: rgba(0, 0, 0, 1)">,
</span><span style="color: rgba(0, 128, 128, 1)"> 4</span>   appKey:'K0LDaSADSDLWWbF'
<span style="color: rgba(0, 128, 128, 1)"> 5</span> <span style="color: rgba(0, 0, 0, 1)">}
</span><span style="color: rgba(0, 128, 128, 1)"> 6</span>
<span style="color: rgba(0, 128, 128, 1)"> 7</span> <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 导出function函数方法</span>
<span style="color: rgba(0, 128, 128, 1)"> 8</span> export let fun1 = <span style="color: rgba(0, 0, 255, 1)">function</span><span style="color: rgba(0, 0, 0, 1)">(){
</span><span style="color: rgba(0, 128, 128, 1)"> 9</span>
<span style="color: rgba(0, 128, 128, 1)">10</span> <span style="color: rgba(0, 0, 0, 1)">}
</span><span style="color: rgba(0, 128, 128, 1)">11</span>
<span style="color: rgba(0, 128, 128, 1)">12</span> <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> export {const, fun1} 这种写法就不用每一个都写export关键字了</span></pre>
</div>
<p>http.js中代码:</p>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 128, 128, 1)"> 1</span> <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 导入的时候需要使用相对路径</span>
<span style="color: rgba(0, 128, 128, 1)"> 2</span> import {config} from '../config.js'<span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 128, 128, 1)"> 3</span>
<span style="color: rgba(0, 128, 128, 1)"> 4</span> <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 错误的具体的提示信息 根据接口中error_code</span>
<span style="color: rgba(0, 128, 128, 1)"> 5</span> const tips =<span style="color: rgba(0, 0, 0, 1)"> {
</span><span style="color: rgba(0, 128, 128, 1)"> 6</span>   1:'抱歉,出现了一个错误'<span style="color: rgba(0, 0, 0, 1)">,
</span><span style="color: rgba(0, 128, 128, 1)"> 7</span>   1005:'appKey不正确'<span style="color: rgba(0, 0, 0, 1)">,
</span><span style="color: rgba(0, 128, 128, 1)"> 8</span>   3000:'期刊不存在'
<span style="color: rgba(0, 128, 128, 1)"> 9</span> <span style="color: rgba(0, 0, 0, 1)">}
</span><span style="color: rgba(0, 128, 128, 1)">10</span>
<span style="color: rgba(0, 128, 128, 1)">11</span> <span style="color: rgba(0, 0, 0, 1)">class HTTP{
</span><span style="color: rgba(0, 128, 128, 1)">12</span> <span style="color: rgba(0, 0, 0, 1)">request(params){
</span><span style="color: rgba(0, 128, 128, 1)">13</span>   <span style="color: rgba(0, 0, 255, 1)">if</span>(!<span style="color: rgba(0, 0, 0, 1)">params.method){
</span><span style="color: rgba(0, 128, 128, 1)">14</span>       params.method = 'GET'<span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 128, 128, 1)">15</span> <span style="color: rgba(0, 0, 0, 1)">    }
</span><span style="color: rgba(0, 128, 128, 1)">16</span> <span style="color: rgba(0, 0, 0, 1)">    wx.request({
</span><span style="color: rgba(0, 128, 128, 1)">17</span>       url: config.api_base_url +<span style="color: rgba(0, 0, 0, 1)"> params.url,
</span><span style="color: rgba(0, 128, 128, 1)">18</span> <span style="color: rgba(0, 0, 0, 1)">      method:params.method,
</span><span style="color: rgba(0, 128, 128, 1)">19</span> <span style="color: rgba(0, 0, 0, 1)">      data:params.data,
</span><span style="color: rgba(0, 128, 128, 1)">20</span> <span style="color: rgba(0, 0, 0, 1)">      header:{
</span><span style="color: rgba(0, 128, 128, 1)">21</span>         'content-type':'application/json'<span style="color: rgba(0, 0, 0, 1)">,
</span><span style="color: rgba(0, 128, 128, 1)">22</span> <span style="color: rgba(0, 0, 0, 1)">      appKey:config.params
</span><span style="color: rgba(0, 128, 128, 1)">23</span> <span style="color: rgba(0, 0, 0, 1)">      },
</span><span style="color: rgba(0, 128, 128, 1)">24</span>       success:(res) =&gt;<span style="color: rgba(0, 0, 0, 1)"> {
</span><span style="color: rgba(0, 128, 128, 1)">25</span>         <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 来判断请求是否成功 以2开头就是成功 这个是在Number类型的,          // 需要装换成string类型</span>
<span style="color: rgba(0, 128, 128, 1)">26</span>         <span style="color: rgba(0, 0, 255, 1)">var</span> code =<span style="color: rgba(0, 0, 0, 1)"> res.statusCode.toString();
</span><span style="color: rgba(0, 128, 128, 1)">27</span>         <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> ES6中 startsWith 和 endsWith</span>
<span style="color: rgba(0, 128, 128, 1)">28</span>         <span style="color: rgba(0, 0, 255, 1)">if</span>(code.startsWith('2'<span style="color: rgba(0, 0, 0, 1)">)){
</span><span style="color: rgba(0, 128, 128, 1)">29</span> <span style="color: rgba(0, 0, 0, 1)">          params.sucess(res.data);
</span><span style="color: rgba(0, 128, 128, 1)">30</span>         }<span style="color: rgba(0, 0, 255, 1)">else</span><span style="color: rgba(0, 0, 0, 1)">{
</span><span style="color: rgba(0, 128, 128, 1)">31</span>         <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 错误信息的提示</span>
<span style="color: rgba(0, 128, 128, 1)">32</span>         <span style="color: rgba(0, 0, 255, 1)">var</span> error_code =<span style="color: rgba(0, 0, 0, 1)"> res.data.error_code;
</span><span style="color: rgba(0, 128, 128, 1)">33</span>         <span style="color: rgba(0, 0, 255, 1)">this</span><span style="color: rgba(0, 0, 0, 1)">._show_error(error_code);
</span><span style="color: rgba(0, 128, 128, 1)">34</span> <span style="color: rgba(0, 0, 0, 1)">      }
</span><span style="color: rgba(0, 128, 128, 1)">35</span> <span style="color: rgba(0, 0, 0, 1)">      },
</span><span style="color: rgba(0, 128, 128, 1)">36</span>       fail:(err) =&gt;<span style="color: rgba(0, 0, 0, 1)"> {
</span><span style="color: rgba(0, 128, 128, 1)">37</span>         <span style="color: rgba(0, 0, 255, 1)">this</span>.error_code(1<span style="color: rgba(0, 0, 0, 1)">);
</span><span style="color: rgba(0, 128, 128, 1)">38</span> <span style="color: rgba(0, 0, 0, 1)">      }
</span><span style="color: rgba(0, 128, 128, 1)">39</span> <span style="color: rgba(0, 0, 0, 1)">    })
</span><span style="color: rgba(0, 128, 128, 1)">40</span> <span style="color: rgba(0, 0, 0, 1)">}
</span><span style="color: rgba(0, 128, 128, 1)">41</span>
<span style="color: rgba(0, 128, 128, 1)">42</span>   <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 错误信息的提示方法</span>
<span style="color: rgba(0, 128, 128, 1)">43</span> <span style="color: rgba(0, 0, 0, 1)">_show_error(error_code){
</span><span style="color: rgba(0, 128, 128, 1)">44</span>   <span style="color: rgba(0, 0, 255, 1)">if</span>(!<span style="color: rgba(0, 0, 0, 1)">error_code){
</span><span style="color: rgba(0, 128, 128, 1)">45</span>       error_code = 1<span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 128, 128, 1)">46</span> <span style="color: rgba(0, 0, 0, 1)">    }
</span><span style="color: rgba(0, 128, 128, 1)">47</span> <span style="color: rgba(0, 0, 0, 1)">    wx.showToast({
</span><span style="color: rgba(0, 128, 128, 1)">48</span> <span style="color: rgba(0, 0, 0, 1)">      title: tips,
</span><span style="color: rgba(0, 128, 128, 1)">49</span>       icon: 'none'<span style="color: rgba(0, 0, 0, 1)">,
</span><span style="color: rgba(0, 128, 128, 1)">50</span>       duration: 2000
<span style="color: rgba(0, 128, 128, 1)">51</span> <span style="color: rgba(0, 0, 0, 1)">    })
</span><span style="color: rgba(0, 128, 128, 1)">52</span> <span style="color: rgba(0, 0, 0, 1)">}
</span><span style="color: rgba(0, 128, 128, 1)">53</span> <span style="color: rgba(0, 0, 0, 1)">}
</span><span style="color: rgba(0, 128, 128, 1)">54</span>
<span style="color: rgba(0, 128, 128, 1)">55</span> <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 使得类外部可以访问</span>
<span style="color: rgba(0, 128, 128, 1)">56</span> export {HTTP}</pre>
</div>
<p>classic.js中代码的优化,主要是优化的request请求的封装方法</p>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 128, 128, 1)"> 1</span> <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 这里导入的时候需要写成相对路径</span>
<span style="color: rgba(0, 128, 128, 1)"> 2</span> import {HTTP} from '../../util/http.js'<span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 128, 128, 1)"> 3</span>
<span style="color: rgba(0, 128, 128, 1)"> 4</span> <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 实例化HTTP类</span>
<span style="color: rgba(0, 128, 128, 1)"> 5</span> <span style="color: rgba(0, 0, 255, 1)">var</span> http = <span style="color: rgba(0, 0, 255, 1)">new</span><span style="color: rgba(0, 0, 0, 1)"> HTTP();
</span><span style="color: rgba(0, 128, 128, 1)"> 6</span>
<span style="color: rgba(0, 128, 128, 1)"> 7</span> <span style="color: rgba(0, 0, 0, 1)">Page({
</span><span style="color: rgba(0, 128, 128, 1)"> 8</span>
<span style="color: rgba(0, 128, 128, 1)"> 9</span>   <span style="color: rgba(0, 128, 0, 1)">/*</span><span style="color: rgba(0, 128, 0, 1)">*
</span><span style="color: rgba(0, 128, 128, 1)">10</span> <span style="color: rgba(0, 128, 0, 1)">   * 页面的初始数据
</span><span style="color: rgba(0, 128, 128, 1)">11</span>    <span style="color: rgba(0, 128, 0, 1)">*/</span>
<span style="color: rgba(0, 128, 128, 1)">12</span> <span style="color: rgba(0, 0, 0, 1)">data: {
</span><span style="color: rgba(0, 128, 128, 1)">13</span>   
<span style="color: rgba(0, 128, 128, 1)">14</span> <span style="color: rgba(0, 0, 0, 1)">},
</span><span style="color: rgba(0, 128, 128, 1)">15</span>
<span style="color: rgba(0, 128, 128, 1)">16</span>   <span style="color: rgba(0, 128, 0, 1)">/*</span><span style="color: rgba(0, 128, 0, 1)">*
</span><span style="color: rgba(0, 128, 128, 1)">17</span> <span style="color: rgba(0, 128, 0, 1)">   * 生命周期函数--监听页面加载
</span><span style="color: rgba(0, 128, 128, 1)">18</span>    <span style="color: rgba(0, 128, 0, 1)">*/</span>
<span style="color: rgba(0, 128, 128, 1)">19</span>   onLoad: <span style="color: rgba(0, 0, 255, 1)">function</span><span style="color: rgba(0, 0, 0, 1)"> (options) {
</span><span style="color: rgba(0, 128, 128, 1)">20</span> <span style="color: rgba(0, 0, 0, 1)">    http.request({
</span><span style="color: rgba(0, 128, 128, 1)">21</span>       url:'classic/latest'<span style="color: rgba(0, 0, 0, 1)">,
</span><span style="color: rgba(0, 128, 128, 1)">22</span>       success:(res)=&gt;<span style="color: rgba(0, 0, 0, 1)">{
</span><span style="color: rgba(0, 128, 128, 1)">23</span> <span style="color: rgba(0, 0, 0, 1)">      console.log(res);
</span><span style="color: rgba(0, 128, 128, 1)">24</span> <span style="color: rgba(0, 0, 0, 1)">      }
</span><span style="color: rgba(0, 128, 128, 1)">25</span> <span style="color: rgba(0, 0, 0, 1)">    })
</span><span style="color: rgba(0, 128, 128, 1)">26</span>   <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> console.log(this.data.test)</span>
<span style="color: rgba(0, 128, 128, 1)">27</span>   <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> wx.request({</span>
<span style="color: rgba(0, 128, 128, 1)">28</span>   <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">   url: 'http://bl.7yue.pro/v1/classic/latest',</span>
<span style="color: rgba(0, 128, 128, 1)">29</span>   <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">   header: {</span>
<span style="color: rgba(0, 128, 128, 1)">30</span>   <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">   appKey:'K0LDaSADSDLWWbF'</span>
<span style="color: rgba(0, 128, 128, 1)">31</span>   <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">   },</span>
<span style="color: rgba(0, 128, 128, 1)">32</span>   <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">   success:(res)=&gt;{</span>
<span style="color: rgba(0, 128, 128, 1)">33</span>   <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">   //返回结果成功之后 数据的处理</span>
<span style="color: rgba(0, 128, 128, 1)">34</span>   <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">   console.log(this.data.test);</span>
<span style="color: rgba(0, 128, 128, 1)">35</span>   <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">   }</span>
<span style="color: rgba(0, 128, 128, 1)">36</span>   <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> })</span>
<span style="color: rgba(0, 128, 128, 1)">37</span>   },</pre>
</div>
<p>总结:看完了前七章的视频,我感觉老师绝对是大牛级别,从方方面面的来看,自己需要学习的东西还有很多啊,卑微的默默学习吧!</p>
<div><span style="color: rgba(255, 0, 0, 1)"><strong>内容出处:</strong>七月老师《纯正商业级小程序开发》视频课程</span></div>
<div><span style="color: rgba(255, 0, 0, 1)"><strong>视频课程链接:</strong><span style="color: rgba(255, 0, 0, 1)">https://coding.imooc.com/class/251.html</span></span></div>
</div><br><br>
来源:https://www.cnblogs.com/ssh-html/p/11144442.html
頁: [1]
查看完整版本: 微信小程序之组件开发中的基础知识