小弟使用 wait.vue 來繼承 modal.vue 的內容及 slot,但當使用 opts.mask.show=true時,正常功能應該會是 modal-mask 要顯示在畫面上,但實際上卻沒有動作,不知是不是寫法有誤?還是有其它的解決方式?程式碼如下,還請各位大神指教,感激不盡!
modal.vue
<template>
<div class="modal-root">
<div
class="modal-mask"
v-if="opts.hasMask===true"
v-show="opts.mask.show"
v-bind:style="opts.mask.style"
></div>
<div
class="modal-content"
v-show="opts.content.show"
v-bind:style="opts.content.style"
>
<slot name='slotBody'></slot>
</div>
</div>
</template>
<script>
import _ from "lodash";
export default {
data: function () {
return {
opts: {
hasMask: true,
mask: {
show: false,
style: {
width: "100%",
height: "100%",
position: "fixed",
top: 0,
left: 0,
zIndex: 999999,
opacity: 0.5,
backgroundColor: "#ccc"
}
},
},
_mask: null,
_msg: null
};
},
props: ["show", "options"],
watch: {
show: function (isShow) {
if (this.opts.hasMask) {
this.opts.mask.show = isShow;
}
},
options: function (opt = {}) {
this.opts = _.merge(this.opts, opt);
}
},
created: function () {
this.opts = _.merge(this.opts, this.options);
}
};
</script>
wait.vue
<template>
<modal>
<template v-slot:slotBody>
<div class='modal-body'>aaaaaa</div>
</template>
</modal>
</template>
<script>
import _ from "lodash";
import _modal from "./slots/modal.vue";
export default {
// extends: _modal,
mixins: [_modal],
data: function () {
return {
opts: {
// hasMask: false,
content: {
html: "Please Waiting !!!"
}
}
}
},
components: {
modal: _modal
}
};
</script>
你的<Modal>
有沒有傳["show", "options"]這兩個屬性?
<Modal :show="true" :option="opts">
雖然表面上你使用 Mixin + components 來實現繼承modal.vue
但是<Modal>
components的data 跟 Wait.vue的data是互相獨立的
因此即使你修改wait.vue的data
你還是必須傳到<Modal>
的屬性才會作用
你 wait.vue
沒有給 modal.vue
content.show
跟 content.style
modal.vue
裡面也沒設定
<div
class="modal-content"
v-show="opts.content.show"
v-bind:style="opts.content.style"
>