Vue 3 + UniApp 实现列表展示页面和搜索页面

功能描述:

  1. 主页面 (Index.vue) 显示一个不可编辑的搜索框、项目总数和项目列表。
  2. 点击主页面的搜索框会导航到搜索页面 (Search.vue)。
  3. 搜索页面包含一个可编辑的搜索框和项目列表。
  4. 在搜索页面输入内容时,会调用后端 API 获取匹配的项目数据。
  5. 项目列表使用单独的组件 (ProjectList.vue) 来展示,可以在两个页面中复用。

使用Vue 3 + UniApp 实现的列表展示页面和搜索页面的示例:

  1. 首先,创建一个 types.ts 文件来定义项目类型:
// types.ts
export interface Project {
  id: number;
  name: string;
  description: string;
}
  1. 创建一个 api.ts 文件来处理 API 请求:
// api.ts
import axios from 'axios';
import { Project } from './types';

const instance = axios.create({
  baseURL: 'https://api.example.com',
});

export const searchProjects = async (query: string): Promise<Project[]> => {
  const response = await instance.get<Project[]>('/projects', { params: { q: query } });
  return response.data;
};
  1. 创建一个 ProjectList.vue 组件来展示项目列表:
<!-- ProjectList.vue -->
<template>
  <view class="project-list">
    <view v-for="project in projects" :key="project.id" class="project-item">
      <text class="project-name">{{ project.name }}</text>
      <text class="project-description">{{ project.description }}</text>
    </view>
  </view>
</template>

<script lang="ts" setup>
import { defineProps } from 'vue';
import { Project } from './types';

defineProps<{
  projects: Project[];
}>();
</script>

<style scoped>
.project-list {
  padding: 10px;
}
.project-item {
  margin-bottom: 10px;
}
.project-name {
  font-weight: bold;
}
.project-description {
  font-size: 14px;
  color: #666;
}
</style>
  1. 创建主页面 Index.vue
<!-- Index.vue -->
<template>
  <view class="container">
    <view class="search-bar" @tap="navigateToSearch">
      <input class="search-input" type="text" placeholder="请输入项目名" disabled />
    </view>
    <view class="total-count">
      总项目数: {{ projects.length }}
    </view>
    <project-list :projects="projects" />
  </view>
</template>

<script lang="ts" setup>
import { ref, onMounted } from 'vue';
import { searchProjects } from './api';
import { Project } from './types';
import ProjectList from './ProjectList.vue';

const projects = ref<Project[]>([]);

onMounted(async () => {
  projects.value = await searchProjects('');
});

const navigateToSearch = () => {
  uni.navigateTo({ url: '/pages/search/search' });
};
</script>

<style scoped>
.container {
  padding: 20px;
}
.search-bar {
  background-color: #f0f0f0;
  padding: 10px;
  border-radius: 5px;
  margin-bottom: 10px;
}
.search-input {
  width: 100%;
}
.total-count {
  margin-bottom: 10px;
  font-weight: bold;
}
</style>
  1. 创建搜索页面 Search.vue
<!-- Search.vue -->
<template>
  <view class="container">
    <view class="search-bar">
      <input
        class="search-input"
        type="text"
        v-model="searchQuery"
        placeholder="请输入项目名"
        @input="handleSearch"
      />
    </view>
    <project-list :projects="searchResults" />
  </view>
</template>

<script lang="ts" setup>
import { ref } from 'vue';
import { searchProjects } from './api';
import { Project } from './types';
import ProjectList from './ProjectList.vue';

const searchQuery = ref('');
const searchResults = ref<Project[]>([]);

const handleSearch = async () => {
  if (searchQuery.value.trim()) {
    searchResults.value = await searchProjects(searchQuery.value);
  } else {
    searchResults.value = [];
  }
};
</script>

<style scoped>
.container {
  padding: 20px;
}
.search-bar {
  background-color: #f0f0f0;
  padding: 10px;
  border-radius: 5px;
  margin-bottom: 10px;
}
.search-input {
  width: 100%;
}
</style>

关注微信公众号温暖前端,不定期分享前端知识点和前端资料↓↓↓

Vue3+uni-app实现微信小程序登录流程主要分为以下步骤: 1. 在uni-app项目中安装并引入微信小程序登录插件(如wxlogin),在main.js中初始化并配置插件参数。 2. 创建一个登录页面,该页面包含点击按钮触发微信登录的操作,可以通过uni.login()方法调用微信小程序登录接口获取code。 3. 接收到微信小程序登录接口返回的code后,将code发送给后端服务器,后端服务器将code和小程序的App ID以及App Secret发送给微信服务器进行登录凭证校验,获取到session_key和openid。 4. 服务器根据openid和session_key生成一个自定义的token,返回给前端。 5. 前端将token保存在本地,使用uni.setStorage()方法进行存储,以便后续的登录状态维持和接口请求验证。 6. 在需要登录验证的页面或组件中,通过uni.getStorage()方法获取本地存储的token,并将token添加到请求头中,发送给后端服务器进行接口请求。 7. 后端服务器接收到带有token的请求,对token进行校验和解析,验证token是否有效,从而确保用户的登录状态。 总结:通过以上步骤,实现Vue3+uni-app微信小程序的登录流程。用户通过点击按钮触发微信小程序登录接口,后端服务器校验登录凭证,生成token并返回给前端,前端保存token并在请求接口时携带token进行验证,保证了用户的登录状态和接口访问权限的安全性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

温暖前端

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值