原生小程序实现搜索关键字高亮

原创链接:https://github.com/pdd11997110103/wxComponentWarehouse

先放wxml和wxss页:手写了一个搜索框

<view class="searchAll">
    <view class="searchTop">
        <input type="text" placeholder="搜索医生姓名" bindinput="searchValue" class="search" value="{{value}}" />
        <image class="searchImg" src="{{imgUrl}}ic_35@2x.png"></image>
        <image class="closeImg" src="{{imgUrl}}ic_41@2x.png" wx:if="{{ifValue == true}}" bindtap="clearValue"></image>
        <view class="concel" bindtap="goBack">取消</view>
    </view>
    <view wx:if="{{show}}" class="list_li" wx:for="{{filterList}}" wx:key="index" data-index="{{index}}"
        bindtap="pitchOn">
        <highlight text="{{item.nickname}}" key="{{value}}" />
    </view>
    <view class="searchNo" wx:if="{{show == false}}">
        <image src="{{imgUrl}}ic_36@2x.png" style="width: 320rpx;height: 320rpx;" mode=""></image>
        <view class="noTit">
            没有找到该医生
        </view>
    </view>
</view>

.searchTop {
	padding: 16rpx 32rpx;
	box-sizing: border-box;
	display: flex;
	justify-content: space-between;
	place-items: center;
	position: relative;
}

.searchNo {
	margin-top: 236rpx;
	display: flex;
	flex-direction: column;
	place-content: center;
	place-items: center;
}

.noTit {
	margin-top: 32rpx;
	font-size: 28rpx;
	font-family: PingFang SC, PingFang SC-Regular;
	font-weight: 400;
	text-align: CENTER;
	color: #7d8f99;
}

.search {
	width: 600rpx;
	height: 72rpx;
	background: #F2F9FC;
	border-radius: 36rpx;
	padding: 16rpx 64rpx;
	box-sizing: border-box;
	text-align: left;
	font-size: 28rpx;
	font-family: PingFang SC, PingFang SC-Regular;
	font-weight: 400;
	color: #1c3341;
}

.list_li {
	height: 80rpx;
	font-size: 28rpx;
	line-height: 80rpx;
	padding: 0 32rpx;
	box-sizing: border-box;
	/* border-bottom: 2rpx solid #F1F1F1; */
}

.concel {
	font-size: 32rpx;
	font-family: PingFang SC, PingFang SC-Regular;
	font-weight: 400;
	color: #1c3341;
}
.searchImg{
	position: absolute;
	left: 56rpx;
	top: 36rpx;
	width: 32rpx;
	height: 32rpx;
}
.closeImg{
	position: absolute;
	right: 130rpx;
	top: 36rpx;
	width: 32rpx;
	height: 32rpx;
}

然后是js页:

 data: {
        imgUrl: app.globalData.imgurl,
        show: true,
        filterList: [], //过滤后的
        value: "",
        ifValue:false
 },
 // 搜索
    searchValue(e) {
        let that = this
        let val = e.detail.value;
        that.setData({
            value: val
        })
        if (val.length > 0) {
            that.setData({
                filterList: [],
                ifValue : true
            })
            let params = {
                page: 1,
                keyword: that.data.value,
                order: "",
                level_ids: "",
                dept_ids: ""
            }
            api.postRequest('index/doctorList', params, res => {
                let arr = [];
                if (res.code == 1) {
                    if (res.data.data.length > 0) {
                        that.setData({
                            filterList: res.data.data,
                            show : true
                        })
                    } else {
                        that.setData({
                            show: false
                        })
                    }
                }
            })
        } else {
            that.setData({
                filterList: [],
                ifValue : false
            })
        }
    },
    // 清空输入框
    clearValue(){
        this.setData({
            value : ''
        })
    },
    // 返回
    goBack(){
        wx.navigateBack({
          delta: 0,
        })
    }

然后在json中引入组件:

 "usingComponents": {
    "highlight" : "/components/highlight/highlight"
  }

组件的wxml和wxss:

<text class="{{ item.deep ? 'green' : '' }}" wx:for="{{ highlightList }}" wx:key="index">{{item.val}}</text>
  
.green{
	color: #11BEA7;
  }

组件的js:

properties: {
		text: String,
		key: {
			type: String,
			value: '',
			observer: '_changeText'
		}
},

data: {
		highlightList: [], //处理后的数据
},

methods: {
		// 非空过滤
		_changeText(e) {
			if (e.length > 0 && this.properties.text.indexOf(e) > -1) {
				this._filterHighlight(this.properties.text, e);
			}
		},
		/**
		 * 关键字高亮处理
		 * @param { String } text - 文本
		 * @param { String } key - 关键字
		 */
		_filterHighlight(text, key) {
			let textList = text.split("");
			let keyList = key.split("");
			let list = [];
			for (let i = 0; i < textList.length; i++) {
				let obj = {
					deep: false,
					val: textList[i]
				}
				list.push(obj);
			};
			for (let k = 0; k < keyList.length; k++) {
				list.forEach(item => {
					if (item.val === keyList[k]) {
						item.deep = true;
					}
				})
			}
			this.setData({
				highlightList: list
			})
		}
}

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
微信原生小程序可以通过使用 wx.downloadFile() 方法实现附件下载。具体步骤如下: 1. 首先,需要获取用户授权,允许小程序访问文件存储空间,可使用 wx.getSetting() 方法获取用户授权状态,并使用 wx.authorize() 方法请求授权。 2. 在小程序页面中添加下载按钮,并在按钮的点击事件中调用 wx.downloadFile() 方法,传入文件的 URL 和保存路径等参数。下载过程中,可以通过 wx.showLoading() 方法显示下载进度提示。 3. 下载完成后,可以调用 wx.openDocument() 方法打开文件。 示例代码如下: ```javascript // 获取用户授权 wx.getSetting({ success(res) { if (!res.authSetting['scope.writePhotosAlbum']) { wx.authorize({ scope: 'scope.writePhotosAlbum', success() { // 用户已授权 }, fail() { // 用户未授权 } }) } } }) // 下载文件 wx.downloadFile({ url: '文件的URL', success(res) { // 下载成功 if (res.statusCode === 200) { wx.showLoading({ title: '下载中...' }) // 保存文件 wx.saveFile({ tempFilePath: res.tempFilePath, success(res) { // 打开文件 wx.openDocument({ filePath: res.savedFilePath }) }, fail() { // 保存失败 }, complete() { wx.hideLoading() } }) } }, fail() { // 下载失败 } }) ``` 需要注意的是,小程序内部的文件存储空间大小有限制,不能存储过大的文件。另外,部分文件类型可能无法直接在小程序中打开,需要根据文件类型选择合适的方式打开。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值