angular自定义指令等扩展库

ng-directive自定义指令 - 可加减数量

2017-04-20  本文已影响0人  未来与传说
效果样式
如何使用?
<div een-numctrl 
   ng-model="shopnum"           //需要绑定指令值
   max="10000"                        //允许输入的最大值
   min="1"                                 //允许输入的最小值
   width="7.5rem"                     //设置指令CSS宽度,一般为高度的3倍
   height="2.5rem"                   //设置指令CSS高度
   style="margin:1rem 0;"         //设置其他CSS样式
></div>
源代码
function _link(scope,e,a,m){
    if(scope.disabled) return false;
    (scope.nums = parseInt(scope.ngModel) || parseInt(scope.def) || parseInt(scope.min) || 0);
    if(a.ngModel){
        scope.ngModel = scope.nums;
    }
    //判断scope.def是否为数字,否则scope.def = 0;
    if( !/^\-?[0-9]+$/.test(scope.def) ){
        scope.def = 0;
    }
    //判断scope.max是否为数字,否则scope.max = false
    if( !/^\-?[0-9]+$/.test(scope.max) ){
        scope.max = false;
    }
    //判断scope.min是否为数字,否则scope.min = false
    if( !/^\-?[0-9]+$/.test(scope.min) ){
        scope.min = false;
    }
    console.log(scope.min,scope.max);
    //在输入框输入值并失去焦点时触发
    scope.changeNum = ()=>{
        //匹配输入的是否为数字
        if( !/^\-?[0-9]+$/.test(scope.nums) ){
            scope.nums = scope.def || scope.min || 0;
        }else{
            //判断scope.max是否为数字,匹配输入的是否大于最大限制
            if( scope.max!==false && parseInt(scope.nums) > parseInt(scope.max) ){
                console.log("比较最大");
                scope.nums = scope.max;
            }
            //判断scope.min是否为数字,匹配输入的是否小于最小限制
            if( scope.min!==false && parseInt(scope.nums) < parseInt(scope.min) ){
                console.log("比较最小");
                scope.nums = scope.min;
            }
        }
        if(a.ngModel){
            scope.ngModel = parseInt(scope.nums);
        }
    }
    //往上加 1
    scope.addNum  = ()=>{
        if(scope.max!==false && scope.max <= scope.nums) return false;
        scope.nums += 1
        if(a.ngModel){
            scope.ngModel = scope.nums;
        }
    }
    //住下减 1
    scope.reduceNum  = ()=>{
        if(scope.min!==false && scope.min >= scope.nums) return false;
        scope.nums -= 1
        if(a.ngModel){
            scope.ngModel = scope.nums;
        }
    }
}

angular.module("eenNumctrl",[])
.directive("eenNumctrl",function(){
    return {
        restrict:"EA",
            replace:false,
            scope:{
                height:"@",  //高度,长度
                width:"@",  //高度,长度
                max:"@" ,  //最大值
                min:"@",    //最小值,
                def:"@",     //  默认值
                ngModel:"=",
                disabled:"@",
            },
            //require:"^ngModel",
            template:`
            <div style="position:relative; display:inline-block;text-align:center;">
                <div ng-click="addNum()" style="border-left:solid 1px #AAA;
                    width:{{height}};height:{{height}};
                    line-height:{{height}};
                    position:absolute;right:0;top:0;">+</div>
                <div ng-click="reduceNum()" style="border-right:solid 1px #AAA;
                            width:{{height}};height:{{height}};
                            line-height:{{height}};
                            position:absolute;left:0;top:0;" >-</div>
                <input type="text" ng-blur="changeNum()" ng-model="nums" style="border:solid 1px #AAA;
                    padding:0 {{height}};color:#888;
                    text-align:center;width:{{width}};
                    height:{{height}};box-sizing:border-box;" />
            </div>
            `,
        link:_link,
    }
})
上一篇下一篇

猜你喜欢

热点阅读