小程序组件component
作者:互联网
为啥用组件呢?
最肯定的一点是他可以复用。
组件如何使用呢?
1、在components下创建文件夹 再新建组件
2、在pages json 下导入
{ "usingComponents": { "search":"/components/search/search" } }
3 组件中的js 文件 component下增加
options:{ styleIsolation:"apply-shared" },
4、WXML页面应用 <search />
组件和页面如何父子传值?
在引用组件的页面中,在组件标签上新增属性值来接收页面中的值
一、搜索组件
wxml
<!--components/search/search.wxml--> <view class="{{isFocus? 'containerFocus' : 'container'}}"> <view class="search"> <view class="search-text"> <text class="iconfont iconfangdajing"></text> <input type="text" placeholder="搜索喵星人" bindfocus="handleFocus" bindconfirm="handleConfirm" value="{{inputValue}}" confirm-type="search"/> </view> <view wx:if="{{isFocus}}" class="search-cancel" bindtap="handleCancel">取消</view> </view> <view class="search-history" > <text>历史记录</text> <text bindtap="handleDel" class="iconfont iconshanchu"></text> </view> <view class="search-history-btn" bindtap="handleHistoryItemDel"> <text data-text="{{item}}" wx:for="{{ historyList}}" wx:key="{{index}}">{{item}}</text> </view> <navigator wx:for="{{searchList}}" wx:key="{{index}}" url="{{'/pages/detail/detail?userId='+ item._id }}" open-type="navigate"> <view class='searchList-item'> <view> <image src="{{item.userPhoto}}" /> <text>{{item.nickName}}</text> </view> <text class="iconfont iconyoujiantou" /> </view> </navigator> </view>View Code
wxss
.container{ position: fixed; left:0; top:0; width:100%; height:90rpx; z-index: 9999; overflow: hidden;} .containerFocus{ position: fixed; left:0; top:0; width:100%; height:100%; z-index: 9999; background:#ccc;} .search{ display: flex; align-items: center; margin:20rpx;} .search-text .iconfangdajing{ margin-left: 6rpx; } .search-text { background-color: white; display: flex; align-items: center; flex:1; border: 1px #b4b5b6 solid ; border-radius:10rpx ; } .search-text input{ flex:1;} .search-history{ display: flex; justify-content: space-between; margin:20rpx; margin-bottom: 30rpx;} .search-history-btn{ margin-bottom: 30rpx;} .search-history-btn text{ border: 1px #b4b5b6 solid ; border-radius: 20rpx; padding: 16rpx; background: white; margin: 10rpx; } .searchList-item view{ display: flex; align-items: center;} .searchList-item{ margin-top: 50rpx; height: 100rpx; display: flex; border-bottom: 1rpx #b4b5b6 dashed; justify-content: space-between; align-items: center; } .search-cancel{ margin-left: 5rpx; } .searchList-item image { width: 100rpx; height: 100rpx; border-radius:50% ; margin-right:10rpx ; }View Code
js
// components/search/search.js const app = getApp() const db = wx.cloud.database() Component({ /** * 组件的属性列表 */ options:{ styleIsolation:"apply-shared" }, properties: { }, /** * 组件的初始数据 */ data: { isFocus:false, historyList:[], searchList:[], inputValue:'', }, /** * 组件的方法列表 */ methods: { handleCancel(){ this.setData({ inputValue:'', searchList:[] }) wx.getStorage({ key: 'searchHistory', success:res=>{ this.setData({ historyList:res.data }) } }) this.setData({ isFocus:false }) }, handleFocus(){ this.setData({ isFocus:true }) }, handleConfirm(ev){ let value = ev.detail.value; let cloneHistoryList = [...this.data.historyList]; cloneHistoryList.unshift(value); wx.setStorage({ data: [...new Set(cloneHistoryList)], key: 'searchHistory', }); this.changeSearchList(value); }, handleDel(){ wx.removeStorage({ key: 'searchHistory', success:res=>{ this.setData({ historyList:[] }) } }) }, changeSearchList(value){ db.collection('users').where({ nickName:db.RegExp({ regexp:value, options:'i' }) }).field({ userPhoto:true, nickName:true }).get().then(res=>{ this.setData({ searchList:res.data }) }) }, handleHistoryItemDel(ev){ let value = ev.target.dataset.text; console.log(value); this.changeSearchList(value) } } })View Code
二、拨打电话组件 (点击图标拨打电话)
核心:
wx.makePhoneCall({ phoneNumber: this.data.phoneNumber, })
xwml
<text bindtap="handleCopy" class="iconfont icondadianhua"></text>
js
// components/callPhone/callPhone.js Component({ options:{ styleIsolation:"apply-shared" }, /** * 组件的属性列表 */ properties: { phoneNumber:String }, /** * 组件的初始数据 */ data: { }, /** * 组件的方法列表 */ methods: { handleCopy(){ wx.makePhoneCall({ phoneNumber: this.data.phoneNumber, }) } } })View Code
三、复制组件 (点击图标复制文字)
wx.setClipboardData({ data: this.data.copyText, })
js
// components/copyText/copyText.js Component({ options:{ styleIsolation:"apply-shared" }, /** * 组件的属性列表 */ properties: { copyText:String }, /** * 组件的初始数据 */ data: { }, /** * 组件的方法列表 */ methods: { handleCopy(){ wx.setClipboardData({ data: this.data.copyText, }) } } })View Code
wxml
<!--components/copyText/copyText.wxml--> <text bindtap="handleCopy" class="iconfont iconfuzhi"></text>
四、滑动移除项目
用到了 <movable-area><movable-view>
<!--components/removeList/removeList.wxml--> <movable-area class="area"> <movable-view direction="all" class='view' bindtap="handleAddFriend" inertia='true'>{{userMessage.nickName}}</movable-view> <navigator url="{{'/pages/detail/detail?userId=' + userMessage._id}}" open-type="navigate"> <image src="{{userMessage.userPhoto}}" /> </navigator> <view class="delete" bindtap="handleDelMessage">删除</view> </movable-area>
wxss
/* components/removeList/removeList.wxss */ /* 就是设置一个公共区域,然后试图在这个区域内,然后试图默认左边预留100repx ,然后设置这个z轴为2,在z=1的最左右两边,都藏着头像和 删除键。 */ .area{ width: calc(100% - 40rpx); height: 100rpx; position: relative; margin: 20rpx; border-bottom: 2rpx #b4b5b6 dashed; } .view{ width: calc(100% - 100rpx); height: 100%; position: absolute; top: 0; left: 100rpx; line-height: 100rpx; text-indent: 10rpx; z-index: 2; background-color: white; } image{ width: 100rpx; height: 100rpx; border-radius: 50%; position: absolute; left: 0; top: 0; z-index: 1; } .delete{ text-indent: 10rpx; line-height: 100rpx; width: 100rpx; height: 100rpx; background-color: red; color: white; position: absolute; right: 0; top: 0; z-index: 1; }View Code
js
// components/removeList/removeList.js const app = getApp() const db = wx.cloud.database() const _ = db.command Component({ /** * 组件的属性列表 */ properties: { messageId:String }, /** * 组件的初始数据 */ data: { userMessage:{} }, /** * 组件的方法列表 */ methods: { handleAddFriend(){ wx.showModal({ cancelColor: 'cancelColor', content:"是否添加好友?", cancelText:"考虑一下", confirmText:"接受", success:res=>{ if(res.confirm){ db.collection("users").doc(app.userInfo._id ).update({ data:{ friendList:_.unshift(this.data.messageId) } }).then(res=>{ }); wx.cloud.callFunction({ name:'update', data:{ collection:"users", doc:this.data.messageId, data:`{friendList: _.unshift('${app.userInfo._id}')}` } }).then(res=>{ }); this.removeMessage(); } else if(res.cancel){ console.log("用户取消") } } }) },removeMessage(){ db.collection("messages").where({ userId:app.userInfo._id }).get().then( res=>{ let list = res.data[0].list; list = list.filter((val,i)=>{ return val != this.data.messageId; }) ; wx.cloud.callFunction({ name:'update', data:{ collection:"messages", where:{ userId:app.userInfo._id }, data:{ list } } }).then(res=>{ this.triggerEvent('myevent',list) }) }) }, handleDelMessage(){ wx.showModal({ cancelColor: 'cancelColor', content:'删除消息', confirmText:'删除', success:(res)=>{ if(res.confirm){ this.removeMessage(); } else if(res.cancel){ } } }) } }, lifetimes:{ attached:function(){ db.collection("users").doc(this.data.messageId).field({ userPhoto:true, nickName:true }).get().then( res=>{ this.setData({ userMessage:res.data }) } ) } } })View Code
标签:search,component,程序,100rpx,res,组件,data,wx 来源: https://www.cnblogs.com/zhuangdd/p/14154426.html