gpt4 book ai didi

javascript - 设计一个无需事件即可提供数据的 VueJS 组件

转载 作者:行者123 更新时间:2023-11-28 03:32:10 25 4
gpt4 key购买 nike

我正在尝试设计一个在 VueJS 中选择日期范围的组件。从组件通过 props 获取的特定键(“realtime”、“today”、“yesterday”)或用户使用选择器更改的特定键(“realtime”、“today”、“yesterday”),它将返回:

  • 作为 JS Date 对象的开始/停止日期
  • 开始/停止该时期的人类再现
  • 根据区域设置对 key 进行人工表示。

我的概念目标是使用这样的组件(无效语法,但这只是为了解释问题):

Select your period:
<DateRangeSelector v-model="drskey" ref="drs">

Selected period: {{ drs.periodName }}
Dates: {{ drs.dateStartHuman }} to {{ drs.dateStopHuman }}

请注意:

  • 没有 VueX 状态(无需在全局状态中存储任何内容)
  • 除了“父”组件中的“ key ”之外,我不想存储任何其他内容
  • refs 不起作用,因为它们没有在开始时初始化

有什么建议吗?

最佳答案

如果您不想在父组件中存储除“键”之外的任何内容,那么为什么不将生成的字符串的输出移动到子组件本身中。然后你可以观察 props 或 select 输入的变化并输出字符串,而无需返回父级......

但是,如果您的用例示例不完整并且您需要对父级中的数据执行更多操作,那么另一种方法是让 v-model 使用对象而不是字符串。类似于 {key: 'realtime'}。然后在子组件内部,当值发生变化时,您可以使用“填充”对象发出“输入”事件,在其中添加所有计算数据。因此,在父组件中,您将完全按照所示方式使用数据在你的例子中..像这样:

父组件:

    Select your period:
<data-range-selector v-model="drs" />
Selected period: {{ drs.periodName }}
Dates: {{ drs.dateStartHuman }} to {{ drs.dateStopHuman }}
    {    
data: () => ({
drs: {key: 'realtime'}
})
}

子组件:

<input v-model="key">
    {
props: { value: Object },
data: () => ({ key: '' }),
watch: {
value () { this.key = this.value.key },
key () { this.returnResults() }
},
created () {
this.key = this.value.key
this.returnResults()
},
computed: {
periodName () { return this.key },
dateStartHuman () { return `When ${this.key} starts` },
dateStopHuman () { return `When ${this.key} stops` }
},

methods: {
returnResults () {
this.$emit('input', {
key: this.key,
periodName: this.periodName,
dateStartHuman: this.dateStartHuman,
dateStopHuman: this.dateStopHuman
})
}
}
}

这是工作 fiddle .. https://jsfiddle.net/tyminko/jwLet0n5/13/

关于javascript - 设计一个无需事件即可提供数据的 VueJS 组件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58082135/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com