angular服务插件1——对话框&提示框

对话框服务:

( 需要调用amazeui的modal样式 )


const angular = require("angular");
const jqLite = angular.element;

/**
 * @ngdoc service
 * @name commonModal
 * @module common.modal.service
 * @usage
    commonModal.fromTemplateUrl(‘./modal.html‘,{
        scope: $scope,
    }).then(function(modal) {
        $scope.modal = modal;
    }); 

    //显示对话框
    $scope.showModal = function() {
        modal.show();
    };

    //关闭对话框
    $scope.closeModal = function() {
        modal.hide();
    }
 */

const angular = require(‘angular‘);
const jqLite = angular.element;

/**
 * @ngdoc service
 * @name commonModal
 * @module common.modal.service
 *
 */

module.exports = angular.module(‘csm.common.services‘)
    .factory(‘commonModal‘, commonModal);

/* @ngInject*/
function commonModal($q, $document, $compile, $rootScope) {
    return {
        fromTemplateUrl: fromTemplateUrl,
    };

    /**
     * @ngdoc method
     * @param url
     * @param options
     * @name fromTemplateUrl
     * @desc add a modal in document return a promise object
     */
    function fromTemplateUrl(url, options) {
        const defer = $q.defer();
        createModal(url, options, defer);
        return defer.promise;
    }

    /**
     * @ngdoc method
     * @param url
     * @param options
     * @param defer
     */
    function createModal(url, options, defer) {
        // Create a new scope for the modal
        const scope = options.scope && options.scope.$new() || $rootScope.$new(true);
        const element = $compile(url)(scope);
        const modal = new Modal(element, scope, $document);
        defer.resolve(modal);
    }
}

/**
 * @ngdoc constructor
 * @param element
 * @param scope
 * @param parent
 *
 */
function Modal(element, scope, parent) {
    this.element = element;
    this.scope = scope;
    this.parent = parent;
    this._init();
}

Modal.prototype = {
    _init: _init,
    show: show,
    hide: hide,
};

function _init() {
    const self = this;
    self.parent[0].body.appendChild(self.element[0]);
}

function show() {
    const self = this;
    const element = self.element;
    const openModal = jqLite(element.children()[0]);
    element.css(‘display‘, ‘block‘);
    element.addClass(‘am-active‘);
    openModal.css(‘display‘, ‘block‘);
    openModal.css(‘margin-top‘, ‘-100px‘);
    setTimeout(function () {
        openModal.removeClass(‘am-modal-out‘).addClass(‘am-modal-active‘);
    }, 100);
}

function hide() {
    const self = this;
    const element = self.element;
    const openModal = jqLite(element.children()[0]);
    openModal.removeClass(‘am-modal-active‘).addClass(‘am-modal-out‘);
    setTimeout(function () {
        openModal.css(‘display‘, ‘none‘);
        element.css(‘display‘, ‘none‘);
        element.removeClass(‘am-active‘);
    }, 200);
}

提示框服务:

提示框是对对话框的封装,包括success,info,warning,danger,confirm对话框:

const angular = require(‘angular‘);
const url = require(‘./modal.html‘);

/**
 * @ngdoc service
 * @name commonModal
 * @module common.modal.service
 * @usage

    try {
        // ...........
    }
    catch(err) {
        AlertService.warning(err.data);
    }

 */ 

module.exports = angular.module(‘csm.common.services‘)
    .factory(‘AlertService‘, AlertService);

/* @ngInject */
function AlertService($rootScope, commonModal) {
    const scope = $rootScope.$new(true);
    let modal;

    initModal();
    return {
        success: success,
        info: info,
        warning: warning,
        danger: danger,
        confirm: confirm,
    };

    function initModal() {
        commonModal.fromTemplateUrl(url, {scope: scope}).then(function (md) {
            scope.modal = modal = md;
        });
    }

    function success(content) {
        scope.texts = {
            title: ‘成功‘,
            body: content,
            closeButton: ‘确定‘,
            noDismiss: true,
        };
        modal.show();
    }

    function info(content) {
        scope.texts = {
            title: ‘提示‘,
            body: content,
            closeButton: ‘确定‘,
            noDismiss: true,
        };
        modal.show();
    }

    function warning(content, callback = angular.noop) {
        scope.texts = {
            title: ‘警告‘,
            body: content,
            closeButton: ‘确认‘,
            dismissButton: ‘关闭‘,
            noDismiss: true,
        };
        modal.callback = function () {
            modal.hide();
            callback();
        };
        modal.show();
    }

    function danger(content, callback) {
        scope.texts = {
            title: ‘危险‘,
            body: content,
            closeButton: ‘我了解‘,
            dismissButton: ‘取消‘,
            noDismiss: false,
        };
        modal.callback = function () {
            modal.hide();
            callback();
        };
        modal.show();
    }

    function confirm(content, callback) {
        scope.texts = {
            title: ‘你确定吗?‘,
            body: content,
            closeButton: ‘我确定‘,
            dismissButton: ‘再想想‘,
            noDismiss: false,
        };
        modal.callback = function () {
            modal.hide();
            callback();
        };
        modal.show();
    }
}

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-10-04 02:28:51

