Javascript 从Vue组件中的对象属性初始化数据
我有两个Vue组件,Javascript 从Vue组件中的对象属性初始化数据,javascript,vue.js,Javascript,Vue.js,我有两个Vue组件,EventTask和EventCardEventTask在data中有一个currentEvent对象,我将其作为道具传递给EventCard如下 在EventCard中,我根据中的建议,从currentEvent属性初始化event数据属性 但是,由于某些原因,事件数据属性未正确设置。以下是我在Vue开发人员工具中看到的内容 请注意,currentEventprop是一个具有一组属性的对象,但是eventdata属性是一个空对象。为什么无法从道具正确初始化数据属性?您
EventTask
和EventCard
EventTask
在data
中有一个currentEvent
对象,我将其作为道具传递给EventCard
如下
在EventCard中,我根据中的建议,从currentEvent
属性初始化event
数据属性
但是,由于某些原因,事件
数据属性未正确设置。以下是我在Vue开发人员工具中看到的内容
请注意,
currentEvent
prop是一个具有一组属性的对象,但是event
data属性是一个空对象。为什么无法从道具正确初始化数据属性?您可以尝试以下代码
export default {
name: 'EventCard',
props: {
currentEvent: {
type: Object,
required: false
}
},
data: function () {
return {
event: null
}
},
mounted () {
this.event = this.currentEvent // you can also try clone here.
}
}
试着这样做:
export default {
name: 'EventCard',
props: {
currentEvent: {
type: Object,
required: false
}
},
data: function () {
return {
event: this.currentEvent
}
}
}
来源:如果在
EventCard
已初始化后更新currentEvent
,则可能发生这种情况。请注意,data()
不是被动调用的,因此对currentEvent
的更改不会重新初始化event
一种解决方案是使用oncurrentEvent
将其复制到事件中:
导出默认值{
观察:{
currentEvent(新值){
this.event={…newValue}
}
}
}
您能否共享一个简单的演示/小提琴来表示您的场景,因为它在正常情况下工作。为什么您需要在数据中创建另一个属性?您可以在EventCard组件中使用相同的currentEvent(this.currentEvent)。在数据中创建另一个属性的任何特定原因?。另一种方法是在一个生命周期中将currentEvent分配给event(数据中),您可以使用mounted(){this.event=this.currentEvent}@SowmyadharGourishetty我需要在数据中创建另一个属性,因为我将在EventCard
组件中修改此对象,但我不希望这些更改传播到EventTask
componentAFAIK,建议您在道具是对象或数组(通过引用传递)时不要这样做,因为子对象中的更改也会反映在父对象中。来源:好的!感谢您提供的信息我认为currentEvent
在EventCard
初始化后更新正是问题所在。我没有意识到data()
只被调用一次,而不是被动地调用。
export default {
name: 'EventCard',
props: {
currentEvent: {
type: Object,
required: false
}
},
data: function () {
return {
event: this.currentEvent
}
}
}