继续微信小程序开发的学习,继续跟着老师的讲课思路来学习,继续开发项目中所用到的组件

一、导航栏navi组件的开发

1、新建组件的文件结构

这个就是先新建目录navi。然后在navi文件夹中新建component组件index,最后新建images文件夹,存放组件中所需的图片,建好之后如下图:

2、设置组件中相关属性和变量

设置组件中的属性,这里有title、first、latest属性

设置组件中变量,这里有图片的路径,disLeftSrc、leftSrc、disRightSrc、rightSrc

最后将属性以及变量绑定到相关标签上,这里需要注意的是图片路径的切换

 // index.wxml中静态页面的布局
<view class='container'>
<image class='icon' src='{{latest?disLeftSrc:leftSrc}}' />
<text class='title'>{{title}}</text>
<image class='icon' src='{{first?disRightSrc:rightSrc}}' />
</view> // index.js中属性和变量的确定
Component({
/**
* 组件的属性列表
*/
properties: {
title: String,
first:Boolean,
latest:Boolean
}, /**
* 组件的初始数据
*/
data: {
disLeftSrc:'images/triangle.dis@left.png',
leftSrc:'images/triangle@left.png',
disRightSrc:'images/triangle.dis@right.png',
rightSrc:'images/triangle@right.png'
}, /**
* 组件的方法列表
*/
methods: { }
})

3、将组件注册到classic.json 中,供classic使用

// classic.json中注册组件
{
"usingComponents": {
"v-navi": "/components/navi/index"
}
}
// classic.wxml中使用
<v-navi></v-navi>

4、调整组件中样式 css样式,我可不会写这个

这个是老师调整好的,我肯定是写不出来的,继续学习吧

 .container{
width: 600rpx;
height: 80rpx;
background-color: #f7f7f7;
border-radius: 2px;
display: inline-flex;
flex-direction: row;
justify-content: space-between;
align-items: center
} .icon{
height: 80rpx;
width: 80rpx;
} .title{
font-size: 28rpx;
}

5、在page页面中的使用

 // classic.wxml 文件中新增代码
<v-navi class='navi' title='{{classic.title}}' first='{{first}}' latest='{{latest}}'></v-navi> // classic.js 中新增变量
/**
* 页面的初始数据
*/
data: {
classic: null,
latest:true, // 最新期刊?默认值true
first:false // 第一期期刊?默认值false
},

6、完善navi组件的左右切换的功能

// navi组件中的index.wxml 绑定自定义左右切换事件
<view class='container'>
<image bind:tap='onLeft' class='icon' src='{{latest?disLeftSrc:leftSrc}}' />
<text class='title'>{{title}}</text>
<image bind:tap='onRight' class='icon' src='{{first?disRightSrc:rightSrc}}' />
</view> // navi组件中的index.js 中实现这两个方法
/**
* 组件的方法列表
*/
methods: {
onLeft:function(event){
if(!this.properties.latest){
// 触发自定义事件
this.triggerEvent('left', {}, {});
}
},
onRight:function(event){
if(!this.properties.first){
// 触发自定义事件
this.triggerEvent('right', {}, {});
}
}
}
})

page文件夹中的classic中的文件的代码完善

 // 监听navi组件中的切换事件
<v-navi bind:left='onNext' bind:right='onPrevious' class='navi' title='{{classic.title}}' first='{{first}}' latest='{{latest}}'></v-navi> // classic.js 中监听事件的实现,暂时没有具体的代码实现,只是空的方法体
// 监听navi组件的切换上一期
onNext:function(event){ },
// 监听navi组件的切换下一期
onPrevious:function(event){ },

因为classic中不只有movie组件,还有music组件以及句子组件,所以先把这些组件来实现出来

二、music组件的开发

1、首先来新建music组件中所需要的一些文件以及将图片复制过来

2、music组件中简单代码的编写

 // index.wxml页面中的代码
<view>
<image src='{{img}}'/>
<image src='{{playSrc}}' />
<image src='images/music@tag.png' />
<text>{{content}}</text>
</view> // index.js中属性以及变量的定义
Component({
/**
* 组件的属性列表
*/
properties: {
img: {
type: String
},
content: String
}, /**
* 组件的初始数据
*/
data: {
pauseSrc:'images/player@waitting.png',
playSrc:'images/player@playing.png'
}, /**
* 组件的方法列表
*/
methods: { }
})

三、essay组件的开发(文章组件)

1、首先新建essay组件中的各种文件

2、先插个队,来看一下代码的优化

这个是优化组件中的js文件中的一些属性和变量以及一些方法的代码的,可以将组件中通用的代码来抽离出来,通过behavior来连接

