搜索
创建 search 分支
运行如下的命令,基于 master 分支在本地创建 search 子分支,用来开发搜索相关的功能:git checkout -b search
1 自定义搜索组件
1.1 自定义 my-search 组件
-
在项目根目录创建
components
目录上,鼠标右键,选择新建组件
,填写组件信息后,最后点击创建
按钮: -
在分类页面的 UI 结构中,直接以标签的形式使用
my-search
自定义组件:<!-- 使用自定义的搜索组件 --> <my-search></my-search>
-
定义
my-search
组件的 UI 结构如下:<template> <view class="my-search-container"> <!-- 使用 view 组件模拟 input 输入框的样式 --> <view class="my-search-box"> <uni-icons type="search" size="17"></uni-icons> <text class="placeholder">搜索</text> </view> </view> </template>
注意:在当前组件中,我们使用 view 组件模拟 input 输入框的效果;并不会在页面上渲染真正的 input 输入框
-
由于自定义的
my-search
组件高度为50px
,因此,需要重新计算分类页面窗口的可用高度:onLoad() { const sysInfo = uni.getSystemInfoSync() // 可用高度 = 屏幕高度 - navigationBar高度 - tabBar高度 - 自定义的search组件高度 this.wh = sysInfo.windowHeight - 50 }
1.2 通过自定义属性增强组件的通用性
为了增强组件的通用性,我们允许使用者自定义搜索组件的 背景颜色
和 圆角尺寸
。
-
通过
props
定义bgcolor
和radius
两个属性,并指定值类型和属性默认值:props: { // 背景颜色 bgcolor: { type: String, default: '#C00000' }, // 圆角尺寸 radius: { type: Number, // 单位是 px default: 18 } }
-
通过属性绑定的形式,为
.my-search-container
盒子和.my-search-box
盒子动态绑定style
属性:<view class="my-search-container" :style="{'background-color': bgcolor}"> <view class="my-search-box" :style="{'border-radius': radius + 'px'}"> <uni-icons type="search" size="17"></uni-icons> <text class="placeholder">搜索</text> </view> </view>
-
移除对应
scss
样式中的背景颜色
和圆角尺寸
:
1.3 为自定义组件封装 click 事件
-
在
my-search
自定义组件内部,给类名为.my-search-box
的view
绑定click
事件处理函数:<view class="my-search-box" :style="{'border-radius': radius + 'px'}" @click="searchBoxHandler"> <uni-icons type="search" size="17"></uni-icons> <text class="placeholder">搜索</text> </view>
-
在
my-search
自定义组件的methods
节点中,声明事件处理函数如下:methods: { // 点击了模拟的 input 输入框 searchBoxHandler() { // 触发外界通过 @click 绑定的 click 事件处理函数 this.$emit('click') } }
-
在分类页面中使用
my-search
自定义组件时,即可通过@click
为其绑定点击事件处理函数:<!-- 使用自定义的搜索组件 --> <my-search @click="gotoSearch"></my-search>
同时在分类页面中,定义
gotoSearch
事件处理函数如下:(在分包文件夹创建search页面后)methods: { // 跳转到分包中的搜索页面 gotoSearch() { uni.navigateTo({ url: '/subpkg/search/search' }) } }
1.4 实现首页搜索组件的吸顶效果
- 顶部搜索组件不加控制会随页面滚动消失
- 在 home 首页加自定义组件效果同上
-
通过如下的样式实现吸顶的效果:(一定要在组件外加一个view来修改样式)
.search-box { // 设置定位效果为“吸顶” position: sticky; // 吸顶的“位置” top: 0; // 提高层级,防止被轮播图覆盖 z-index: 999; }
-
- 开启掘金成长之旅!这是我参与「掘金日新计划 · 2 月更文挑战」的第 18天,点击查看活动详情