【Web开发手礼】探索Web开发的秘密(十三)-Vue(3)好友列表、登录

news2024/9/9 1:21:46

前言

主要介绍了好友列表、登录界面所涉及的vue知识点!!!


好友列表

从云端API读取数据信息

  • 地址 https://app165.acapp.acwing.com.cn/myspace/userlist/
  • 方法:GET
  • 是否验证jwt:否
  • 输入参数:无
  • 返回结果:返回10个用户的信息

首先,我们需要先下载jquery

npm install jquery

<script>
import ContentBase from '@/components/ContentBase.vue';
import $ from "jquery";
import { ref } from 'vue'; 

export default{
    name: "UserListView",
    components: {
        ContentBase
    },
    setup(){
        let users = ref([]);
        $.ajax({
            url: "https://app165.acapp.acwing.com.cn/myspace/userlist/",
            type: "get",
            success(resp){
                console.log(resp);
            }
        });
        return{
            users
        }
    }
}
</script>

使用jQuery的ajax方法发送一个GET请求到指定的URL(“https://app165.acapp.acwing.com.cn/myspace/userlist/”)。在请求成功时,会执行定义的success回调函数,将服务器返回的数据resp打印到控制台。
将users作为setup()函数的返回值,使其在组件中可以通过解构或者直接使用users变量来访问这个响应式数据。
Alt

<template>
    <ContentBase>
        <div class="card" v-for="user in users " :key="user.id">
            <div class="card-body">
                <div class="row">
                    <div class="col-1">
                        <img class="img-fluid" :src="user.photo" alt="头像">
                    </div>
                    <div class="col-11">
                        <div class="username">
                            {{ user.username }}
                        </div>
                        <div class="follow-count">
                            {{ user.followerCount }}
                        </div>
                    </div>
                </div>
            </div>
        </div>
    </ContentBase>
</template>

<script>
import ContentBase from '@/components/ContentBase.vue';
import $ from "jquery";
import { ref } from 'vue'; 

export default{
    name: "UserListView",
    components: {
        ContentBase
    },
    setup(){
        let users = ref([]);// 创建一个响应式数据users,初始为空数组

        $.ajax({
            url: "https://app165.acapp.acwing.com.cn/myspace/userlist/",
            type: "get",
            success(resp){
                users.value = resp;// 将从服务器获取的用户数据赋值给users
            }
        });
        return{
            users
        }
    }
}
</script>

<style scoped>
img{
    border-radius: 50%;/* 圆形头像效果 */
}
.username{
    font-weight: bold;/* 用户名加粗显示 */
    height: 50%; /* 用户名和粉丝数量各占一半高度 */
}
.follow-count{
    font-size: 12px;/* 粉丝数量的字体大小 */
    color: gray;/* 粉丝数量灰色显示 */
    height: 50%;/* 用户名和粉丝数量各占一半高度 */
}

.card{
    margin-bottom: 20px;/* 卡片之间的间距 */
    cursor: pointer;/* 鼠标悬停时显示手型指示 */

}
.card:hover{
    box-shadow: 2px 2px 10px lightgray;/* 鼠标悬停时的阴影效果 */
    transition: 500ms;/* 过渡效果,让阴影变化平滑 */
}
</style>
  • :使用Vue.js的v-for指令遍历users数组中的每个用户对象,并为每个用户生成一个卡片。:key="user.id"用于Vue的虚拟DOM算法中的元素标识,确保每个用户卡片的唯一性和高效更新。
  • 图片和用户名信息:展示每个用户的头像和用户名,以及粉丝数量。
    Alt
{
    path: '/userprofile/:userId',
    name: 'userprofile',
    component: UserProfileView
  },

path: ‘/userprofile/:userId’:定义了一个路由路径,其中:userId是动态路径参数,表示这个路由可以匹配类似 /userprofile/123 这样的URL,其中 123 是实际的用户ID。动态路径参数可以通过 $route.params.userId 在组件内部访问。

<router-link class="nav-link" :to="{name: 'userprofile', params: {userId: 2}}">用户动态</router-link>

import { useRoute } from 'vue-router';
		<!--setup函数内部-->
		const router = useRoute();
        const userId = router.params.userId;
  • :to=“{name: ‘userprofile’, params: {userId: 2}}”::to 是 Vue Router 的一个 prop,用来指定导航的目标路由。在这里,它指向名为 ‘userprofile’ 的路由,并且传递了一个动态参数 userId: 2。这意味着当用户点击这个链接时,会导航到 /userprofile/2 这个路径,其中 2 是用户的ID。
  • useRoute 是 Vue Router 提供的一个钩子函数,用于在组件内部获取当前路由的信息。
  • const router = useRoute();:调用 useRoute() 后返回的 router 对象包含了当前路由的各种信息,包括 params 对象,其中包含了动态路由参数。
  • const userId = router.params.userId;:这里通过 router.params.userId 获取到了路由中动态参数 userId 的值。在这个例子中,如果当前路径是 /userprofile/2,则 userId 的值将是 2。

登录

<template>
    <ContentBase>
        <div class="row justify-content-md-center">
            <div class="col-3">
                <form @submit.prevent="login">
                    <div class="mb-3">
                        <label for="username" class="form-label">用户名</label>
                        <input v-model="username" type="text" class="form-control" id="username" >
                    </div>
                    <div class="mb-3">
                        <label for="password" class="form-label">密码</label>
                        <input v-model="password" type="password" class="form-control" id="password">
                    </div>
                    <div class="error-message">{{ error_message }}</div>
                    <button type="submit" class="btn btn-primary">登录</button>
                </form>
            </div>
        </div>
        
    </ContentBase>
</template>

<script>
import ContentBase from '@/components/ContentBase.vue';
import { ref } from 'vue';

export default{
    name: "LoginView",
    components: {
        ContentBase
    },
    setup(){
        let username = ref('');
        let password = ref('');
        let error_message = ref('');
        const login = () => {

        }
        return{
            username: username,
            password: password,
            error_message: error_message,
            login
        }
    }
}
</script>

<style scoped>
button{
    width: 100%;
}
.error-message{
    color: red;
}
</style>

  • @submit.prevent=“login”:当表单提交时,调用 login 方法并阻止默认的表单提交行为。
  • 双向绑定 v-model 用于绑定 username 和 password 到输入框的值。
  • error_message 用于显示登录过程中的错误信息。
  • import { ref } from ‘vue’; 引入了 Vue 3 中的 ref 函数,用于创建响应式引用。
  • setup() 是 Vue 3 中的新语法,用于设置组件的响应式数据和方法。
  • 在 setup() 中,使用 ref() 创建了 username、password 和 error_message 这三个响应式变量。
  • login() 方法定义了登录函数的空壳,需要根据实际情况填充逻辑来处理用户提交的用户名和密码。
  • return { … } 返回了组件中需要在模板中使用的数据和方法,包括 username、password、error_message 和 login。
import { createStore } from 'vuex'

export default createStore({
  state: {
    user: {
      username: "",
      id:'',
      firstName: '',
      lastName: ''
    }
  },
  getters: {
    fullName(state){
      return state.user.firstName + state.user.lastName;
    }
  },
  mutations: {
    updateUser(state,user){
      state.user.username = user.username;
    }
  },
  actions: {
    updateUser(context){
      let resp;
    },
  },
  modules: {
  }
})

  • 使用了 createStore 函数从 Vuex 中导入,并且这个函数被用来创建一个 Vuex 的 store 实例。
  • state 对象包含应用的状态数据。
  • 定义了一个 user 对象,包含了用户的基本信息,如 username、id、firstName 和 lastName。
  • getters 是用来从 store 中的 state 中获取数据的方法。
  • 定义了一个 fullName 的 getter,它会返回 firstName 和 lastName 拼接成的完整名字。
  • mutations 是用来修改 store 中的 state 的方法。
  • 定义了一个 updateUser 的 mutation,它接收一个 user 对象作为参数,用来更新 state.user.username。
  • actions 类似于 mutations,不同之处在于它提交的是 mutation,而不是直接变更 state。
  • updateUser action 通常用来处理异步操作,例如调用 API 后再提交 mutation。
  • modules 可以用来将 store 分割成模块,目前未定义任何模块。

Vuex store 实例包含了一个简单的 user 对象作为应用的状态,以及对应的 getters、mutations 和 actions。可以用来管理用户信息,并提供了获取完整名字和更新用户名的功能。增加更多的 state 属性、mutations 和 actions,来实现复杂的状态管理和业务逻辑。


总结

主要介绍了好友列表、登录界面所涉及的vue知识点!!!


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1958969.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

C++自定义接口类设计器

关键代码 #include "mainwindow.h" #include "ui_mainwindow.h" #include <QStringListModel>MainWindow::MainWindow(QWidget *parent): QMainWindow(parent), ui(new Ui::MainWindow) {ui->setupUi(this);// C基础数据类型列表QStringList typ…

求.netcore 按模板导出pdf免费插件,来谈谈。

&#x1f3c6;本文收录于《CSDN问答解惑-专业版》专栏&#xff0c;主要记录项目实战过程中的Bug之前因后果及提供真实有效的解决方案&#xff0c;希望能够助你一臂之力&#xff0c;帮你早日登顶实现财富自由&#x1f680;&#xff1b;同时&#xff0c;欢迎大家关注&&收…

图书管理系统设计

设计一个图书管理系统时&#xff0c;我们需要考虑系统的基本功能、用户需求、技术选型以及数据的安全性和完整性。下面是一个基本的图书管理系统的设计概览&#xff1a; 1. 系统目标 管理图书信息&#xff1a;添加、删除、修改图书信息。借阅管理&#xff1a;处理借书、还书流…

低代码应用版本管理能力探讨

低代码平台为开发者提供易用的可视化、定制化开发能力&#xff0c;无需编写原生代码或者只有少量代码编写就能实现需求&#xff0c;从而带来开发门槛的降低&#xff0c;开发效率的提升。低代码作为提升应用研发生产力的关键型技术&#xff0c;成为企业数字化转型的助推器。 低代…

StarRock3.3 安装部署(存算分离、存算一体保姆式教程)

服务器前置要求&#xff1a; 1、内存>32GB 2、JDK 8 is not supported, please use JDK 11 or 17 1、安装 wget https://releases.starrocks.io/starrocks/StarRocks-3.3.0.tar.gz tar zxvf StarRocks-3.3.0.tar.gz 2、FE服务启动 2.1 配置FE节点(默认配置&#xff0c;…

C#知识|文件与目录操作:文本读写操作

哈喽,你好啊,我是雷工! 今天学习文件与目录的操作,以下为文本读写操作的学习笔记。 01 文件操作说明 1.1、数据的存取方式 数据库:适合存取大量且关系复杂并有序的数据; 文件:适合存取大量但数据关系简单的数据,像系统的日志文件; 1.2、文件存取的优点 ①:读取操…

根据ip地址能查询出具体地址吗?

在数字化时代&#xff0c;互联网已成为我们日常生活不可或缺的一部分&#xff0c;而IP地址作为网络世界的“身份证”&#xff0c;承载着每一台设备在网络中的唯一标识。你是否曾经好奇&#xff0c;通过一串看似无意义的数字组合——IP地址&#xff0c;我们究竟能否揭开其背后的…

springboot校园失物招领系统-计算机毕业设计源码17082

目 录 摘要 1 绪论 1.1 研究背景 1.2 研究意义 1.3论文结构与章节安排 2 相关技术介绍 2.1 B/S结构 2.2 Spring Boot框架 2.3 MySQL数据库 3系统分析 3.1 可行性分析 3.2 系统流程分析 3.2.1 数据新增流程 3.2.2 数据删除流程 3.3 系统功能分析 3.3.1 功能性分…

解决亚马逊测评困境:买家号支付失败与砍单率高的应对策略

在销售旺季期间&#xff0c;众多商家倾向于采用自建买家账号进行产品评价&#xff0c;以期快速提升产品权重。然而&#xff0c;不少商家在此过程中遭遇了订单无法成功提交或遭遇高比例订单取消的困境。部分商家首先怀疑的是支付卡的问题&#xff0c;也有部分认为IP地址可能已被…

拥抱人工智能浪潮,95后如何为未来职场做好准备?

随着毕业季的落幕&#xff0c;新一代青年力量步入社会&#xff0c;他们面临的是一个正在被人工智能深刻改变的劳动力市场。特别是对于“95后”这一群体&#xff0c;如何在即将席卷而来的人工智能革命中站稳脚跟&#xff0c;甚至乘风破浪&#xff0c;成为摆在他们面前的重要课题…

在 Kali Linux 虚拟机中实现主机代理共享的详细指南

Kali Linux 是网络安全和渗透测试领域中广泛使用的操作系统。它提供了丰富的工具和灵活的环境&#xff0c;适合各种网络安全任务。在某些情况下&#xff0c;您可能需要通过主机的代理服务器来实现特定的网络配置&#xff0c;以便更好地保护隐私或进行网络测试。这篇文章将详细介…

昇思25天学习打卡营第18天|xiaoyushao

今天分享基于MobileNetv2的垃圾分类。读取本地图像数据作为输入&#xff0c;对图像中的垃圾物体进行检测&#xff0c;并且将检测结果图片保存到文件中。 目录 一、 MobileNetv2模型原理介绍 二、 数据处理 1. 数据准备 2. 数据加载 3. 数据预处理 三、 MobileNetv2模型搭建 四、…

Redis 7.x 系列【34】Spring Boot 集成

有道无术&#xff0c;术尚可求&#xff0c;有术无道&#xff0c;止于术。 本系列Redis 版本 7.2.5 源码地址&#xff1a;https://gitee.com/pearl-organization/study-redis-demo 文章目录 1. 前言2. Spring Data Redis3. Spring Boot Data Redis Starter3.1 起步依赖3.2 自动…

精品PPT | 微信云原生大数据平台构建及落地实践.pptx

一、大数据上云概述 1.为什么大数据要上云 2.微信大数据平台架构演进 二、大数据上云基础建设 1.统一编排 2.Pod 设计及大数据配套能力 3.计算组件云环境适配 三、稳定性及效率提升 1.K8S 集群稳定性与弹性配额 2.可观测性与智能运维

Java学习笔记(六)面向对象编程(基础部分)

Hi i,m JinXiang ⭐ 前言 ⭐ 本篇文章主要介绍Java面向对象编程&#xff08;基础部分&#xff09;类与对象、方法重载、作用域、构造器细节、this关键字、可变参数使用以及部分理论知识 &#x1f349;欢迎点赞 &#x1f44d; 收藏 ⭐留言评论 &#x1f4dd;私信必回哟&#x1…

C# 12 新增功能实操!

前言 今天咱们一起来探索并实践 C# 12 引入的全新功能&#xff01; C#/.NET该如何自学入门&#xff1f; 注意&#xff1a;使用这些功能需要使用最新的 Visual Studio 2022 版本或安装 .NET 8 SDK 。 主构造函数 主构造函数允许你直接在类定义中声明构造函数参数&#xff0c;…

停车共享小程序的设计

管理员账户功能包括&#xff1a;系统首页&#xff0c;个人中心&#xff0c;用户管理&#xff0c;停车场管理&#xff0c;停车预约管理&#xff0c;停车缴费管理&#xff0c;系统管理 微信端账号功能包括&#xff1a;系统首页&#xff0c;停车场&#xff0c;我的 开发系统&…

主图趋势交易九稳量化系统 期货指标公式大全 最准的期货指标源码 看期货涨跌最简单的方法文华财经指标公式源码

交易的动机必须来自于内心&#xff0c;一种解决问题的执着。在整个交易生涯的漫长岁月里&#xff0c;无法始终保持这种热忱。除非亲身体验&#xff0c;否则很难理解这种疯狂的热忱。这是一种高度的专注&#xff0c;其他一切好像都不存在&#xff0c;视野之内没有其他的东西。这…

【STL】之 vector 使用方法及模拟实现

前言&#xff1a; 本文主要讲在C STL库中vector容器的使用方法和底层的模拟实现~ 成员变量的定义&#xff1a; 对于vector容器&#xff0c;我们首先采用三个成员变量去进行定义&#xff0c;分别是&#xff1a; private:iterator _start; // 指向数据块的开始iterator _finish…

论文解读(10)-图神经网络

加油&#xff0c;继续看论文。 这次学图神经网络&#xff0c;这个概念经常在其他论文里出现&#xff0c;所以我想先学习一下这方面的知识。 参考&#xff1a; 【图神经网络综述】一文道尽GNN原理、框架和应用-CSDN博客 【图神经网络】10分钟掌握图神经网络及其经典模型_图神经…