美文网首页
ABP框架中修改Notify弹窗位置的问题

ABP框架中修改Notify弹窗位置的问题

作者: 白日l梦想家 | 来源:发表于2020-10-14 10:26 被阅读0次
    现象

    最近的一个项目使用了ABP框架(ASP.NET Core+Angular),开发中想要修改通知提示的弹窗默认位置(默认位置是左下角,想要修改到中间上方),代码如下,但发现修改无效。

    abp.notify.success("创建成功","",{ positionClass: "toast-top-center" });
    
    原因

    经过查看相关部分的内部代码发现,问题的根本原因,是因为ABP新旧版本的差别导致的。ABP框架(ASP.NET Core+Angular)中,前端的通知提示用到了一个封装的模块notify。在低版本中,这个模块内部依赖toastr组件,这一点在介绍ABP框架的博客文章中都有说明。而上述不起效的代码,就是按照这个旧版本来的。而当前的项目,用的是新版ABP框架,内部代码已经有所改变。

    ABP相关博客文章

    同时,这些文章还提到一个Message模块,也是用来弹窗提示的。不过与Notify不同的是,Message一般为模态弹窗,Notify一般为非模态。而Message模块中,用到的是sweetalert组件。

    Message组件说明

    以上是在低版本中的情况(具体是哪些版本则不知晓,但下文会介绍具体的区分方法),但在新版本中,情况有所不同。

    在新版本中,sweetalert组件更新到sweetalert2notify内部不再依赖toastr组件,而是转而同Message组件一起依赖sweetalert2组件。

    toastrsweetalert2的用法相似,但具体的配置还是很不同的。可是这种差别,经过notify模块的封装,对于外部调用者来说是察觉不到的。这就导致了上述的现象。

    解决方案

    知道了原因,问题自然也就可以迎刃而解。只要按照sweetalert2组件的使用规则来配置即可。代码如下所示。注意这里,设置位置的属性叫“position”,已经与toastr组件不同了。

    abp.notify.success("创建成功","",{ position: "top" });
    

    根据sweetalert2组件的官方文档介绍,其位置属性可以取9种值,分别为:'top', 'top-start', 'top-end', 'center', 'center-start', 'center-end', 'bottom', 'bottom-start', or 'bottom-end'。其实也就是对应着九宫格的位置。

    扩展

    下面展示一下两个不同版本,其内部封装的代码。这就是上文说的区分两个版本的证据。

    在新版中,在assets文件夹下,有一个abp-web-resources文件夹,其内有abp.sweet-alert.js文件。这些都是可以直接在VS Code中看到的。

    新版本ABP框架文件结构

    在这个文件中,定义了notify.success等方法的具体实现。这里用到了Swal这个对象。可见的代码中看不到这个对象的定义和构造过程,也看不出跟sweetalert2组件有什么关联,还是在网上搜索才找到的。

    新版本的abp.sweet-alert.js文件

    而在旧版本中,无法直接在VS Code中找到abp.sweet-alert.js,它存在于node_modules文件夹下,可以在资源浏览器中找到。其路径为:node_modules\abp-web-resources\Abp\Framework\scripts\libs\abp.sweet-alert.js

    但是在这个文件中,只有关于Message的实现,没有关于notify的任何代码。这就说明,在就版本中,Notify的底部依赖跟Message是不同的,但在新版本中是相同的(都依赖sweetalert2)。

    旧版本的abp.sweet-alert.js文件

    参考资料:
    ABP博客文章
    sweetalert2官方文档
    toastr组件的Github地址
    toastr组件的演示地址(在我的浏览器中测试不起作用)

    相关文章

      网友评论

          本文标题:ABP框架中修改Notify弹窗位置的问题

          本文链接:https://www.haomeiwen.com/subject/qomipktx.html