Vue.js Can';t使用模板中数据中的值。只有道具值起作用
我从Vue.js Can';t使用模板中数据中的值。只有道具值起作用,vue.js,Vue.js,我从道具中获得价值。并依靠它改变阶级。以下是工作代码: <div class="modal" :class="{'is-active': aa}" > 没有什么不起作用的。模态窗口不显示。为什么? 如果将aa更改为isActive将isActive从数据移动到计算的,示例将停止工作 computed: { isActive() { return this.aa } } 并编辑您的closeModalWindow: closeModalWindow: function()
道具中获得价值。并依靠它改变阶级。以下是工作代码:
<div class="modal" :class="{'is-active': aa}" >
没有什么不起作用的。模态窗口不显示。为什么?
如果将aa
更改为isActive将isActive
从数据移动到计算的,示例将停止工作
computed:
{
isActive() { return this.aa }
}
并编辑您的closeModalWindow
:
closeModalWindow: function()
{
this.$emit('my-event', false)
}
您现在无法直接编辑您的isActive
,因此只需将false
作为有效负载传递即可
可能您遗漏了文档的这一部分:如果您在数据中使用prop,如下所示:
props: ['modalOpen'],
data () {
return {
isActive: this.modalOpen
}
}
props: ['modalOpen'],
computed: {
isActive () {
return this.modalOpen
}
}
您的openmodel
值将仅作为isActive
属性的初始值使用一次。因此,当您更改openmodel
时,isActive
将保持不变。但当您在computed属性中使用OpenModel
时,如下所示:
props: ['modalOpen'],
data () {
return {
isActive: this.modalOpen
}
}
props: ['modalOpen'],
computed: {
isActive () {
return this.modalOpen
}
}
isActive
值保持被动,将反映openmodel
更改
因此,在子组件中使用此原则时,不需要使用$emit:
在父项中:
<template>
<my-modal :openModal="isActive">
</template>
<script>
export default {
data () {
return {
isActive: false
}
}
}
</script>
导出默认值{
数据(){
返回{
isActive:错误
}
}
}
在模态中:
<template>
<div v-if="isActive">
...
</div>
</template>
<script>
export default {
props: ['modalOpen'],
computed: {
isActive () {
return this.modalOpen
}
}
}
</script>
...
导出默认值{
道具:['modalOpen'],
计算:{
主动的(){
把这个还给我
}
}
}
现在,您可以通过将父组件中的isActive
属性更改为true/false来显示/隐藏模态,无需使用$emit方法。该示例有什么问题?模态打开和关闭良好。如果将aa
更改为isActive
,它将停止工作。谢谢您的回答,但您能解释一下我的代码停止工作的原因吗?如果您的isActive
属性保存在数据中
它的值在呈现组件时取自aa
属性(false
)当aa
更改时,它不会自动更改。如果您想在aa
更改时更新它,isActive
必须是计算的
属性。我为什么要这样做。$emit('my-event',false)
?我是否正确理解它将向家长发出信号?是的,您告诉家长modal不应再处于活动状态。父对象将其isActive
属性更新为false
,从而隐藏模式。