angular之modal实现

方法一:bootstrap实现

对于bootstrap的实现,感觉功能比较多,比较复杂,不建议实现。

方法二:自己阉割实现

angular.module('myModal',[]).provider('Modal',function($injector){
    this.$get = function($document.$compile,$http,$templateCache,$rootScope,$controller,$q){
        var Modal = function(){
        _.bindAll(this,'close','dismiss','stop');
        
        this.defer = $q.defer();
        this.result = this.defer.promise;        
        }
        
        Modal.openedItems = 0;
        
        Modal.open = function(options){
            Modal.openedItems++;
            var modal = new Modal();
            
            var templatePromise = $http.get(options.templateUrl,{cache:$templateCache});
            
            var resolvePromise = function(){
                var promiseArr = [];
                
                angular.forEach(options.resolve || {},function(value,key){
                    if(angular.isFunction(value) || angular.isArray(value)){
                        promiseArr.push($q.when($injector.invoke(value)));
                    }
                })
                return promiseArr;
            }
        }
        var promises = $q.all([templatePromise].concat(resolvePromise()));
        
        promises.then(function(tplAndVars){
            var body = $document.find('body').eq(0);
            
            var element = angular.elemet('<div class="cover-wrap"></div>' + tplAndVars[0].data);
            
            var modalScope = (options.scope || $rootScope).$new();
            
            modalScope.$close = modal.close;
            modalScope.$dismiss = modal.dismiss;
            modalScope.$stop = modal.stop;
            
            var ctrlLocals = {};
            var resolveIter = 1;
            
            angular.forEach(options.resolve,function(value,key){
                ctrlLocals[key] = tplAndVars[resolveIter++];
            });
            
            ctrlLocals.$scope = modalScope;
            ctrlLocals.$modal = modal;
            
            $controller(options.controller,ctrlLocals);
            
            var angularElement = $compile(element)(modalScope);
            body.append(angularElement);
            
            
            modal.element = angularElement;
            modal.$scope = modalScope;
        });
        
        return modal;
    }
})


转载于:https://my.oschina.net/bosscheng/blog/512247

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值