前言
主要介绍了好友列表、登录界面所涉及的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变量来访问这个响应式数据。
<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算法中的元素标识,确保每个用户卡片的唯一性和高效更新。
- 图片和用户名信息:展示每个用户的头像和用户名,以及粉丝数量。
{
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知识点!!!