В данном посте представлено диалоговое окно на Vue.js. Окно использует сетку bootstrap и реализовано в виде компонента, но ничего не мешает видоизменить без bootstrap и оформить в виде модуля.
Все что нужно — это добавить код компонента на страницу:
Vue.component("viewer-dialog", { template: `<div id="dialogViewer"> <div class="viewerBox" v-show="activeViewer"> <div class="container-fluid"> <div class="row"> <div class="col-3"></div> <div class="col-6"></div> <div class="col-3 dlg-close" @click="closeViewer">×</div> </div> </div> <div v-html="htmlContent"></div> </div> </div>`, data: function() { return { activeViewer: false, htmlContent: "" }; }, //props: ['btnText'], methods: { sendReview: function() { console.log("!+"); }, openViewer: function() { this.activeViewer = true; }, closeViewer: function() { this.activeViewer = false; } }, watch: { src: function() { this.openViewer(); } }, created() { this.$root.$on('clicked', (html) => { this.activeViewer = true; this.htmlContent = html; }); } });
Подключить стили:
#dialogViewer {} .viewerBox { padding-top: 20pt; position: absolute; top: 0pt; text-align: center; left: 0pt; width: 100%; height: 100%; display: block; background-color: white; z-index: 99999; overflow-y: scroll; } .viewerBox img { width: 90%; height: auto; } .viewerBox .dlg-close { font-size: 30pt; cursor: pointer; }
Добавить теги в разметку страницы:
<div id="myApp"> <viewer-dialog></viewer-dialog> <br/> <center> <button @click="showDialog">Открыть</button> </center> </div>
Написать код приложения Vue.js:
var myApp = new Vue({ el: "#myApp", data: { }, methods: { showDialog: function() { var html = "<div>Инфа</div>"; this.$emit('clicked', html); } } });
И любоваться результатом: