通常子组件如果需要父组件传递属性会这样写法:
props: { modelValue: String, placeholder: { type: String, default: '请输入内容',
required: true // 必须传入 } },
但是如果父组件想传递给子组件的属性,并不包含在props中呢?
这就是所谓非属性特性,说了白话一点,就是指子组件并没有在props中声明父组件需要传入此属性,而父组件强行给子组件传递属性的行为。
实际操作中,本人封装了一个el-column组件,主要功能就是解析一下时间,非常简单,代码如下:
<template>
<el-table-column prop="createDatetime" label="创建时间">
<template #default="{row}">
{{formatDate(row.createDatetime)}}
</template>
</el-table-column>
</template>
<script>
import moment from 'moment'
import {
defineComponent
} from 'vue'
export default defineComponent({
// 转换时间戳
setup() {
const formatDate = (date) => {
if (date)
return moment(date).format('YYYY-MM-DD HH:mm:ss')
else
return ''
}
return {
formatDate
}
}
})
</script>
在父组件使用时,有时候会根据此clomun进行排序,sortable设置为custom则是根据用户自定义法方法排序,如果仅仅是sortable,那么element会通过js进行排序,实际项目中,我两种排序都可能会用到,那么此时就可以用到非属性特性了。
以下两种写法,就是典型也是最简单的非属性特性的应用。
<sh-createDatetime sortable="custom"></sh-createDatetime>
<sh-createDatetime sortable></sh-createDatetime>
关于非Prop 的Attribute,更详细的可以参考官网的说明。