(1)新建一个classic-beh.js文件

 /**
* behavior 定义组件中共有的属性 主要作用是抽离出相同的代码
* Behavior 与index.js中的Component是类似的
* 2019年7月29日22:13:10
*/
var classicBeh = Behavior({
properties: {
img: {
type: String
},
content: String
},
data:{ },
methods:{ }
}) export {classicBeh}

(2)组件中的使用behavior 同时将music组件以及movie组件中替换掉

 // essay组件中使用behavior

 import {classicBeh} from '../classic-beh.js'; // 需要引入

 Component({
/**
* 组件的属性列表
*/
behaviors: [classicBeh], // 这是重点
properties: {
}, /**
* 组件的初始数据
*/
data: { }, /**
* 组件的方法列表
*/
methods: { }
})

四、导航栏实现组件的切换

看下页面的中的代码以及js中代码:

 // classic.wxml中代码 主要是针对navi组件的
<v-navi bind:left='onNext' bind:right='onPrevious' class='navi' title='{{classic.title}}' first='{{first}}' latest='{{latest}}'></v-navi> // classic文件夹中的中的classic.js
// 监听navi组件的切换下一期
onPrevious:function(event){
var index = this.data.classic.index;
classicModel.getPrevious(index, (res) =>{
this.setData({
classic:res,
latest: classicModel.isLatest(res.index),
first: classicModel.isFirst(res.index)
})
});
}, // models文件夹下的classic.js 文件中新增代码
// 是否是第一期
isFirst(index) {
return index == 1 ? true : false;
} // 是否是最新一期
isLatest(index) {
var latestIndex = this._getLatestIndex();
return index == latestIndex ? true : false;
} // 保存最新一期的index这里将信息保存到小程序提供的缓存中
_setLatestIndex(index) {
wx.setStorageSync('latest', index);
} _getLatestIndex() {
var index = wx.getStorageSync('latest');
return index;
} getLatest(sCallBack) {
this.request({
url: 'classic/latest',
success: (res) => {
sCallBack(res);
// 将最新一期的index放入缓存中
this._setLatestIndex(res.index);
}
})
}

这只是完成了先后点击触发的事件。来切换不同的数据,向前点击事件还没有完成。接下来,看看getNext()获取后一期的期刊数据

 // classic文件夹下的classic.js 中新增代码
// 监听navi组件的切换下一期
onNext:function(event){
var index = this.data.classic.index;
classicModel.getNext(index, (res) => {
this.setData({
classic: res,
latest: classicModel.isLatest(res.index),
first: classicModel.isFirst(res.index)
})
});
}, // models文件夹下新增代码
// 获取下一期数据
getNext(index, sCallBack){
this.request({
url: 'classic/' + index + '/next',
success:(res) =>{
sCallBack(res);
}
})
}

代码的优化,感觉这个是很有必要的一个东西,当然在做一款产品的时候,这个东西是肯定要去做的,奈何,自己现在做的东西就是一坨,很想尝试着做感觉有意义的东西

 // 主要是将重复的代码抽离出来,通过传递参数的方案
// model文件夹下的classic.js 文件中将getNext和getPrevious合并成一个方法
// 获取期刊数据
getClassic(index, nextOrPrevious, sCallBack) {
this.request({
url: 'classic/' + index + '/' + nextOrPrevious,
success: (res) => {
sCallBack(res);
}
})
}  // classic文件夹下的classic.js 文件中的代码优化
// 监听navi组件的切换下一期
onNext:function(event){
this._updateClassic('next');
}, // 监听navi组件的切换上一期
onPrevious:function(event){
this._updateClassic('previous');
}, _updateClassic: function (nextOrPrevious) {
var index = this.data.classic.index;
classicModel.getClassic(index, nextOrPrevious, (res) => {
this.setData({
classic: res,
latest: classicModel.isLatest(res.index),
first: classicModel.isFirst(res.index)
})
});
},
内容出处:七月老师《纯正商业级小程序开发》视频课程

