当前位置 : 主页 > 网络编程 > JavaScript >

Angular_Directive.Txt

来源:互联网 收集:自由互联 发布时间:2021-06-30
Angular自定义指令 1、select元素: /**设置select的展示值为item.description,绑定的值为item.name,绑定到descName上*/2、ng-class使用: ng-class="{'disableSelect':item.ips[1].isSelected||item.ips[2].isSelected}" ng-cl
Angular自定义指令
1、select元素:
    
    /**设置select的展示值为item.description,绑定的值为item.name,绑定到descName上*/

2、ng-class使用:
    ng-class="{'disableSelect':item.ips[1].isSelected||item.ips[2].isSelected}"
    ng-class="{true:'fa-check-square-o',false:'fa-square-o'}[item.ips[0].isSelected]"

3、ng-style指令:
    ng-style="modalBodyStyle"
    modalBodyStyle={"padding-left":" 0px","padding-right": "0px"," padding-bottom": "0px","padding-top":" 0px","height":"80px"}

4、自定义指令
/**
 * 使用:引入该JS,再angular.module('..',['sfDirective'])即可
*/
var _sfDirective = angular.module('sfDirective',[]);
//遮盖层简单指令封装
/**
 * 示例1:
 
 *     
 * 示例2:
 
 *     $scope.coverAttr = {
 *     text: '全局隐藏测试',
 *     isShow: false,
 *     callback: function (ele) {//点击遮盖层的回调函数
 *     console.log(ele);
 *     $scope.coverAttr.close();//关闭遮盖参,用在方法里面,下同
 *   }
 */
_sfDirective.directive('sfCover',[function(){
    return {
        restrict:'EA',
        replace:true,
        template: '
 
  \
                
  
   \ 
   {{cover.text}}\ 
  
 ',
        scope: {
            cover: '=',
        },
        link:function(scope,element,attr,reController){
            scope.cover = scope.cover || {};
            if(!!scope.cover.isShow){
                element.css("display","inline");
            }else{
                element.css("display","none");
            }
            //关闭遮盖模块
            scope.cover.close = function () {
                element.css("display","none");
            };
            //打开遮盖模块
            scope.cover.open = function () {
                element.css("display","inline");
            }
            //添加遮盖参的点击回调函数
            element.on('click',function () {
                if(typeof scope.cover.callback === "function"){
                    scope.cover.callback(element);
                }
            });
        }
    };
}]);
/**
 使用方式:{{some_text | cut:100:true:'...'}}
 或者:ng-bind="some_text|cut:100:true:'...'"
 参数:
 长度 (整数) - 要保留的最大字数
 切字方式 (布尔) - 如果是 true,只切单字
 后辍 (字符串,默认:'…') - 接在字词的后面
 */
_sfDirective.filter('cut', function() {
    return function(value,max,wordwise, tail) {
        if (!value)
            return '';
        max = parseInt(max, 10);
        if (!max)
            return value;
        if (value.length <= max)
            return value;
        value = value.substr(0, max);
        if (wordwise) {
            var lastSpace = value.lastIndexOf(' ');
            if (lastSpace != -1) {
                value = value.substr(0, lastSpace);
            }
        }
        return value + (tail || '…');
    };
});

/**
 * 警告框指令基本使用
 * 
 
 * $scope.alertCtrl = {
 *   msg:'警告框一',//警告框提示信息
 *   type:1,//[1-4或'success/info/waring/danger',默认1]
 *   timeout:5//几秒钟自动消失,默认不消失
 * }
 * $scope.alertCtrl.open();//开启警告窗,用在方法里面,下同
 * $scope.alertCtrl.close();//关闭警告窗
 *
 */
