如何在uniapp中实现搜索功能

1. 前言

在开发一个包含数据展示的应用中,搜索功能是必不可少的一项功能。在uniapp中,我们可以通过一些插件或者自己编写代码实现搜索功能。本文将会介绍如何在uniapp中利用uCharts插件和vuex实现搜索。

2. uCharts插件的集成

2.1 uCharts插件介绍

uCharts是一个提供在uniapp和微信小程序中使用的图表库。官方提供了多种图表类型,并且可以通过配置进行图表的自定义样式。本文需要用到的是uSearch组件,可以实现输入框联想搜索和清空功能。

2.2 uCharts插件的引入

在uniapp项目中,我们可以通过npm安装uCharts插件,并通过Vue.use()方法将其引入。安装命令如下:

npm install ucharts --save

然后在main.js中进行引入:

import uCharts from '@/lib/u-charts/u-charts.js';

Vue.use(uCharts);

3. 编写搜索组件

3.1 搜索框的实现

搜索框可以使用uni-ui中的输入框组件,需要在template中进行声明。需要注意的是,搜索框的输入会触发vuex中的action,并触发搜索结果的更新,因此需要给输入框绑定一个onInput方法:

<template>

<view class="search">

<view class="uni-input search-input">

<uni-icons type="search" class="input-icon"></uni-icons>

<input class="input-field" type="text" placeholder="请输入搜索关键字" :value="searchValue" @input="onInput">

<uni-icons type="clear" class="clear-icon" @tap="onClear"></uni-icons>

</view>

</view>

</template>

<script>

import { mapState, mapMutations, mapActions } from 'vuex';

export default {

data() {

return {

searchValue: ''

};

},

computed: {

...mapState(['searchResult'])

},

methods: {

...mapMutations(['updateSearchValue']),

...mapActions(['search']),

onInput(e) {

this.updateSearchValue(e.target.value);

this.search();

},

onClear() {

this.updateSearchValue('');

this.search();

}

}

};

</script>

在data中声明了searchValue,代表了搜索框内的输入值,在计算属性中声明了searchResult,代表了搜索后的结果,在methods中声明了onInput和onClear方法,onInput方法会触发更新搜索值并触发搜索结果的更新,onClear方法会清空搜索框。

3.2 vuex的实现

在本例中,搜索框的输入会触发vuex中的action更新搜索结果。在store中实现search和updateSearchValue方法:

// store/search.js

const state = {

searchValue: '',

searchResult: []

};

const mutations = {

updateSearchValue(state, val) {

state.searchValue = val;

},

updateSearchResult(state, result) {

state.searchResult = result;

}

};

const actions = {

search({ commit, state }) {

// ...search logic

commit('updateSearchResult', result);

}

};

export default {

namespaced: true,

state,

mutations,

actions

};

在state中声明了searchValue和searchResult,对应了搜索框的输入和搜索结果。在mutations中声明了updateSearchValue和updateSearchResult方法,分别更新了搜索值和搜索结果。在actions中声明了search方法,触发搜索逻辑,更新搜索结果。

4. uCharts插件的使用

4.1 uSearch组件的实现

uSearch组件需要在template中进行声明。组件中包含了一个uBar图表,用于展示搜索结果的数量和关键字,以及一个输入框,用于进行输入和清空操作。需要传入title和subtitle属性作为图表的标题和副标题,以及opts属性作为图表的配置项:

<template>

<u-Search

:title="chartTitle"

:subtitle="chartSubtitle"

:opts="chartOpts"

:keys="keys">

</u-Search>

</template>

<script>

import uSearch from '@/lib/u-charts/components/u-search.vue';

import { mapState } from 'vuex';

export default {

components: { uSearch },

computed: {

...mapState(['searchResult'])

},

data() {

return {

chartTitle: '搜索结果',

chartSubtitle: '',

chartOpts: {

yAxis: {

minInterval: 1

}

},

keys: []

};

},

watch: {

searchResult(result) {

this.onResult(result);

}

},

methods: {

onResult(result) {

let keys = [];

let data = [];

result.forEach(item => {

keys.push(item.keyword);

data.push(item.count);

});

this.keys = keys;

this.chartOpts.series = [{

type: 'bar',

data

}];

}

}

};

</script>

在computed中声明了searchResult,代表了搜索后的结果,在data中声明了chartTitle、chartSubtitle、chartOpts和keys,分别代表了图表的标题、副标题、配置项和关键字。在watch中监听了searchResult的变化,在onResult方法中从搜索结果中获取关键字和数量,并设置了对应的图表配置项。

4.2 uSearch组件的样式

uSearch组件的样式可以在style中进行自定义。下面是一份样式示例:

.search {

margin-bottom: 20rpx;

.search-input {

display: flex;

align-items: center;

background-color: #fff;

margin: 0 20rpx;

border-radius: 10rpx;

box-shadow: 0 0 5rpx 0 rgba(0,0,0,0.25);

.input-icon {

font-size: 24rpx;

margin-left: 20rpx;

color: #ccc;

}

.input-field {

font-size: 24rpx;

flex: 1;

padding: 20rpx 0;

border: none;

border-radius: 10rpx;

outline: none;

background-color: #fff;

}

.clear-icon {

font-size: 24rpx;

color: #ccc;

}

}

}

.u-search {

display: flex;

flex-direction: column;

align-items: center;

.u-chart {

width: 90%;

height: 400rpx;

margin-top: 20rpx;

background-color: #fff;

border-radius: 10rpx;

box-shadow: 0 0 5rpx 0 rgba(0,0,0,0.25);

}

.u-search-bar {

display: flex;

align-items: center;

justify-content: center;

height: 100rpx;

font-size: 24rpx;

font-weight: bold;

color: #000;

}

}

5. 结语

通过以上步骤的实现,我们可以在uniapp中实现搜索功能,并能够通过uCharts插件对搜索结果进行图表展示。这个实现过程中,我们主要使用了uCharts插件和vuex,让我们在进行数据状态管理和可视化的展示时非常得心应手。希望这篇文章对大家有所帮助。