跟着视频开始小程序的项目的开发,视频中这个小程序已经上线了,可以很好的看着小程序的界面进行开发,昨天看了一下具体的需求,觉得真的细节好多啊,而且其中设计的组件的思想也是很好的,能够很好的实现代码的复用,实现代码的解耦合,这个视频讲解的是真的好,好好学习一下。

组件component开发

  小程序中的大部分的页面其实都是由组件来组合起来的,所以开发适合需求的组件是非常重要的,来进行组件的开发。

(1)在与pages同级目录下创建components文件目录,来存放所有需要进行开发的组件

(2)之后在components文件夹下面进行组件的创建,首先也是创建一个空的文件夹,然后在创建components组件

(3)页面中如何引用组件

在静态页面中的json文件下进行组件的引用,例如:可以在classic文件夹中的classid.wxml文件中使用like组件,可以这样做:

在classic文件夹下的classic.json文件中引入组件的路径

这个路径是有问题的,所以没法显示,很显然,这里使用的是相对路径,如果使用绝对路径就没问题了:"v-like":"/components/like/index"

在页面中使用组件,在classic.wxml文件中使用v-like组件

(4)静态图片文件夹的创建

注意:这里需要创建images文件夹,可以直接在组件中创建文件夹,只供组件来使用,也可以在components文件夹下面创建images文件夹,所有的组件共用一个images文件夹,同时创建pages同级images文件夹,供pages中页面使用

(5)组件中image组件的使用

image组件的官方文档:

https://developers.weixin.qq.com/miniprogram/dev/component/image.html

注意:

在小程序的关于尺寸的单位,一种是px,一种是rpx。其中rpx是和我们平常页面开发中的px是一致的,但是px是平常开发的px的二倍,也就是在小程序中px是rpx的二倍的关系,这个原则只限于在iPhone6这种机型下面才试用,其他机型不一定是2倍的关系,这里还有一点,就是rpx是自适应的,绝大多数情况下都可以使用的,但是有些地方还是需要选择的,必须说是字体的大小,可能就不需要自适应,设计成固定大小的字体

(6)设置全局样式

这个需要新建全局样式文件,例如可以在根目录新建一个app.wxss的样式文件来作为全局样式文件

打开调试器可以看到,小程序会自动添加page标签的,所以可以设置page标签的样式,组件中的样式也会变化!

注意:并不是所有的全局样式对组件都起作用,只有很少的css样式是可以从全局样式中继承的,但是在页面中是可以继承的,classic.wxml页面文件中是可以继承app.wxss文件中的样式的,具体的文档如下:组件样式下面有详细介绍

https://developers.weixin.qq.com/miniprogram/dev/framework/custom-component/wxml-wxss.html

(7)设置组件的自定义宽度

display: inline-flex;可以直接使用display的inline-flex的值来设置组件的自适应宽度
(8)事件的触发
官方的文档中有详细介绍:
https://developers.weixin.qq.com/miniprogram/dev/framework/view/wxml/event.html#%E4%BA%8B%E4%BB%B6%E8%AF%A6%E8%A7%A3
这里主要使用到的是手指触摸事件,也就是通常PC端的点击事件具体的写法,是在js文件中来写事件的逻辑代码的
// wxml中
<view bind:tap="onLike" class="container"><image src="data:images/like.png" /><text>999</text>
</view>// js中 这个是需要写在methods中的/*** 组件的方法列表*/methods: {onLike:function(event){console.log(event);}}

(9)三元表达式

这个就要涉及到js中的逻辑代码的编写了,看看三元运算符的格式,来实现一个数据的切换

 1 <!--三元运算符的使用-->
 2 <view bind:tap="onLike" class="container">
 3   <image src="{{like?yesSrc:noSrc}}" />
 4   <text>{{like?count1:count2}}</text>
 5 </view>
 6
 7 <!--数据是需要定义在js中的,其中data是专门来存放数据变量的-->
 8   /**
 9    * 组件的初始数据
10    */
11   data: {
12     like:false,
13     count1:9,
14     count2:99,
15     yesSrc:'images/like.png',
16     noSrc:'images/like@dis.png'
17   },

(10)组件的封装性和开放性

组件的封装肯定要好坏之分,那么什么是决定组件封装的好坏,也就是让人感觉很好用,让人用着舒服呢?视频中的老师说的是:

1)你是要思考什么数据是封装到组件中的,而什么数据是开放出来的

2)关于粒度的问题

粒度在这里就是指的是封装的组件的难易程度以及组件的功能的强大与否

(11)js文件中properties属性列表的设置

这个是主要来设置用到的变量的类型以及初始值,还有一个observer属性的,在开发中可以把对外开放的数据来在这里进行定义,同样页面中是用{{}}语法来取值

  /*** 组件的属性列表*/properties: {like:{type:Boolean, // 设置变量类型  必填value:false, //设置默认值 选填observer:function(){ // 选填
}},count:{type:Number}},

(12)属性在methods中的应用