angular服务插件1——对话框&提示框的相关文章

Bootstrap学习js插件篇之提示框

案例 受到Jason Frame开发的jQuery.tipsy插件的启发,我们才把这个工具提示插件做的更好,而且此插件不依赖图片,只是使用CSS3来实现动画效果,并使用data属性存储标题. 将鼠标悬停到下面的链接上就可以看到工具提示了: 代码段: [javascript] view plaincopy <script type="text/javascript"> $(function() { $('.tooltip-demo').tooltip({ selector: 

cocos2dx 3.x(纯代码实现弹出对话框/提示框/警告框)

头文件: // //  PopAlertDialog.h //  macstudycocos2dx // //  Created by WangWei on 15/6/8. // // #ifndef __macstudycocos2dx__PopAlertDialog__ #define __macstudycocos2dx__PopAlertDialog__ #pragma once #include "cocos2d.h" #include "cocos-ext.h&q

基于Metronic的Bootstrap开发框架经验总结(6)--对话框及提示框的处理和优化

在各种Web开发过程中,对话框和提示框的处理是很常见的一种界面处理技术,用得好,可以给用户很好的页面体验,Bootstrap开发也一样,我们往往在页面新增.编辑.查看详细等界面使用弹出对话框层的方式进行显示数据,删除则可能使用一个提示确认框,如果操作成功,我们可以使用更丰富的提示框来处理,本篇主要对比说明在Bootstrap开发中用到的这些技术要点. 1.Bootstrap对话框的使用 常规的Bootstrap有几种尺寸的对话框,包括默认状态的小对话框,中等宽度的对话框,和全尺寸的对话框几种,B

在指定位置上方出现通用jquery悬浮提示框插件

工作需要,网站悬浮提示框要求出现在指定元素上方,由于工作量修改比较大所以要求全站通用,所以写了一个juqery插件,插件很简单,大家可以自行更改样式. 请转载此文的朋友务必附带原文链接,谢谢. 原文链接:http://xuyran.blog.51cto.com/11641754/1876266 插件代码如下: //提示框插件 ; (function ($) {     $.fn.tooltips = function (options) {         $.fn.tooltips.defau

服务器登录界面出现错误提示框 “在系统启动时至少有一个服务或驱动程序产生错误。&quot;

服务器登录界面出现错误提示框 "在系统启动时至少有一个服务或驱动程序产生错误.详细信息,请使用事件查看器查看事件日志." 1.开始 运行 regedit.exe 打开注册表: 2.找到 HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Windows 3.修改 NoPopUpsOnBoot 的值为"1",没有的话就新建1个dword 值.

从仿QQ消息提示框来谈弹出式对话框

<代码里的世界> -UI篇 用文字札记描绘自己 android学习之路 转载请保留出处 by Qiao http://blog.csdn.net/qiaoidea/article/details/45896477 [导航] - 自定义弹出式对话框的简单用法 列举各种常见的对话框实现方案 1.概述 android原生控件向来以丑著称(新推出的Material Design当另说),因此几乎所有的应用都会特殊定制自己的UI样式.而其中弹出式提示框的定制尤为常见,本篇我们将从模仿QQ退出提示框来看一

高级控件【安卓5】——信息提示框、对话框

Toast信息提示框 1 Button bt1=(Button)findViewById(R.id.Tbt01); 2 Button bt2=(Button)findViewById(R.id.Tbt02); 3 bt1.setOnClickListener(new OnClickListener() { 4 public void onClick(View v) { 5 Toast.makeText(Toast0.this, "按钮1短提示", 6 Toast.LENGTH_SHOR

经验总结:WebBrowser自动点击弹出提示框alert、弹出对话框confirm、屏蔽弹出框、屏蔽弹出脚本错误的解决办法

经验总结:WebBrowser自动点击弹出提示框alert.弹出对话框confirm.屏蔽弹出框.屏蔽弹出脚本错误的解决办法 网上有好多解决方法,可是不一定好使,本人经过多次试验,针对WebBrowser控件中自动点击弹出框及禁用脚本提示问题得到如下几种实际情况的解决办法,绝对管用. 1.屏蔽弹出错误脚本 将WebBrowser控件ScriptErrorsSuppressed设置为True即可. (参考本篇博客:http://www.cnblogs.com/qqflying/archive/20

信息提示框、对话框

Toast信息提示框 1Button bt1=(Button)findViewById(R.id.Tbt01); 2 Button bt2=(Button)findViewById(R.id.Tbt02); 3 bt1.setOnClickListener(new OnClickListener() { 4 public void onClick(View v) { 5 Toast.makeText(Toast0.this, "按钮1短提示", 6 Toast.LENGTH_SHORT