_sfDirective.directive('sfAlert',['$timeout',function($timeout){
    return {
        restrict:'EA',
        replace:true,
        template: '
 
  \
                    
  
   
   \ \ {{alertCtrl.msg}}
  
 ',
        scope: {
            alertCtrl:'=',
        },
        link:function(scope,element){
            scope.alertCtrl = scope.alertCtrl || {};
            var timeout;
            scope.open = function () {
                element.css("display","inline");
                timeout && $timeout.cancel(timeout);
                timeout = /^[-+]?\d*$/.test(scope.alertCtrl.timeout) && $timeout(function() {
                        scope.close();
                    }, scope.alertCtrl.timeout*1000);
            }
            scope.close = function () {
                element.css("display","none");
                scope.alertCtrl.isOpen = false;
                scope.alertCtrl.msg = null;
            }

            function setNewClass(type) {
                if(type === 1 || angular.equals("success",type)){
                    element.find('div').removeClass('alert-info');
                    element.find('div').removeClass('alert-warning');
                    element.find('div').removeClass('alert-danger');
                    element.find('div').addClass('alert-success');
                }else if((type === 2 || angular.equals("info",type))){
                    element.find('div').removeClass('alert-success');
                    element.find('div').removeClass('alert-warning');
                    element.find('div').removeClass('alert-danger');
                    element.find('div').addClass('alert-info');
                }else if((type === 3 || angular.equals("warning",type))){
                    element.find('div').removeClass('alert-success');
                    element.find('div').removeClass('alert-info');
                    element.find('div').removeClass('alert-danger');
                    element.find('div').addClass('alert-warning')
                }else{
                    element.find('div').removeClass('alert-info');
                    element.find('div').removeClass('alert-warning');
                    element.find('div').removeClass('alert-success');
                    element.find('div').addClass('alert-danger')
                }
            }
            var watchOpen = scope.$watch('alertCtrl.msg',function (oldValue,newValue) {
                initAlert(function () {
                    if(scope.alertCtrl.msg){
                        setNewClass(scope.alertCtrl.type)
                        scope.open();
                    }
                });

            });

            function initAlert(callback) {
                scope.alertCtrl.timeout = scope.alertCtrl.timeout || 5;
                scope.alertCtrl.open = function () {
                    element.css("display","inline");
                    timeout && $timeout.cancel(timeout);
                    timeout = /^[-+]?\d*$/.test(scope.alertCtrl.timeout) && $timeout(function() {
                            scope.close();
                        }, scope.alertCtrl.timeout*1000);
                }
                scope.alertCtrl.close = function () {
                    element.css("display","none");
                    scope.alertCtrl.isOpen = false;
                    scope.alertCtrl.msg = null;
                    //console.log('close',scope.alertCtrl);
                };
                typeof callback === "function"&&callback();
            }

            scope.$on(
                "$destroy",
                function() {
                    watchOpen();
                }
            );
        }
    };
}]);
/**
 * 
 
 * 
 * $scope.confirmCtrl = {
 *    title:'确认提示',
 *    msg:'您确定要删除它吗?',
 *    isOk:function () {
 *        console.log('你选择了确定');
 *        $scope.confirmCtrl.close();//关闭提示框
 *    },
 *    cancel:function () {
 *        console.log('你选择了取消');
 *    },
 *    showCancel:true,//是否显示取消按钮,默认显示
 *    showX:true,//是否显示‘X’图标,默认显示
 *    headerHint:''//额外头部提示信息
 *    footerHint:''//底部额外提示信息
 *    close:function //关闭模态框
 *
 *}
 */
_sfDirective.directive('sfConfirm',['$timeout',function($timeout){
    return {
        restrict:'EA',
        replace:true,
        template:'
 
  \
                    
  
   \ 
   
    \ 
    
     \ 
     
      \ 
      \ 
      
     \ 
     
      \ 
      
       {{confirmCtrl.msg}}
      \ 
      
       {{item}}
      \ 
     \ 
     
      \ 
      
       *{{confirmCtrl.footerHint}}
      \ 
      \ 
      \ 
     \ 
    \ 
   \ 
  \
                    \
                    
 ',
        scope: {
            confirmCtrl:'=',
        },
        link:function(scope,element,attr,reController){
            scope.confirmCtrl = scope.confirmCtrl || {};
            scope.modal = {
                isShow : false,
                style:{'display':'none'},
                close:function (cb) {
                    this.style = {'display':'none'}
                    this.isShow = false;
                    scope.confirmCtrl.msg = null;
                    typeof cb === "function" && cb();
                },
                open:function () {
                    this.style = {'display':'block'};
                    this.isShow = true;
                }
            }
            scope.isArray = function () {
                return angular.isArray(scope.confirmCtrl.msg);
            }
            var watch = scope.$watch('confirmCtrl.msg',function (newValue) {
                if(newValue){
                    scope.init(function () {
                        scope.modal.open();
                    });
                }
            });
            scope.init = function (callback) {
                scope.confirmCtrl.showX = typeof scope.confirmCtrl.showX === 'undefined'|| scope.confirmCtrl.showX;
                scope.confirmCtrl.showCancel = typeof scope.confirmCtrl.showCancel === 'undefined'|| scope.confirmCtrl.showCancel;
                scope.confirmCtrl.close = function () {
                    scope.modal.close();
                };
                scope.confirmCtrl.open = function () {
                    scope.modal.open();
                };
                typeof callback === 'function' && callback();
            }
            scope.$on(
                "$destroy",
                function() {
                    watch();
                }
            );
        }
    };
}]);
//{{someNumber | percentage:2}}//保留两位小数-->75.02%
_sfDirective.filter('percentage', ['$filter', function($filter) {
    return function(input, decimals) {
        return $filter('number')(input*100, decimals)+'%';
    };
}]);
网友评论