Angularjs模態(tài)插件

看到github上一個(gè)非常不錯(cuò)的模態(tài)彈出插件,現(xiàn)在分享一下。地址[https://github.com/Treri/angular-ios-alertview]

angular.module('angular-ios-alertview', [])
            .directive('iosAlertView', function(){
                return {
                    restrict: 'AE',
                    replace: true,
                    template: [
                        '<div class="ios-alertview-overlay" ng-cloak>',
                        '<div class="ios-alertview">',
                        '<div class="ios-alertview-inner" ng-class="{\'ios-alertview-inner-remind\': !buttons || !buttons.length}">',
                        '<div class="ios-alertview-title" ng-if="title">{{ title }}</div>',
                        '<div class="ios-alertview-text" ng-bind-html="renderHtml(text)" ng-if="text"></div>',
                        '<input autofocus class="ios-alertview-text-input" type="{{ inputType }}" placeholder="{{ inputPlaceholder }}" ng-model="form.inputValue" ng-if="input" />',
                        '</div>',
                        '<div class="ios-alertview-buttons" ng-if="buttons.length" ng-class="{\'ios-alertview-buttons-horizontal\': buttons.length <= 2}">',
                        '<span class="ios-alertview-button" ng-class="{\'ios-alertview-button-bold\': button.bold}" ng-repeat="button in buttons" ng-click="onClick($event, button, $index)">{{ button.text }}</span>',
                        '</div>',
                        '</div>',
                        '</div>'
                    ].join(''),
                    controller: ['$scope', '$sce',  function($scope, $sce){ //想把方法暴露出去寫在controller里
                        $scope.renderHtml = function(html_code){
                            return $sce.trustAsHtml(html_code);
                        }
                    }]
                };
            })
            .provider('iosAlertView', function (){
                var defaults = {
                    title: null,
                    text: null,
                    input: false,
                    inputType: 'text',
                    inputPlaceholder: '',
                    cancelText: 'Cancel',
                    okText: 'OK',
                    remindTime: 250,
                    defaultOption: 'text'
                };
                var keys = Object.keys(defaults);
                var self = this;
                self.set = function(key, value){
                    if(angular.isObject(key)){
                        for(var name in key){
                            self.set(name, key[name]);
                        }
                    }else{
                        if(key && (keys.indexOf(key) > -1)){
                            if(value){
                                defaults[key] = value;
                            }
                        }
                    }
                };

                this.$get = [
                    '$rootScope',
                    '$compile',
                    '$animate',
                    '$q',
                    '$document',
                    '$timeout',
                    '$log',
                    function($rootScope, $compile, $animate, $q, $document, $timeout, $log){

                        function iosAlertView(option){

                            // expect option is object
                            if(!angular.isObject(option)){
                                $log.error('iosAlertView expect object option');
                                return $q.when();
                            }

                            var deferred = $q.defer();
                            var $scope = $rootScope.$new(true);
                            angular.extend($scope, defaults, option, {form: {}});
                            var $element = $compile('<div ios-alert-view></div>')($scope);

                            $scope.onClick = function($event, button, $index){

                                $event.preventDefault();
                                $event.stopPropagation();

                                var inputValue = $scope.form.inputValue;
                                var cbkData = {
                                    index: $index,
                                    button: button,
                                    inputValue: inputValue
                                };

                                if(angular.isFunction(button.onClick)){
                                    button.onClick(cbkData);
                                }

                                $animate.leave($element).then(function(){
                                    deferred.resolve(cbkData);
                                });
                            };

                            $animate.enter($element, $document[0].body, $document[0].body.lastChild);

                            if(!$scope.buttons || !$scope.buttons.length){
                                // if no buttons, remove modal in 650ms
                                $timeout(function(){
                                    $animate.leave($element).then(function(){
                                        deferred.resolve();
                                    });
                                }, 450 + 1 * $scope.remindTime);
                            }

                            return deferred.promise;
                        }

                        function objectify(option){

                            if(angular.isObject(option)){
                                return option;
                            }

                            var opt = {};
                            if(angular.isString(option)){
                                opt[defaults.defaultOption] = option;
                            }else{
                                $log.error('expect a string or an object');
                            }
                            return opt;
                        }

                        function alert(option){
                            var deferred = $q.defer();
                            option = objectify(option);
                            option = angular.extend({}, defaults, option);
                            option = angular.extend(option, {
                                buttons: [{
                                    text: option.okText,
                                    onClick: deferred.resolve,
                                    bold: true
                                }]
                            });
                            iosAlertView(option).then(deferred.resolve, deferred.reject);
                            return deferred.promise;
                        }

                        function confirm(option){
                            var deferred = $q.defer();
                            option = objectify(option);
                            option = angular.extend({}, defaults, option);
                            option = angular.extend(option, {
                                buttons: [
                                    {
                                        text: option.cancelText,
                                        onClick: deferred.reject
                                    },
                                    {
                                        text: option.okText,
                                        onClick: deferred.resolve,
                                        bold: true
                                    }
                                ]
                            });
                            iosAlertView(option).then(deferred.resolve, deferred.reject);
                            return deferred.promise;
                        }

                        function prompt(option){
                            var deferred = $q.defer();
                            option = objectify(option);
                            option = angular.extend({}, defaults, option);
                            option = angular.extend(option, {
                                input: true,
                                buttons: [
                                    {
                                        text: option.cancelText,
                                        onClick: deferred.reject
                                    },
                                    {
                                        text: option.okText,
                                        onClick: function(data){
                                            deferred.resolve(data.inputValue);
                                        },
                                        bold: true
                                    }
                                ]
                            });
                            iosAlertView(option).then(function(data){
                                deferred.resolve(data.inputValue);
                            }, deferred.reject);
                            return deferred.promise;
                        }

                        function remind(option){
                            var deferred = $q.defer();
                            option = objectify(option);
                            option = angular.extend({}, defaults, option);
                            iosAlertView(option).then(deferred.resolve, deferred.reject);
                            return deferred.promise;
                        }

                        iosAlertView.alert = alert;
                        iosAlertView.confirm = confirm;
                        iosAlertView.prompt = prompt;
                        iosAlertView.remind = remind;

                        return iosAlertView;
                    }
                ];
            });
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子琉朽,更是在濱河造成了極大的恐慌淤袜,老刑警劉巖痒谴,帶你破解...
    沈念sama閱讀 218,036評(píng)論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異铡羡,居然都是意外死亡积蔚,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,046評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門蓖墅,熙熙樓的掌柜王于貴愁眉苦臉地迎上來库倘,“玉大人,你說我怎么就攤上這事论矾〗挑妫” “怎么了?”我有些...
    開封第一講書人閱讀 164,411評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵贪壳,是天一觀的道長(zhǎng)饱亿。 經(jīng)常有香客問我,道長(zhǎng)闰靴,這世上最難降的妖魔是什么彪笼? 我笑而不...
    開封第一講書人閱讀 58,622評(píng)論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮蚂且,結(jié)果婚禮上配猫,老公的妹妹穿的比我還像新娘。我一直安慰自己杏死,他們只是感情好泵肄,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,661評(píng)論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著淑翼,像睡著了一般腐巢。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上玄括,一...
    開封第一講書人閱讀 51,521評(píng)論 1 304
  • 那天冯丙,我揣著相機(jī)與錄音,去河邊找鬼遭京。 笑死胃惜,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的哪雕。 我是一名探鬼主播船殉,決...
    沈念sama閱讀 40,288評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼热监!你這毒婦竟也來了捺弦?” 一聲冷哼從身側(cè)響起饮寞,我...
    開封第一講書人閱讀 39,200評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤孝扛,失蹤者是張志新(化名)和其女友劉穎列吼,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體苦始,經(jīng)...
    沈念sama閱讀 45,644評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡寞钥,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,837評(píng)論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了陌选。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片理郑。...
    茶點(diǎn)故事閱讀 39,953評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖咨油,靈堂內(nèi)的尸體忽然破棺而出您炉,到底是詐尸還是另有隱情,我是刑警寧澤役电,帶...
    沈念sama閱讀 35,673評(píng)論 5 346
  • 正文 年R本政府宣布赚爵,位于F島的核電站,受9級(jí)特大地震影響法瑟,放射性物質(zhì)發(fā)生泄漏冀膝。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,281評(píng)論 3 329
  • 文/蒙蒙 一霎挟、第九天 我趴在偏房一處隱蔽的房頂上張望窝剖。 院中可真熱鬧,春花似錦酥夭、人聲如沸赐纱。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,889評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽千所。三九已至,卻和暖如春蒜埋,著一層夾襖步出監(jiān)牢的瞬間淫痰,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,011評(píng)論 1 269
  • 我被黑心中介騙來泰國(guó)打工整份, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留待错,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,119評(píng)論 3 370
  • 正文 我出身青樓烈评,卻偏偏與公主長(zhǎng)得像火俄,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子讲冠,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,901評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容