vue.js - 在组件之间更改状态
问题描述
您好,我正在尝试创建一个单击功能,在该功能中单击日历中的某一天。通过这样做,我想更改侧边栏中显示的当前日期,这发生在另一个名为 TimeTarget 的组件中。这是我渲染日历的地方。
<tbody>
<tr
v-for="(day, index) in days"
:key="index"
:class="[{ no_target: isHoliday(day) }, { active: moment == day.date.format('Do dddd') }]"
class="calendar-row"
>
<td class="calendar-row__grid-item" @click="changeDay">{{ day.date.format('D.') }}</td>
<td class="calendar-row__grid-item" @click="changeDay">{{ day.date.format('dddd') }}</td>
<td class="calendar-row__grid-item">{{ day.workhours }}</td>
<td class="calendar-row__grid-item">{{ day.overtime }}</td>
<td class="calendar-row__grid-item">{{ day.flextime }}</td>
<td class="calendar-row__grid-item">{{ day.sickness }}</td>
<td class="calendar-row__grid-item">{{ day.vacation }}</td>
</tr>
</tbody>
我本来以为我可以用这样的功能来做到这一点
changeDay() {
let changeDay = this.days.day.date.format();
TimeTarget.dayjs = changeDay;
return dayjs;
},
但我得到一个无法读取未定义的属性“日期”。
解决方案
解决方案取决于您的组件有多远。他们有同一个父母吗?然后他们可以通过事件发射和道具进行通信:
parent component
calendar > $emit('setDate', date) // emits event with the date to parent
sidebar > :selected-date="date" // receives date via prop from the parent
如果组件没有共享父组件或彼此相距很远(公共父组件相距 2 个或更多组件),则某种状态管理(例如 Vuex(https://vuex.vuejs.org/guide/))会使生活变得更轻松。
这篇文章解释得很好:https ://www.smashingmagazine.com/2020/01/data-components-vue-js/
推荐阅读
- jquery - 像 $('.element .childElement') 和 $('.element').find('.childElement') 这样的多部分 jQuery 选择器有什么区别
- arrays - 引用 lisp 中的数组元素
- react-native - 发布请求中的 400(错误请求),axios
- uno-platform - 在 uno 平台上浏览视图的便捷方式
- javascript - TypeError:无法读取反应 js 中未定义的属性“类型”
- flutter - 在 Flutter 应用程序中加载 JavaScript 后,有没有办法从网页获取 HTML?
- angular - Angular RouterLink 在新窗口中打开超链接,而不是选项卡
- javascript - 将角度分量函数传递给 javascript 函数 - boxfactura
- java - 无法在 windows 上启动方形空间开发服务器
- python - 使用 html 按钮和烧瓶连接 python 脚本