博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
微信小程序三级联动自定义组件component
阅读量:4667 次
发布时间:2019-06-09

本文共 3442 字,大约阅读时间需要 11 分钟。

该功能主要利用微信小程序的组件功能和picker-view 组件

首先创建一个component组件    

html  

<view class="wrapper-picker" hidden="{
{ pickerHidden }}">
<view class="mask"></view>
<view class="btn-group">
<view class="cancel" bindtap="cancelFn">取消</view>
<view class="confirm" bindtap="confirmFn">确定</view>
</view>
<picker-view class="picker-floor" indicator-style="height: 68rpx;" value="{
{ value }}" bindchange="bindChange">
<picker-view-column>
<view wx:for="{
{ data }}">{
{ item.area_name }}</view>
</picker-view-column>
<picker-view-column>
<view wx:for="{
{ data[one].sub_area }}">{
{ item.area_name }}</view>
</picker-view-column>
<picker-view-column>
<view wx:for="{
{ data[one].sub_area[two].sub_area }}">{
{ item.area_name }}</view>
</picker-view-column>
</picker-view>
</view>

css  

.wrapper-picker {
position: fixed;
z-index: 99999;
width: 100%;
height: 100%;
bottom: 0;
left: 0;
}
.wrapper-picker .mask {
position: absolute;
bottom: 0;
left: 0;
width: 100%;
height: 100%;
opacity: .6;
}
.picker-floor {
position: absolute;
z-index: 999999;
bottom: 0;
left: 0;
padding-left: 40rpx;
width: 100%;
height: 560rpx;
}
.picker-floor view {
line-height: 68rpx;
}
.wrapper-picker .btn-group {
position: absolute;
z-index: 999999;
bottom: 560rpx;
left: 0;
width: 100%;
height: 80rpx;
line-height: 80rpx;
}
.wrapper-picker .cancel {
float: left;
margin-left: 20rpx;
}
.wrapper-picker .confirm {
float: right;
margin-right: 20rpx;
color: #5fbf55;
}
 

js

const app = getApp(),
gdata = app.globalData;    //引入数据
Component({
/**
* 组件的属性列表
*/
properties: {
pickerHidden: {        //控制组件显示
type: Boolean,
value: false
}
},
/**
* 组件的初始数据
*/
data: {
data: [],
one: 0,
two: 0,
three: 0,
arr: [0, 0, 0],
indexArr: []
},
/**
* 组件生命周期函数,在组件实例进入页面节点树时执行
*/
attached: function () {
this.setData({
data: gdata.array
})
},
/**
* 组件的方法列表
*/
methods: {
bindChange: function (e) {
console.log(this.data.arr, '改变前');
console.log(e.detail.value, '改变后');
let one = e.detail.value[0],
two = e.detail.value[1],
three = e.detail.value[2];
this.setData({
arr: e.detail.value,
one: one,
two: two,
three: three,
indexArr: this.data.indexArr
})
//通过索引实现联动
try {
this.data.indexArr[0] = this.data.data[this.data.one].sub_area[this.data.two].sub_area[this.data.three].area_name;        //市 字段名可自己根据地址数据的字段名自行更改
this.data.indexArr[1] = this.data.data[this.data.one].sub_area[this.data.two].sub_area[this.data.three].display_text.split('·').join('-');  //区
this.data.indexArr[2] = this.data.data[this.data.one].sub_area[this.data.two].sub_area[this.data.three].area_id;
} catch (e) {
console.log('出现溢出');    // 上一个选中的省中市的数量溢出当前省的市数量
}
},
//绑定自定义的调用方法
//取消操作
cancelFn: function () {
this.triggerEvent('cancelFn');    //绑定组件触发
},
//确定操作
confirmFn: function () {
let myEventDetail = null;
//此处传值  可将myEventDetail 传给父组件
this.triggerEvent('myevent', myEventDetail);         //绑定组件触发
}
}
})
 
至此组件创建完毕  需要的地方直接引入后调用即可

调用时先在json中声明

{
"usingComponents": {
"my-picker": "/component/pickerFloor/pickerFloor"    //路径
}
}

html

<my-picker picker-hidden="{
{ isHidden }}" bindmyevent="onMyEvent" bindcancelFn="onMyEventCancel" />  //引用组件  绑定方法  bindmyevent(myevent为组件中声明的方法 使用triggerEvent绑定) picker-hidden(组件的属性传入父组件中 控制显示)

控制isHidden 就可以做到该地址组件的显示隐藏

js

//取消操作
onMyEventCancel: function (e) {
this.setData({
isHidden: true
})
},
 
//确认操作
onMyEvent: function (e) {
 console.log(e);    //组件中传过来的值
  
}
 

个人感觉:组件的使用主要理解triggerEvent 绑定 和 父组件调用相应的事件关系   同时子组件属性传入父组件使用的方式   (上面列子中picker-hidden的属性使用)

 

转载于:https://www.cnblogs.com/daxied/p/9347474.html

你可能感兴趣的文章
C++:构造函数和析构函数能否为虚函数
查看>>
win7便笺元数据损坏,最新解决办法
查看>>
mongod
查看>>
vim配置python高亮和缩进
查看>>
Spring3.0.5 获取表中自增的主键(mysql)
查看>>
delphi dxBarManager 的dxBarEdit 输入问题
查看>>
Hadoop入门介绍一
查看>>
面试经典-分金条
查看>>
利用AutoSPSourceBuilder和Autospinstaller自动安装SharePoint Server 2013图解教程——Part 1...
查看>>
ZOJ-2972-Hurdles of 110m(记忆化搜索)
查看>>
一些新了解到技术
查看>>
vue.js click点击事件获取当前元素对象
查看>>
【单调栈,单调队列】总结
查看>>
LeetCode:Gas Station
查看>>
MyBatis初识(通过小实例清晰认识MyBatis)
查看>>
面对最菜TI战队,OpenAI在Dota2上输的毫无还手之力
查看>>
XCODE快捷键和功能汇总篇(不断更新)
查看>>
Servlet开发(一)
查看>>
linux下如何查看某个容器的详细信息?
查看>>
bzoj 2843: 极地旅行社
查看>>