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

一、导航栏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. Spark如何读写hive

    原文引自:http://blog.csdn.net/zongzhiyuan/article/details/78076842 hive数据表建立可以在hive上建立,或者使用hiveContext.s ...

  2. Foundation框架系列-NSArray

    NSArray常用API 数组字符串指定字符拼接 // 将数组中的元素以separator拼接返回字符串 比如@[@"a=1", @"b=2"] 以separa ...

  3. Django中static文件的引入

    1. 在django project中创建 static文件夹 2.settings.py中配置要在 STATIC_URL = '/static/'  下边 STATICFILES_DIRS = [ ...

  4. mac brew 安装 php 环境

    548  brew search php 549  brew tap homebrew/dupes 550  brew tap josegonzalez/homebrew-php 551  brew ...

  5. 【学术篇】NOIP2016 D1T3 luogu1850换教室

    题目链接:点击这里献出你宝贵的时间(是用来做题不是捐赠Emmmm).. Emmmm我太弱了= = 做完这题我觉得我应该去打星际..这题怎么就有重边了呢.. 这题就是一道期望= =当时考场上好像完全不会 ...

  6. C++:多线程002

    https://blog.csdn.net/morewindows/article/details/7442333 程序描述:主线程启动10个子线程并将表示子线程序号的变量地址作为参数传递给子线程.子 ...

  7. 开机自动调用.bat文件且浏览器全屏展示

    1,将 .bat文件放入到以下路径中 C:\ProgramData\Microsoft\Windows\Start Menu\Programs\Startup 或 C:\Users\Administr ...

  8. hdu6088 组合数+反演+拆系数fft

    题意:两个人van石头剪子布的游戏一共n盘,假设A赢了a盘,B赢了b盘,那么得分是gcd(a,b),求得分的期望*\(3^{2*n}\) 题解:根据题意很明显有\(ans=3^{n}*\sum_{a= ...

  9. 我的服装DRP之即时通讯——为WCF增加UDP绑定(应用篇)

    发个牢骚,博客园发博文竟然不能写副标题.这篇既为我的服装DRP系列第二篇,也给为WCF增加UDP绑定系列收个尾.原本我打算记录开发过程中遇到的一些问题和个人见解,不过写到一半发现要写的东西实在太多,有 ...

  10. 基于OneMap的水利行业共享服务平台搭建步骤

    今天上午再次学习Esri技术培训中心的“GIS服务共享与运维管理——之OneMap解决方案”课程,从中学习了OneMap的产品架构以及基于OneMap共享服务平台的搭建步骤.下面把其中水利行业的共享服 ...