浪花 - 前端搜索页面设计+开发

一、搜索框组件

1. 新建视图组件 SearchPage.vue

注意!配置路由时引入组件的一个坑:路由对应组件导入错误

  • 错误原因:自定义组件和框架组件名字重复,可能会错把框架的组件给 import 进来

  • 解决:修改自定义组件的名称

2. 配置路由

  • 在路由配置文件中配置路由及对应的视图组件

3. 引入搜索框组件

  • 使用可以进行事件监听的 Search 组件
  • Search 组件提供了 search 和 cancel 事件,search 事件在点击键盘上的搜索/回车按钮后触发,cancel 事件在点击搜索框右侧取消按钮时触发
<form action="/">
  <van-search
    v-model="value"
    show-action
    placeholder="请输入搜索关键词"
    @search="onSearch"
    @cancel="onCancel"
  />
</form>
import { ref } from 'vue';
import { Toast } from 'vant';

export default {
  setup() {
    const value = ref('');
    const onSearch = (val) => Toast(val);
    const onCancel = () => Toast('取消');
    return {
      value,
      onSearch,
      onCancel,
    };
  },
};

4. 查看页面效果

5. 路由跳转的两种方法

方法一:编程式导航路由跳转

  • 点击顶部 NavBar 的搜索图标时应跳转到搜索页面,需要使用编程式导航
  • 使用步骤:​​​​​​​
    • 引入 vue-router 的 { useRouter } 

    • 使用 router.push("/search"),导航到搜索页面

    import {useRouter} from "vue-router";
    
    const router = useRouter();
    
    const onClickLeft = () => {
      router.push('/search');
    };
  • router.push(...) 介绍:该方法的参数可以是一个字符串路径,或者一个描述地址的对象
// 字符串路径
router.push('/users/eduardo')

// 带有路径的对象
router.push({ path: '/users/eduardo' })

// 命名的路由,并加上参数,让路由建立 url
router.push({ name: 'user', params: { username: 'eduardo' } })

// 带查询参数,结果是 /register?plan=private
router.push({ path: '/register', query: { plan: 'private' } })

// 带 hash,结果是 /about#team
router.push({ path: '/about', hash: '#team' })

 方法二:声明式路由跳转

  • 使用 <router-link> 创建 a 标签来定义导航链接
  • 设置 to 的值指定要跳转到的路由

二、已选标签布局设计

1. 选择 “可关闭的标签” 组件进行引入

<van-tag :show="true" closeable size="medium" type="primary">
    标签
</van-tag>

<van-tag :show="true" closeable size="medium" type="primary">
    标签
</van-tag>

<van-tag :show="true" closeable size="medium" type="primary">
    标签
</van-tag>

2. 引入分割线组件

  • 通过 content-position 指定内容所在位置
<van-divider content-position="left">文字</van-divider>
<van-divider content-position="right">文字</van-divider>

3. 查看页面效果

三、可选标签布局设计

1. 选择 TreeSelect 多选模式的分类选择组件作为选择标签的组件

  • active-id:右侧选中项的 id,active-id 为数组格式时,可以选中多个右侧选项
  • main-active-index:左侧选中项的索引
  • items:分类所需显示的数据
  • max:右侧最大选中个数
  • selected-icon:自定义右侧栏选中状态的图标
<van-tree-select
  v-model:active-id="activeIds"
  v-model:main-active-index="activeIndex"
  :items="items"
/>
import { ref } from 'vue';

export default {
  setup() {
    const activeId = ref([1, 2]);
    const activeIndex = ref(0);
    const items = [
      {
        text: '浙江',
        children: [
          { text: '杭州', id: 1 },
          { text: '温州', id: 2 },
          { text: '宁波', id: 3, disabled: true },
        ],
      },
      {
        text: '江苏',
        children: [
          { text: '南京', id: 4 },
          { text: '无锡', id: 5 },
          { text: '徐州', id: 6 },
        ],
      },
      { text: '福建', disabled: true },
    ];

    return {
      items,
      activeId,
      activeIndex,
    };
  },
};

2. 查看页面效果

四、已选标签的绑定

1. 当用户选择标签后,要将所选标签展示在已选标签处

2. 通过组件提供的 activeIds 属性进行绑定

3. 使用 v-for 遍历 activeIds,并通过插值表达式展示标签数据

<van-tag v-for="tag in activeIds" :show="true" closeable size="medium" type="primary">
    {{ tag }}
</van-tag>

Vue 语法介绍:

  • v-for 指令
    • Vue 的内置指令
    • 用于在模板中进行循环渲染,它能够根据源数据的数组或对象来生成重复的元素或组件
    • 类似的指令还有 v-if、v-on 等
  • {{ msg }} 插值表达式
    • 最基本的数据绑定形式是文本插值,它使用的是“Mustache”语法 (即双大括号)
    • 双大括号标签会被替换为相应组件实例中 msg属性的值。同时每次 msg 属性更改时它也会同步更新。

4. 查看效果

附:v-for 学习示例

1. 遍历数组

<template>
  <ul>
    <li v-for="(item, index) in items" :key="index">
      {{ item }}
    </li>
  </ul>
</template>

2. 使用对象进行循环 

<template>
  <ul>
    <li v-for="(value, key, index) in object" :key="index">
      {{ key }}: {{ value }}
    </li>
  </ul>
</template>
  • 20
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值