【发布时间】:2019-07-18 05:19:53
【问题描述】:
我正在尝试学习 VueJS 和 Vuex,并且正在构建一个任务应用程序。我的组件结构如下:
主页
任务表
任务列表
- 任务列表项
我通过任务表单添加任务,通过任务列表项组件删除任务。两者都工作正常!每个任务列表项旁边还有一个编辑按钮。当我单击它时,应用程序应该从数据库中加载任务详细信息并将其写入任务表单。我已成功将数据加载到商店中的相应任务对象中,但是我很难将这些数据交给任务表单组件中的“本地”任务项。该组件也用于创建任务,因此我正在尝试寻找解决方案以再次使用此表单进行更新。
所以总的来说,我试图将一个对象从存储任务对象传递给本地组件对象。 组件中的本地对象和存储任务组件都称为“任务”。我考虑过使用道具,但添加似乎不起作用,因为在添加/创建任务时对象未定义。
这就是我在任务列表项组件中调用更新的方式:
getTaskDetails (taskId) {
this.$store.dispatch('getTaskDetails', taskId)
},
这是在商店中加载详细信息的操作:
getTaskDetails ({ commit }, payload) {
const task = {}
db.collection('tasks').doc(payload).get().then(doc => {
task.taskId = doc.id
task.title = doc.data().title
task.quadrant = doc.data().quadrant
task.description = doc.data().description
task.tags = doc.data().tags
task.dueTimestamp = doc.data().dueDateAndTime
task.reminderFlag = doc.data().reminderFlag
task.urgencyFlag = doc.data().urgencyFlag
task.importanceFlag = doc.data().importanceFlag
// add isCompleted Flag
}).then(() => {
commit('GET_TASK_DETAILS', task)
commit('SET_FORMMODE', 'update')
commit('CHANGE_TASKFORM_VISIBILITY', true)
}).catch(function (error) {
commit('setError', error.message)
})
},
这是 store 中 state.task 的突变:
GET_TASK_DETAILS (state, payload) {
var moment = require('moment')
var date = new Date()
date = this.state.task.dueTimestamp
var s = moment(date).format('YYYY-MM-DD')
var t = moment(date).format('HH:mm')
state.task.dueDate = s
state.datePicker = s
state.task.dueTime = t
state.timePicker = t
state.task = payload
},
感谢您的帮助!
【问题讨论】:
标签: vue.js google-cloud-firestore vue-component vuex