• 前端论坛项目(九)------如何实现UserProfileInfo里面的关注按钮


    目录

    前言

    如何实现button标签的上图所示的变换?

    改进后的代码

    现在怎么通过鼠标的点击来控制显示相关的按钮呢?

    如何绑定并且触发相关的事件呢?

    如何在子组件中修改父组件的相关属性呢?


    前言

    像这种情况,我们没有关注,关注按钮显示的就是未关注。

    鼠标点击关注以后,相关的按钮就会显示已关注。

      

    如何实现button标签的上图所示的变换?

    方法:在相关的标签里面使用v-if的属性,只有满足v-if后面的条件这个标签才会显示出来。不满足就不会显示出来。

    改进后的代码

    先看看改进后的效果吧

    已经可以通过后台is_followed的数据的true和false显示关注按钮和取消关注按钮了。

    改进后的代码部分如下

    1. <template>
    2. <div class="card">
    3. <div class="card-body">
    4. <div class="row">
    5. <div class="col-3">
    6. <img src="https://cdn.acwing.com/media/user/profile/photo/200349_lg_080b3b050d.jpg"
    7. class="img-fluid" alt="">
    8. div>
    9. <div class="col-9 ">
    10. <div class="username">{{ fullName }}div>
    11. <div class="fans">粉丝:{{ user.followerCount }}div>
    12. <button v-if="user.is_followed" type="button" class="btn btn-secondary btn-sm">+取消关注button>
    13. <button v-if="!user.is_followed" type="button" class="btn btn-secondary btn-sm">+关注button>
    14. div>
    15. div>
    16. div>
    17. div>
    18. template>

    现在怎么通过鼠标的点击来控制显示相关的按钮呢?

    如何绑定并且触发相关的事件呢?

    在特定的事件上绑定相关要触发的函数:

    v-on:click或@click属性:绑定事件

    例子:

    <button @click="unfollow" v-if="user.is_followed" type="button"

    这里就将click事件中绑定unfollow函数

    子组件中触发父组件中绑定的函数:

    context.emit():触发父组件中绑定了相关函数的事件

    如何在子组件中修改父组件的相关属性呢?

    首先,在父组件中定义修改相关属性的函数,然后绑定在特定的事件之中。

    然后,在子组件中触发父组件里面绑定函数的事件(context.emit())来实现这一点。那么现在问题来了,我们如何触发父组件里面绑定的函数呢。 

    方法:context.emit():触发父组件绑定的函数

    相关的代码如下,

    1. setup(props, context) {
    2. let fullName = computed(() => props.user.firstName + " " + props.user.lastName);
    3. const follow = () => {
    4. context.emit('follow123');
    5. }
    6. const unfollow = () => {
    7. context.emit('unfollow123');
    8. }
    9. return {
    10. fullName,
    11. follow,
    12. unfollow,
    13. }
    14. }
    1. <script>
    2. import { reactive } from 'vue';
    3. import ContentBase from '../components/ContentBase';
    4. import UserProfileInfo from '../components/UserProfileInfo';
    5. import UserProfilePosts from '../components/UserProfilePosts';
    6. export default {
    7. name: "UserListView",
    8. components: {
    9. ContentBase,
    10. UserProfileInfo,
    11. UserProfilePosts
    12. },
    13. setup() {
    14. const user = reactive({
    15. id: 1,
    16. username: "小仙女",
    17. lastName: "仙女",
    18. firstName: "小",
    19. followerCount: 0,
    20. is_followed: false,
    21. });
    22. const follow = () => {
    23. if (user.is_followed) return;
    24. user.followerCount++;
    25. user.is_followed = true;
    26. }
    27. const unfollow = () => {
    28. if (!user.is_followed) return;
    29. user.followerCount--;
    30. user.is_followed = false;
    31. }
    32. return {
    33. user,
    34. follow,
    35. unfollow,
    36. }
    37. }
    38. }
    39. script>
    40. <style scoped>
    41. style>
  • 相关阅读:
    查询ES之细化需求实现多字段、范围过滤、加权和高亮
    大厂面试总被刨根问底?原来是性能优化不过关
    ubuntu2004桌面系统英伟达显卡驱动安装方法
    VoLTE端到端业务详解 | 无线侧接口及协议
    JAVA笔试面试必备输入输出语句
    makefile 调试
    团队难带测试管理太难做?十多位名企测试专家带你成为优秀管理
    你如何看待AIGC技术?
    【WINDOWS / DOS 批处理】字符串替换
    数据结构 循环队列
  • 原文地址:https://blog.csdn.net/QDQE232/article/details/126363740