面试题答案
一键面试子组件代码
- 模板部分 (template):
<template>
<button @click.prevent.stop="handleClick">点击我</button>
</template>
- 逻辑部分 (script):
<script>
export default {
methods: {
handleClick() {
console.log('按钮点击,事件冒泡和默认行为已阻止');
}
}
}
</script>
在子组件中,.prevent
修饰符用于阻止事件的默认行为,比如按钮的提交表单行为;.stop
修饰符用于阻止事件冒泡,即防止事件向父级组件传递。
父组件代码
- 模板部分 (template):
<template>
<div>
<ChildComponent />
</div>
</template>
- 逻辑部分 (script):
<script>
import ChildComponent from './ChildComponent.vue';
export default {
components: {
ChildComponent
}
}
</script>
修饰符使用不当的问题
- 缺少.prevent:如果只使用
.stop
而缺少.prevent
,那么虽然事件不会冒泡到父组件,但按钮的默认行为(如提交表单等)仍会执行,可能导致不必要的页面刷新或表单提交等情况。 - 缺少.stop:如果只使用
.prevent
而缺少.stop
,事件的默认行为会被阻止,但事件会继续冒泡到父组件,可能触发父组件中与该事件相关的不必要逻辑。 - 放置位置错误:如果在父组件上使用这些修饰符而不是在子组件触发事件的元素上,无法阻止子组件内部事件的默认行为和冒泡。只有在子组件触发事件的元素上正确使用这两个修饰符,才能确保事件的默认行为被阻止且不向上冒泡。