直接看代码吧,这个和之前的各种语言的用法道理是一样的

 1   /**
 2    * 组件的方法列表
 3    */
 4   methods: {
 5     onLike:function(event){
 6       var like = this.properties.like; // 用变量来接收属性的值
 7       var count = this.properties.count;
 8
 9       count = like?count-1:count+1;
10       this.setData({ // 变量赋值之后需要重新设置Data的值
11         count:count,
12         like:!like
13       })
14     }
15   }

(13)从服务器获取数据

这个主要是调用接口,从服务器上获取数据的方式,很苦恼,并没有权限从老师搭建的后台服务器上获取数据,我没有购买慕课网上的课程,没有办法获取到那个特殊的开发者key,这里只是记录一下获取数据的方法以及数据如何处理

官方的文档来学习一下:

https://developers.weixin.qq.com/miniprogram/dev/api/network/request/wx.request.html

看看代码:

 1  // 这个是在classic.js中
 2  /**
 3    * 生命周期函数--监听页面加载
 4    */
 5   onLoad: function (options) {
 6     wx.request({
 7       url: 'http://bl.7yue.pro/v1/classic/latest',
 8       header: {
 9         appKey:'K0LDaSADSDLWWbF'
10       },
11       success:function(){
12         //返回结果成功之后 数据的处理
13       }
14     })
15   },
16
17 // ES6中箭头函数的写法
18   /**
19    * 生命周期函数--监听页面加载
20    */
21   onLoad: function (options) {
22     console.log(this.data.test)
23     wx.request({
24       url: 'http://bl.7yue.pro/v1/classic/latest',
25       header: {
26         appKey:'K0LDaSADSDLWWbF'
27       },
28       success:(res)=>{
29         //返回结果成功之后 数据的处理
30         console.log(this.data.test);
31       }
32     })
33   },

(14)代码优化

这个主要是来优化请求的接口的方法的,我们把一些通用的数据抽离出来,来写成公共的方法,供许多模块来一起调用

在http.js中来封装wx.request

具体的config.js中代码:

 1 // const关键字是声明不变的值的时候来用的,相当于Java中静态变量
 2 export const config = {
 3   api_base_url:'http://bl.7yue.pro/v1/',
 4   appKey:'K0LDaSADSDLWWbF'
 5 }
 6
 7 // 导出function函数方法
 8 export let fun1 = function(){
 9
10 }
11
12 // export {const, fun1} 这种写法就不用每一个都写export关键字了

http.js中代码:

 1 // 导入的时候需要使用相对路径
 2 import {config} from '../config.js';
 3
 4 // 错误的具体的提示信息 根据接口中error_code
 5 const tips = {
 6   1:'抱歉,出现了一个错误',
 7   1005:'appKey不正确',
 8   3000:'期刊不存在'
 9 }
10
11 class HTTP{
12   request(params){
13     if(!params.method){
14       params.method = 'GET';
15     }
16     wx.request({
17       url: config.api_base_url + params.url,
18       method:params.method,
19       data:params.data,
20       header:{
21         'content-type':'application/json',
22         appKey:config.params
23       },
24       success:(res) => {
25         // 来判断请求是否成功 以2开头就是成功 这个是在Number类型的,          // 需要装换成string类型
26         var code = res.statusCode.toString();
27         // ES6中 startsWith 和 endsWith
28         if(code.startsWith('2')){
29           params.sucess(res.data);
30         }else{
31           // 错误信息的提示
32           var error_code = res.data.error_code;
33           this._show_error(error_code);
34         }
35       },
36       fail:(err) => {
37         this.error_code(1);
38       }
39     })
40   }
41
42   // 错误信息的提示方法
43   _show_error(error_code){
44     if(!error_code){
45       error_code = 1;
46     }
47     wx.showToast({
48       title: tips[error_code],
49       icon: 'none',
50       duration: 2000
51     })
52   }
53 }
54
55 // 使得类外部可以访问
56 export {HTTP}