微信小程序之组件的集合(二)的更多相关文章

  1. 微信小程序之组件的集合(四)

    这个主要是来开发book的这个大模块的,看看如何优雅的开发出booked模块! 一.book模块的创建 这个就很简单了,创建一个大的框架是很简单的 二.组件的编写 (1)wxml组件页面的编码 首先是 ...

  2. 微信小程序之组件的集合(六)

    这个将是最后一篇关于小程序的记录了,课程接近尾声,最后一个是关于用户的page页面,看看这个页面中有哪些值得学习的地方! 一.page中my开发 这个主要是展示用户喜欢的杂志,以及用户的信息,需要创建 ...

  3. 微信小程序之组件的集合(三)

    看看音乐播放组件是如何实现完成的音乐的播放的!!! 一.音乐music组件的开发 1.页面以及页面样式的开发 // music组件页面开发 <view hidden="{{hidden ...

  4. 微信小程序之组件的集合(五)

    这个是学习复杂的组件的封装的,在课程中,主要实现的是书单上方的搜索功能组件的开发,这个应该是较之前的组件是有一定难度的,但是现在学到现在,感觉前端的内容和后端的内容比较起来,还是比较容易的,而且好多内 ...

  5. 微信小程序之组件的集合(一)

    小程序中是很强调组件中开发的,我们看到的页面是由许多组件组成的,但是这些组件是如何组合在一起的呢?来学习一下!  一.组件中数据的获取 接着上一篇文章,继续来优化代码,如何把从服务器上获取的数据显示到 ...

  6. 微信小程序input组件抖动及textarea组件光标错位解决方案

    问题一: 使用微信小程序input组件时,在移动端唤起focus或blur事件时,因光标占位导致内容出现叠影及抖动现象. 解决方案: 用<textarea>组件代替了<input/& ...

  7. 微信小程序弹窗组件

    概述 自己封装的一个比较简单微信弹窗小组件,主要就是教会大家对微信小组件的用法和理解,因为微信小程序对组件介绍特别少,所以我就把自己的理解分享给大家 详细 代码下载:http://www.demoda ...

  8. Wuss Weapp 一款高质量,组件齐全,高自定义的微信小程序 UI 组件库

    Wuss Weapp 一款高质量,组件齐全,高自定义的微信小程序 UI 组件库 文档 https://phonycode.github.io/wuss-weapp 扫码体验 使用微信扫一扫体验小程序组 ...

  9. 微信小程序UI组件库 iView Weapp快速上手

    概述 今天在网上突然看到iView新出了一个微信小程序的组件库iView Weapp,自己就上手试了一下,发现用起来还是不错的,把自己使用的过程与大家分享下. 一 预览iView组件 1.可以在手机上 ...

随机推荐

  1. 认识DOM 文档对象模型DOM(Document Object Model)定义访问和处理HTML文档的标准方法。元素、属性和文本的树结构(节点树)。

    认识DOM 文档对象模型DOM(Document Object Model)定义访问和处理HTML文档的标准方法.DOM 将HTML文档呈现为带有元素.属性和文本的树结构(节点树). 先来看看下面代码 ...

  2. tensorflow识别验证码(1)-tensorflow安装,验证码生成

    什么是TensorFlow?  TensorFlow是Google开发的一款神经网络的Python外部的结构包, 也是一个采用数据流图来进行数值计算的开源软件库.TensorFlow 让我们可以先绘制 ...

  3. 【学术篇】状态压缩动态规划——POJ3254/洛谷1879 玉米田Corn Field

    我要开状压dp的坑了..直播从入门到放弃系列.. 那就先拿一道状压dp的水题练练手吧.. 然后就找到了这一道..这道题使我清醒地认识到阻碍我的不是算法,而是视力= = 传送门: poj:http:// ...

  4. falcon监控指标

    mysql监控指标: 流量状态: Bytes_received/s #平均每秒从所有客户端接收到的字节数,单位KB Bytes_sent/s #平均每秒发送给所有客户端的字节数,单位KB

  5. 「题解」:07.18NOIP模拟赛T1:星际旅行

    问题 A: 星际旅行 时间限制: 1 Sec  内存限制: 256 MB 题面 题面谢绝公开. 考试心路历程 拿到这道题感觉很懵逼,所以先搞的T2和T3,最后码了个暴力,结果还不如直接输出‘0’得分高 ...

  6. EF Code First数据库连接配置

    前面几节,使用的都是通过EF Code First创建的新数据库,接下来,将开始使用已存在的数据库. 1.使用配置文件设置数据库连接 App.config 数据库连接字符串的name与Data中Nor ...

  7. Java-MyBatis-MyBatis3-XML映射文件:结果映射

    ylbtech-Java-MyBatis-MyBatis3-XML映射文件:结果映射 1.返回顶部 1. 结果映射 resultMap 元素是 MyBatis 中最重要最强大的元素.它可以让你从 90 ...

  8. 左神算法进阶班3_1构造数组的MaxTree

    题目 一个数组的MaxTree定义: 数组必须没有重复元素 MaxTree是一棵二叉树,数组的每一个值对应一个二叉树节点 包括MaxTree树在内且在其中的每一棵子树上,值最大的节点都是树的头 给定一 ...

  9. 《DSP using MATLAB》Problem 8.29

    来汉有一月,往日的高温由于最近几个台风沿海登陆影响,今天终于下雨了,凉爽了几个小时. 接着做题. %% ------------------------------------------------ ...

  10. java基础之System类

    System类概述System 类包含一些有用的类字段和方法.它不能被实例化. 成员方法 public static void gc()运行垃圾回收器 public static void exit( ...