使用 bootstrap-vue 将道具从父亲传递给子模态组件
Passing prop from father to child modal component using bootstrap-vue
有父组件 -
<b-nav-item @click="loginModalShow = !loginModalShow">Show</b-nav-item>
<LoginModal :loginShow="loginModalShow"/>
export default {
data () {
return {
loginModalShow: false,
}
}
有子组件 -
<b-modal
ref="LoginModal"
v-model="showModal"
/>
export default {
props:['loginShow'],
data () {
return {
showModal: this.loginShow,
}
}
}
我的问题是当我单击 b-nav-item Show
时,模式没有打开。
只需使用计算重写您的子组件 属性:
<b-modal
ref="LoginModal"
v-model="showModal"
/>
export default {
props:['loginShow'],
computed: {
showModal () {
return this.loginShow
}
}
}
您正在做的是更新 LoginModal 上的 属性 并期望数据也根据新的 属性 值更新。但是 Vue JS 不是那样工作的。您可以通过添加观察者来解决此问题。
在您的 LoginModal 中添加:
watch: {
loginShow: function () {
this.showModal= this.loginShow
}
}
编辑:
根据 aBiscuit 的建议,最好像这样在 watch 处理程序中添加新值:
loginShow: function (newVal) {
this.showModal= newVal
}
有父组件 -
<b-nav-item @click="loginModalShow = !loginModalShow">Show</b-nav-item>
<LoginModal :loginShow="loginModalShow"/>
export default {
data () {
return {
loginModalShow: false,
}
}
有子组件 -
<b-modal
ref="LoginModal"
v-model="showModal"
/>
export default {
props:['loginShow'],
data () {
return {
showModal: this.loginShow,
}
}
}
我的问题是当我单击 b-nav-item Show
时,模式没有打开。
只需使用计算重写您的子组件 属性:
<b-modal
ref="LoginModal"
v-model="showModal"
/>
export default {
props:['loginShow'],
computed: {
showModal () {
return this.loginShow
}
}
}
您正在做的是更新 LoginModal 上的 属性 并期望数据也根据新的 属性 值更新。但是 Vue JS 不是那样工作的。您可以通过添加观察者来解决此问题。
在您的 LoginModal 中添加:
watch: {
loginShow: function () {
this.showModal= this.loginShow
}
}
编辑:
根据 aBiscuit 的建议,最好像这样在 watch 处理程序中添加新值:
loginShow: function (newVal) {
this.showModal= newVal
}