Vue中使用components的使用技巧

本文介绍了Vue中的组件概念,如何在A.vue作为父组件时引入并调用B.vue子组件,通过`<template>`标签和`ref`属性展示了弹窗组件的封装和父子组件间的通信方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1、components概念

components顾名思义:组件(复数),每个vue页面,都可以作为一个组件,引入到其他页面中,形成父子页面嵌套的形式,一个页面可以被多个页面引用,一个页面也可以引用多个页面,多对多关系

这样做的好处就是可复用,减少重复代码的编写,但是也带来了开发难度的增加,在组件设计过程中,一定要详尽考虑后续各种使用场景,并不能只局限于你的需求,否则会给其他开发人员带来困扰。

2、代码示例

例如要实现A.vue为父,B.vue为子,A中引入B组件,以弹窗的形式展现B组件
只要参考本示例,便可以实现组件封装和调用

B.vue中:

<template>
	<el-dialog :visible.sync="dialogFormVisible">
		此处编写弹窗内容
	</el-dialog>
</template>
<script>
export default {
  //指定name,父页面会用到
  name: 'childBView',
  data() {
    return {
      dialogFormVisible: false // 弹窗是否出现
    }
   },
   methods: {
        //父页面会调用此函数,展示弹窗
       showDiaLog(param){
			this.dialogFormVisible = true
			//调用父页面的函数-示例(非必须)
			this.$parent.getList()
			//关闭弹窗,可以视情况触发
			//this.dialogFormVisible = false
	   }
   }
}
</script>

A.vue中:
这里一定要注意,import中不要加{}!!!!!加了就出不来并且报错

<template>
	<ChildBView ref = 'childBView' ></ChildBView>
</template>
<script>
import ChildBView '@/views/填写目标路径/childBView'
export default {
  name: 'parentAView',
  //引用组件B.vue
  components: { ChildBView },
   methods: {
        //调用子组件的方法,展示弹窗
       handleShowDiaLog(param){
			this.$refs.childBView.showDiaLog(param)
	   },
	   getList(){
			//方法体
	   }
   }
}
</script>
<think>我们将在Vue3中使用WOW.js来实现滚动动画效果。WOW.js是一个用于在用户滚动页面时展示CSS3动画的库,它依赖于Animate.css。 步骤: 1. 安装依赖:wowjs 和 animate.css 2.Vue3中引入并使用 3. 在组件中初始化WOW实例 4. 在模板中使用wow类 注意:由于Vue3是异步更新DOM,我们可能需要在组件挂载后初始化WOW,并在更新后重新初始化(或者使用nextTick)以确保元素被正确识别。 代码示例: 首先,安装依赖: ```bash npm install wowjs animate.css --save ``` 然后,在Vue3组件中使用:</think>在 Vue3 中使用 Wow.js 实现滚动动画的完整解决方案如下: ### 解决方案步骤: 1. **安装依赖**: ```bash npm install wow.js animate.css --save ``` 2. **创建全局动画配置文件** (`src/utils/wow-init.js`): ```javascript import WOW from 'wow.js'; import 'animate.css'; export const initWow = () => { new WOW({ boxClass: 'wow', // 默认类名 animateClass: 'animate__animated', // Animate.css 动画类 offset: 0, // 触发距离(距视口底部) mobile: true, // 启用移动设备支持 live: true, // 动态内容支持 callback: function(box) { // 动画结束回调 } }).init(); }; ``` 3. **在 Vue 入口文件初始化** (`src/main.js`): ```javascript import { createApp } from 'vue'; import App from './App.vue'; import { initWow } from './utils/wow-init'; const app = createApp(App); app.mount('#app'); // 确保 DOM 挂载后初始化 app.config.globalProperties.$nextTick(() => { initWow(); }); ``` 4. **在组件中使用** (`src/components/AnimatedComponent.vue`): ```vue <template> <div> <!-- 基本使用 --> <div class="wow animate__fadeInUp" data-wow-duration="1s"> 向上淡入元素 </div> <!-- 延迟动画 --> <div class="wow animate__bounceIn" data-wow-delay="0.5s" data-wow-offset="100"> 延迟0.5秒弹入 </div> <!-- 循环动画 --> <div class="wow animate__pulse" data-wow-iteration="3"> 脉冲效果(3次) </div> </div> </template> <style scoped> /* 修复动画闪烁问题 */ .wow { visibility: hidden; } </style> ``` ### 关键点解释: 1. **配置参数**: - `animateClass`: 必须设置为 `animate__animated` 以匹配 Animate.css v4+ - `mobile: true`: 允许在移动设备触发动画 - `live: true`: 监控动态添加的 DOM 元素 2. **常见问题修复**: - **动画闪烁**:通过 CSS 设置初始 `visibility: hidden`,Wow.js 会在触发时自动显示 - **位置偏移**:使用 `data-wow-offset="100"` 调整触发点(距视口底部距离) - **动态内容**:在数据加载后调用 `new WOW().sync()` 刷新实例 3. **自定义动画**: 在组件中扩展 Animate.css: ```css /* 自定义动画 */ @keyframes customSlide { from { transform: translateX(-100px); } to { transform: translateX(0); } } .animate__custom-slide { animation-name: customSlide; } ``` 使用: ```html <div class="wow animate__animated animate__custom-slide">自定义滑动</div> ``` ### 进阶技巧: - **响应式控制**:通过 `data-wow-mobile="false"` 禁用移动端动画 - **滚动容器**:对非窗口滚动容器初始化时指定 `container: '.scrollable-div'` - **组合动画**: ```html <div class="wow animate__animated animate__fadeIn animate__rotateIn"> 组合动画效果 </div> ``` ### 注意事项: 1. Animate.css v4+ 需使用 `animate__` 前缀(如 `animate__fadeInUp`) 2. 确保元素初始不可见(Wow.js 依赖此状态) 3. 动态数据加载后调用 `this.$nextTick(() => { new WOW().sync() })`
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值