定义一个组件:
<template> <div :title="title" class="box" :="$atts">atts</div></template><script lang="ts" setup>import { useAttrs } from "vue"const props = defineProps(['class','title']);let $atts = useAttrs();console.log($atts);</script><style lang="scss" scoped></style>
来调用这个组件的页面:
<template> <atts class="main" @click="handler" title="222"></atts></template><script lang="ts" setup>import atts from '../components/atts.vue'const handler = ()=>{ alert('222');}</script>
运行之后点击页面中的文字atts,你会发现alert弹出了一次。按理说不是应该弹出两次才对的吗?
然后我略微的修改下组件:
<template><div :title="title"> <div class="box" :="$atts">atts</div></div></template><script lang="ts" setup>import { useAttrs } from "vue"const props = defineProps(['class','title']);let $atts = useAttrs();console.log($atts);</script><style lang="scss" scoped></style>
这次再来点击中的文字atts,你会发现alert弹出了两次。
啥原因啊?
在vue3
里,在父组件中给子组件绑定事件会绑在子组件的根元素上(多个根则不会)即如:<atts class="main" @click="handler" title="222"></atts>
会给atts
组件的根元素绑定click
事件,如果atts
组件内部也绑定click
,则两者互不影响,因为两个事件并不是同一个事件句柄,但是如果你用useAttrs
,这个API
获取的是父组件中除props
外的其他属性,那么这时候atts
组件获取到的onClick
事件回调就和父组件中的一样都是handler
这个函数引用,那么在创建DOM
时由于两个事件引用一致视为一个,而在例子二中弹两次是因为父组件里的click
实际上是绑在了子组件根元素上也就是相当于
<div :title="title" @click="handler"> <div class="box" @click="handler">atts</div></div>
不是应该为['xiaomings',300]吗?
请问上面这段代码,我想封装成Promise 这种 直接调用this.home_barlist1().then 该怎么改呢? 我改成下面这样 好像不行
我想匹配一段字符串中所有的input 并使用replace进行替换,如果input里面有类似data-* 这种自定义属性的就跳过 不知道这种正则该怎么写,我也阅读了文档并使用google。都没找到 比如 <input type='text' /> 这种Input就匹配,<input data-xxx /> 带有自定义属性的input 正则则不匹配
请问这种 space-between 两端对齐的,最后一行 怎样靠左和上面的一样正常显示,而不是最后一个跑到最右边去了, 网上找了很多,加伪类之类的方法都不行,请问如何去做合适?
在vue3框架中,我使用ref定义了一个变量,但是发现在更新其数据之后,页面上并不会有响应式变化,具体表现是在更新数据之后不会出现表格最前面的选择框 数据定义 数据初始化,其中list是一个数组,具有唯一的id属性 组件A中定义了计算属性rowSelection 当点击一个按钮之后,触发BatchEdit函数,通过emit抛出新的rowSelection 在父组件中进行事件定义并更新内容 rowS
dataList是一个数组,我想遍历找到返回条件的数据,我下面写的为什么不行? 但改成下面的就可以: