vue 组件4 组件的嵌套

本文介绍了Vue中组件的嵌套与注册过程,强调了组件定义的顺序和使用时的注意事项。通过一个实例展示了在学校组件中嵌套学生组件,并解释了如何在父组件中注册子组件。同时提到,组件需要在其被注册的地方使用,否则会导致找不到组件的错误。此外,还提及了在实际开发中,通常会有管理所有组件的顶级app组件。

组件的嵌套:

 

小案例

在school组件中下定义一个子组件也就是说是,school里面包着一个student(子组件)

这样写是平级的

 

因为要把student作为school的子组件,就要在school上定义student,这边我们在school的创建上

增加一个属性components里面写子组件,但这边有先后顺序的问题

由于先后顺序的问题报错了

报错:在你初始化,之前,你还没有定义student

所以把student组件定义放在school组件定义之前就好了

 而在组件使用时

还像以前一样平级写的话

会报错:没有student 

因为你在vm上只注册了school,当你直接写student标签时,则就报错vm上不存在school

 

所以组件注册在哪就要在哪写组件

所以因为这边我们在school上注册了一个组件,所以我们要到school里面的template写上组件标签

发现没有报错,页面运行正常,并且,在组件中发生了嵌套

 

 

然后我们再定义一个hello组件,hello组件与school组件平级

 

 

这边提下,我们在开发的时候会定义一个app组件其实就是applicable的简写用与管理应用里所有的组件

也就是app组件担当着一人之下万人之上的角色

 

所以我们下面定义一个app组件实现这样一个效果

可以发现app组件中,没有数据像是一个领导者

由于app上面只有vm所以在vm上只有一个组件就是app

 所以在上面只要写app就行了

如果容器里啥也不想写,就写在vm的template里

一般标准化开发都得这样写嵌套

 

 

 

 

 

 

 

 

 

 

 

Vue 框架中,组件嵌套时的事件冒泡问题可以通过事件修饰符和自定义事件的合理使用来处理。Vue 提供了 `.stop` 修饰符来阻止事件冒泡,类似于原生 JavaScript 中的 `event.stopPropagation()`,可以防止事件从子组件向父组件传播[^1]。 例如,在子组件的事件处理中使用 `.stop` 修饰符: ```vue <template> <button @click.stop="handleClick">点击我</button> </template> <script> export default { methods: { handleClick() { console.log("子组件的点击事件"); } } }; </script> ``` 通过这种方式,点击子组件的按钮时,事件不会冒泡到父组件。 如果需要在组件间进行通信,Vue 推荐使用自定义事件。父组件可以通过 `props` 向子组件传递数据或回调函数,而子组件则可以通过 `$emit` 触发事件并传递数据给父组件。这种方法可以避免直接依赖事件冒泡来传递信息,从而提高组件的可维护性和可测试性[^2]。 例如,子组件触发一个自定义事件: ```vue <template> <button @click="handleClick">点击我</button> </template> <script> export default { methods: { handleClick() { this.$emit("child-event"); } } }; </script> ``` 父组件监听该事件并处理: ```vue <template> <child-component @child-event="handleChildEvent" /> </template> <script> import ChildComponent from "./ChildComponent.vue"; export default { components: { ChildComponent }, methods: { handleChildEvent() { console.log("子组件触发的事件"); } } }; </script> ``` 通过这种方式,父组件可以直接响应子组件的事件,而不必担心事件冒泡带来的副作用。 此外,Vue 还提供了 `.self` 修饰符,用于确保事件仅触发当前元素自身的事件处理程序,而不会影响到子元素。这对于避免子元素的事件干扰父组件的逻辑非常有用。 例如: ```vue <template> <div @click.self="handleDivClick"> <button>点击我</button> </div> </template> <script> export default { methods: { handleDivClick() { console.log("只有点击到 div 时才会触发"); } } }; </script> ``` 在上述代码中,只有当点击发生在 `div` 元素上时,`handleDivClick` 方法才会被调用,点击 `button` 不会触发该事件。 通过合理使用这些事件修饰符和自定义事件,可以有效处理 Vue 组件嵌套时的事件冒泡问题,同时保持代码的清晰和可维护性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值