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

一、导航栏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. python基础语法(数据类型转换)

  2. 网页qq在线交谈

    网页中如何启用QQ交谈 1. 登录QQ, 打开网址:http://shang.qq.com/v3/widget.html 启用QQ通讯组件. 2. 选择组件样式,设置提示语,例如: 3. 刷新页面,C ...

  3. Programming | 变量名的力量

    命名准则 变量名要完全,准确的描述变量所代表的事物,一般而言,对变量的描述就是最佳的变量名.避免x,temp,i等泛泛而谈的变量名. 比如对于矩阵的循环,matrix[row][col]就比m[i][ ...

  4. mysqldump使用记录

    #导出单个数据库:结构 无数据 [root@localhost ~]#mysqldump -h127.0.0.1 -uroot -p --opt --no-data db_name >~/db_ ...

  5. Django流程

    开始具体的代码之旅前,先来宏观地看下Django是如何处理Http Resquest的,如下图: 假设你已经在浏览器输入了 http://127.0.0.1:8000/polls/,接下来浏览器会把请 ...

  6. DuiLib学习笔记3.颜色探究

    在前面两篇日志已经能使用xml了.今天准备好好的折腾一番,结果在颜色上却掉坑里了. 起初我在ps里取颜色为0104ff 这里01为R,04为G,ff为B 在控件的属性里有这样一个属性bkcolor=& ...

  7. 原生ajax封装及用法

    /* 封装ajax函数 * @param {string}opt.type http连接的方式,包括POST和GET两种方式 * @param {string}opt.url 发送请求的url * @ ...

  8. JS 根据今天的日期获取本周星期一与星期天的日期

    var now = new Date(); var nowTime = now.getTime() ; var day = now.getDay(); var oneDayTime = 24*60*6 ...

  9. 转-VS2010常用功能使用介绍

    原文链接:http://www.jizhuomi.com/software/27.html 1.几个基础概念 在讲VS2010之前先讲下程序开发过程中的几个基本概念:源程序.目标程序和翻译程序. 源程 ...

  10. vue后台管理项目中菜单栏切换的三种方法

    第一种方法:vue嵌套路由(二) <el-menu :default-active="defaultActive" style="min-height: 100%; ...