当前位置: 首页 > 知识库问答 >
问题:

在sweetalert2内容中使用vue组件

谷光誉
2023-03-14

我在一个Vue项目中有几个简单的2模态。我想在警报中使用自定义组件。例如:

<template>
  <h1>Hello {{name}}</h1>
</template>
<script>
module.exorts: {
  props: ["name"]
}
</script>

我的模板。vue

在我亲爱的情态中:

swal({
  titleText: "Hi",
  html: '<my-template name="hello"></my-template>'
});

我甚至不确定这是否可能,或者如何做到。

共有3个答案

锺离昂然
2023-03-14

我设法使它工作如下:

我将模板的所有逻辑都包含在背景符号之间:``

您还需要编辑vue。配置。js文件并添加到configurewebpack对象中,添加以下内容:“vue$:”vue/dist/vue。esm。js'

configureWebpack: {
resolve: {
  alias: {
    'src': resolveSrc('src'),
    'chart.js': 'chart.js/dist/Chart.js',

    // add this line for include components inside swal alert
    'vue$':'vue/dist/vue.esm.js'
  }
 }
}

完成后,您必须重新启动“npm运行开发”项目

这是我的完整示例,经过测试并有效

openSweet() {
  Vue.component('my-comp', {
      template: `
            <div class="card-content">
              <div class="span2">
                    <div class="col-sm-6 col-md-2 col-lg-3">
                        <div class="row">
                          <div style="margin-top: 6px;" >
                            <p-switch v-model="switchTrip.state" type="primary" 
on-text="ON" off-text="OFF" style="justify-content:center"></p-switch>
                            <h5 class="card-title" style="margin-left: 
25px;">Recorridos</h5>
                          </div>
                        </div>

                        <div class="row">
                          <div style="margin-top: 6px;" >
                            <p-switch v-model="switchVel.state" type="primary" 
on-text="ON" off-text="OFF" style="justify-content:center"></p-switch>
                            <h5 class="card-title" style="margin-left: 
25px;">Velocidad</h5>
                          </div>
                        </div>

                    </div>
              </div>
              <div class="span2">
                    <div class="col-sm-6 col-md-4 col-lg-3">
                        <div class="row">
                          <div >
                            <input type="search" class="form-control input-sm" 
placeholder="km / h" v-model="vmax">
                            <h5 class="card-title">Vel. Max</h5>
                          </div>
                        </div>

                        <div class="row">
                          <div>
                            <input type="search" class="form-control input-sm" 
placeholder="minutos" v-model="tol">
                            <h5 class="card-title">Tolerancia</h5>
                          </div>
                        </div>
                    </div>
              </div>
            </div>
      `,
    data () {
      return {
        switchVel: {
          state: false
        },
        switchEvent: {
          state: false
        },
        switchTrip: {
          state: false
        },
        search: '',
        vmax: '',
        tol: ''
      }
    },
    components: {
        [Button.name]: Button,
        Card,
        PSwitch
    }
  })
  new Vue({
    el: '#modal',
    beforeCreate:  () => {
      swal({
        titleText: "Descarga de Reportes",
        showCancelButton: true,
        cancelButtonText: 'Cancelar',
        confirmButtonText: 'Descargar',
        // confirmButtonAriaLabel: 'glyphicon glyphicon-ok-sign',
        // cancelButtonAriaLabel: 'glyphicon glyphicon-remove-sign',
        confirmButtonColor: '#3085d6',
        cancelButtonColor: '#d33',
        width: 800,
        html: '<div id="modal"><my-comp></my-comp></div>'
      })
    }
  })
}

我希望这对你有帮助

问候

邵捷
2023-03-14

您可以在应用程序中渲染和隐藏内容:

<div id="swalHTML" style='display: none'>
  <my-template name="hello"></my-template>
</div>

然后将元素的innerHTML传递给警报:

let el = document.getElementById('swalHTML')
swal({
  html: el.innerHTML
});
於子晋
2023-03-14

从技术上讲,这看起来是可能的:

Vue.component('my-component', {
  template: '<div>A custom component!</div>'
})

new Vue({
  el: '#modal',
  beforeCreate:  swal({
    titleText: "Hi",
    html: '<div id="modal"><my-component></my-component></div>'
  })
})

但你可能想把它包装成一个函数。看看我的小提琴:

JS小提琴

这只是一个想法,对我来说看起来不太好,但仍然有效。我还必须提到,每次以这种方式打开对话框时,都会创建新的vue实例。

选项2从评论到我的回答:

Vue.component('my-component', {
    template: '<div>A custom component!</div>'
})    

swal({
    html: "<my-component></my-component>"
})
  
new Vue({
    el: swal.getHtmlContainer()
})  
 

不停摆弄

 类似资料:
  • 我在vue方法中启动Sweatrep时遇到问题。如果我直接在脚本中调用Sweatrep,但当我想在单击按钮时启动Sweatrep时不会发生任何事情(控制台中没有错误)。代码看起来 Vue(Vuetify) 这项工作 不行 我是新的Vue,所以也许错误很容易看到,但我不知道为什么没有工作。 所以问题是:为什么当我点击一个按钮时不能启动sweetalert模式?

  • 我有一个sweetAlert2模式,我想在它里面使用一个图像,但是我引用了一个像src=“./assets/img/cry.png”或src=“../assets/img/cry.png”这样的img,它不会显示出来,但在vue的其他部分,这个src地址工作正常,我应该如何在sweetAlert2中引用它?

  • 如果无法从服务器检索数据,我尝试弹出sweetalert 我在main.js中导入了甜蜜警报: 在桌子里面。我试图调用swal的vue组件,但出现了一个错误,改为(undefined$this.swal): 有什么建议如何解决这个问题吗?

  • SweetAlert2 是一个漂亮、响应式、可定制、易用的(WAI-ARIA) JavaScript 弹窗(弹出框)。无任何依赖。 安装 npm install --save sweetalert2 或: bower install --save sweetalert2 也可从 CDN 直接下载:cdnjs.com/limonte-sweetalert2 使用 <script src="bower

  • 本文向大家介绍vue项目中使用rem,在入口文件添加内容操作,包括了vue项目中使用rem,在入口文件添加内容操作的使用技巧和注意事项,需要的朋友参考一下 在使用vue-cli搭建好项目框架后,在目录结构的index.html文件中添加一段js代码: 然后在写css就可以将px单位换成rem. 这里设置的比例是20px=1rem, 例如:宽度为100px时,可以直接写成5rem 补充知识:vue

  • 本文向大家介绍在vue组件中使用axios的方法,包括了在vue组件中使用axios的方法的使用技巧和注意事项,需要的朋友参考一下 现在我们通过webpack+vue-cli搭建起了一个vue项目的框架,如果我们需要在vue组件中使用axios向后台获取数据应该怎么办呢? 通常情况下,我们搭建好的项目目录应该是这样子的 首先需要安装axios,这个会npm的都知道 下一步,在main.js中引入a