• 【Vue项目】面包屑处理品牌信息


    需求

    点击品牌图片,实现:品牌相关的数据展示和面包屑出现该字段,并可以删除该字段再渲染

    思路

    面包屑放在了Search这个组件里,品牌放在了SearchSelector组件中,SearchSelector是Search的子组件。

    现在考虑点击SearchSelector组件里的某个品牌(以“华为”举例),将“华为”这个品牌信息传递给父组件Search组件的面包屑中。那么要如何实现?

    1.子传父 考虑用自定义事件 给子组件SearchSelector绑定tradeMarkHandler事件

    SearchSelector组件相关代码:

    1. <template>
    2. <ul class="logo-list">
    3. <li v-for="(trademark,index) in trademarkList"
    4. :key="trademark.tmId"
    5. @click="tradeMarkHandler(trademark)">
    6. {{trademark.tmName}}
    7. </li>
    8. </ul>
    9. </template>
    10. <script>
    11. import {mapGetters} from "vuex";
    12. export default {
    13. name: 'SearchSelector',
    14. computed:{
    15. ...mapGetters(["trademarkList","attrsList"]),
    16. },
    17. props:[''],
    18. methods: {
    19. // 品牌处理事件函数
    20. tradeMarkHandler(trademark){
    21. this.$emit("trademarkInfo",trademark)
    22. }
    23. },
    24. }
    25. </script>

    在Search组件中 相关代码:

    1. <template>
    2. <ul>
    3. <li class="with-x" v-if="searchParams.trademark">
    4. {{searchParams.trademark.split(':')[1]}}
    5. <i @click="removeTrademark">×</i>
    6. </li>
    7. </ul>
    8. </template>
    9. <script>
    10. import SearchSelector from "./SearchSelector/SearchSelector";
    11. import { mapGetters } from "vuex";
    12. export default {
    13. name: "Search",
    14. components: {earchSelector},
    15. methods: {
    16. getData() {
    17. //问服务器发请求获取search模块数据(根据参数不同返回不同的数据进行展示)
    18. //把这次请求封装为一个函数:当你需要在调用的时候调用即可
    19. this.$store.dispatch("getSearchList", this.searchParams);
    20. },
    21. trademarkInfo(trademark){
    22. // 点击了品牌(苹果),还是需要整理参数,向服务器发请求获取相应的数据进行展示
    23. // 问题:在那个组件中发请求,父组件?
    24. // 为什么? 因为父组件中searchPanams参数是带给服务器参数,子组件组件把你点击的品牌的信息,需要给父组件传递过去---自定义事件
    25. //console.log("我是父组件",trademark);
    26. //1:整理品牌字段的参数“ID:品牌名称"
    27. this.searchParams.trademark = `${trademark.tmId}:${trademark.tmName}`;
    28. //再次发请求获取search模块列表数据进行展示
    29. this.getData();
    30. },
    31. //删除品牌的信息
    32. removeTrademark(){
    33. // 将品牌信息置空
    34. this.searchParams.trademark = undefined;
    35. // 再次发请求
    36. this.getData();
    37. }
    38. },
    39. };
    40. </script>

    console.log("我是父组件",trademark);//确定父组件可以收到子组件传递过来的trademark字段,是一个对象,里面有tmId和tmName等我们需要的字段

    2.按照接口文档,将品牌字段的参数整理为“ID:品牌名称”,并且渲染到页面

     this.searchParams.trademark = `${trademark.tmId}:${trademark.tmName}`;

    this.getData();

    3.这个时候,父组件里的面包屑已有我们点击品牌(“华为”)的字段了,只不过显示出来为“3:华为”,我们不需要前面的序号id,故使用split切割,以便得到我们想要“华为”。

    {{searchParams.trademark.split(':')[1]}}

    4.功能继续优化,点击“x”,可以关闭“华为”,继续渲染出合理的筛选到的页面。

    给<i @click="removeTrademark">×</i>绑定面包屑移除事件。methods里面写:

    1. removeTrademark(){
    2. // 将品牌信息置空
    3. this.searchParams.trademark = undefined;
    4. // 再次发请求
    5. this.getData();

  • 相关阅读:
    css知识学习系列(9)-每天10个知识点
    Java Integer parseInt(String s, int radix)方法具有什么功能呢?
    CSGO社区服务器开服架设搭建教程windows服务器什么配置的合适国际服
    面试面到了一个腾讯30k出来的,有见识到何为精通MySQL调优
    计算机毕业论文java毕业设计选题源代码javaweb企业门户网站官网
    全志H616芯片 以太网模块初始化失败如何解决?
    视频剪辑高手的秘诀:如何从视频中提取封面,提高视频点击率
    过来人:玩游戏不如做游戏,会上瘾的建模工作
    BGP感想
    华为机试:敏感字段加密
  • 原文地址:https://blog.csdn.net/weixin_56035334/article/details/125408218