classic.js中代码的优化,主要是优化的request请求的封装方法

 1 // 这里导入的时候需要写成相对路径
 2 import {HTTP} from '../../util/http.js';
 3
 4 // 实例化HTTP类
 5 var http = new HTTP();
 6
 7 Page({
 8
 9   /**
10    * 页面的初始数据
11    */
12   data: {
13
14   },
15
16   /**
17    * 生命周期函数--监听页面加载
18    */
19   onLoad: function (options) {
20     http.request({
21       url:'classic/latest',
22       success:(res)=>{
23         console.log(res);
24       }
25     })
26     // console.log(this.data.test)
27     // wx.request({28     //   url: 'http://bl.7yue.pro/v1/classic/latest',
29     //   header: {30     //     appKey:'K0LDaSADSDLWWbF'
31     //   },
32     //   success:(res)=>{33     //     //返回结果成功之后 数据的处理
34     //     console.log(this.data.test);
35     //   }
36     // })
37   },

总结:看完了前七章的视频,我感觉老师绝对是大牛级别,从方方面面的来看,自己需要学习的东西还有很多啊,卑微的默默学习吧!

转载于:https://www.cnblogs.com/ssh-html/p/11144442.html

微信小程序之组件的开发相关推荐

  1. 微信小程序 MinUI 组件库系列之 abnor 异常流组件

    MinUI 是基于微信小程序自定义组件特性开发而成的一套简洁.易用.高效的组件库,适用场景广,覆盖小程序原生框架.各种小程序组件主流框架等,并且提供了高效的命令行工具.MinUI 组件库包含了很多功能 ...

  2. 微信小程序 MinUI 组件库系列之 label 标签组件

    MinUI 是基于微信小程序自定义组件特性开发而成的一套简洁.易用.高效的组件库,适用场景广,覆盖小程序原生框架.各种小程序组件主流框架等,并且提供了高效的命令行工具.MinUI 组件库包含了很多基础 ...

  3. 微信小程序 MinUI 组件库系列之 badge 徽章组件

    MinUI 是基于微信小程序自定义组件特性开发而成的一套简洁.易用.高效的组件库,适用场景广,覆盖小程序原生框架.各种小程序组件主流框架等,并且提供了高效的命令行工具.MinUI 组件库包含了很多基础 ...

  4. 微信小程序 MinUI 组件库系列之 avatar 头像组件

    MinUI 是基于微信小程序自定义组件特性开发而成的一套简洁.易用.高效的组件库,适用场景广,覆盖小程序原生框架.各种小程序组件主流框架等,并且提供了高效的命令行工具.MinUI 组件库包含了很多基础 ...

  5. 微信小程序 MinUI 组件库系列之 price 价格组件

    MinUI 是基于微信小程序自定义组件特性开发而成的一套简洁.易用.高效的组件库,适用场景广,覆盖小程序原生框架.小程序组件化框架等,并且提供了高效的命令行工具.MinUI 组件库包含了很多基础的组件 ...

  6. 微信小程序 MinUI 组件库系列之 loadmore 页底组件

    MinUI 是基于微信小程序自定义组件特性开发而成的一套简洁.易用.高效的组件库,适用场景广,覆盖小程序原生框架.各种小程序组件主流框架等,并且提供了高效的命令行工具.MinUI 组件库包含了很多基础 ...

  7. 微信小程序 MinUI 组件库系列之 progress 进度条组件

    MinUI 是基于微信小程序自定义组件特性开发而成的一套简洁.易用.高效的组件库,适用场景广,覆盖小程序原生框架.各种小程序组件主流框架等,并且提供了高效的命令行工具.MinUI 组件库包含了很多基础 ...

  8. 微信小程序 MinUI 组件库系列之 abnor 异常流组件 1

    MinUI 是基于微信小程序自定义组件特性开发而成的一套简洁.易用.高效的组件库,适用场景广,覆盖小程序原生框架.各种小程序组件主流框架等,并且提供了高效的命令行工具.MinUI 组件库包含了很多功能 ...

  9. 当前最热门的微信小程序UI组件库

    1.WeUI WeUI 是一套同微信原生视觉体验一致的基础样式库,由微信官方设计团队为微信 Web 开发量身设计,可以令用户的使用感知更加统一.包含button.cell.dialog. progre ...

最新文章

  1. tensorflow中的tf.summary.image
  2. FPGA之道(57)状态机的实现方式
  3. css3圆形轨迹动画
  4. liunx配置本地yum源和更新aliyun yum源
  5. [POJ2157]Maze(DFS)
  6. android底层重构,【理论】【转】Android项目重构之路:实现篇
  7. 101-字符串类string基础使用
  8. ASP.NET状态管理详解,让你明明白白
  9. ITAA学员的经典对白
  10. 正则校验 4位数字_推荐收藏,工作中常用的正则表达式总结
  11. Js时间相关处理函数
  12. Adam自适应矩估计
  13. excel2016打开后空白不显示内容的解决办法
  14. ADS仿真5_LNA设计
  15. 键盘鼠标录制哪个好用_美商海盗船Scimitar RGB Elite鼠标体验:再多技能也怕这把弯刀...
  16. 电子计算机断层扫描简称,计算机断层扫描技术(简称PET)
  17. 如何实现一个安全的Web登陆
  18. Oracle MOD函数的使用
  19. 光敏电阻规格型号的含义解读研究总结
  20. element ui的双层el-dialog样式控制

热门文章

  1. 亚马逊关键词优化:3 种强大的方法来查找可转换的关键词
  2. 为什么我会选择 AI-TestOps 让测试更智能
  3. CDH和HDP下载地址
  4. 2020网鼎杯pwn
  5. 高层论坛︱王家耀院士:“互联网+”时空大数据与智慧城市(3)
  6. python 爬取财经新闻股票_Python进阶量化交易专栏场外篇20-爬虫抓取股票论坛帖子...
  7. vue单页面应用的原理
  8. 3年自动化测试经验,25K都面不上?这么坑?
  9. 一元微积分实验(极限与导数、积分)
  10. 2008年05月22日