vue尚品汇商城项目-day03【23.把首页当中的轮播图拆分为一个共用的全局组件】

简介: vue尚品汇商城项目-day03【23.把首页当中的轮播图拆分为一个共用的全局组件】

1.jpeg

23.把首页当中的轮播图拆分为一个共用的全局组件

切记:以后在开发项目的时候,如果看到某个组件在很多地方使用,你把它变成全局组件,注册一次,可以再任何地方使用,共用的组件|非路由组件放在components文件夹中。

注意点1:

问题:已经注册全局组件了,为啥还报错不认识?

src/main.js

//全局注册轮播图组件
import Carousel from "@/components/Carousel"
Vue.component(Carousel.name, Carousel)

src/components/Carousel/index.vue

<template>
  <div class="swiper-container" ref="mySwiper">
    <div class="swiper-wrapper">
      <div class="swiper-slide" v-for="carousel in list" :key="carousel.id">
        <img :src="carousel.imgUrl"/>
      </div>
    </div>
    <!-- 如果需要分页器 -->
    <div class="swiper-pagination"></div>

    <!-- 如果需要导航按钮 -->
    <div class="swiper-button-prev"></div>
    <div class="swiper-button-next"></div>
  </div>
</template>

<script>
import Swiper from "swiper"

export default {
  name: "carousel",
  props: ["list"],
  watch: {
    //方watch + nextTick
    list: {
      immediate: true,
      handler(newValue, oldValue) {
        this.$nextTick(() => {
          var mySwiper = new Swiper('.swiper-container', {
            loop: true, // 循环模式选项

            // 如果需要分页器
            pagination: {
              el: '.swiper-pagination',
              clickable: true, //此参数设置为true时,点击分页器的指示点分页器会控制Swiper切换。
            },

            // 如果需要前进后退按钮
            navigation: {
              nextEl: '.swiper-button-next',
              prevEl: '.swiper-button-prev',
            },

            // 如果需要滚动条
            scrollbar: {
              el: '.swiper-scrollbar',
            },
          })
        });
      }
    }
  }
}
</script>

<style scoped>

</style>

image.png

答案:注册那里没问题, 问题出在自定义组件Carousel的name属性是小写,name: "carousel",所以只能把carousel变成首字母大写的name: "Carousel"即可。

注意点2:

问题:原来ListContainer组件的监视属性watch没有配置immediate: true,,为啥汇总后要多配置这个?

答案:因为原来ListContainer组件和Floor组件内的轮播图方法不一样,原来ListContainer组件不用动没问题,但是Floor组件内将mounted()改为watch方法时发现监听不到floorItem,为什么监听不到floorItem值改变呢?因为floorItem是在父组件Home中传递进来的,压根不是异步调用赋值的,所以floorItem值压根就没改变过所以不会触发原Floor组件内的swiper实例化操作,而加上immediate: true的属性就代表无论floorItem值改变不改变,watch方法都会触发一遍。

目录
相关文章
|
9月前
|
缓存 JavaScript
vue中的keep-alive问题(2)
vue中的keep-alive问题(2)
669 137
|
10月前
|
JavaScript
Vue中如何实现兄弟组件之间的通信
在Vue中,兄弟组件可通过父组件中转、事件总线、Vuex/Pinia或provide/inject实现通信。小型项目推荐父组件中转或事件总线,大型项目建议使用Pinia等状态管理工具,确保数据流清晰可控,避免内存泄漏。
795 2
|
JavaScript 安全
在 Vue 中,如何在回调函数中正确使用 this?
在 Vue 中,如何在回调函数中正确使用 this?
590 0
|
JavaScript 测试技术 容器
Vue2+VueRouter2+webpack 构建项目
1). 安装Node环境和npm包管理工具 检测版本 node -v npm -v 图1.png 2). 安装vue-cli(vue脚手架) npm install -g vue-cli --registry=https://registry.
1393 0
|
网络协议 数据安全/隐私保护 网络虚拟化
深入了解OSI模型:计算机网络的七大层次
OSI模型 OSI模型是一个网络通信的概念模型,用于描述计算机网络中各个不同层次之间的通信和功能。它将网络通信分为七个不同的层次,每个层次负责不同的任务,使得网络通信的设计、开发和管理更加模块化和可维护。以下是OSI模型的七个层次以及它们的主要功能: 1、物理层(Physical Layer): 功能:处理物理传输介质上的原始比特流,确保数据在传输媒体上能够以适当的方式传输。 示例设备:集线器、中继器、网线等。 主要任务:比特编码、电压规范、物理拓扑等。 2、数据链路层(Data Link Layer): 功能:负责将原始比特流分割成帧并添加地址信息,以便在直接连接的设备之间传输数据。 示例设
5084 0
|
算法 编译器 C语言
笔试强训错题总结(一)(下)
笔试强训错题总结(一)
255 0
|
8天前
|
人工智能 JSON 安全
Fastjson远程代码执行漏洞,阿里云AI安全为您保驾护航
阿里云AI安全产品联动防御Fastjson攻击
2203 12
Fastjson远程代码执行漏洞,阿里云AI安全为您保驾护航
|
8天前
|
云安全 人工智能 安全