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

效果样式
如何使用?
<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,
    }
})
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 173,004评论 25 708
  • 发现 关注 消息 iOS 第三方库、插件、知名博客总结 作者大灰狼的小绵羊哥哥关注 2017.06.26 09:4...
    肇东周阅读 12,198评论 4 61
  • 距离上次100小时教培已经过去10个月,再走进100小时的进阶班课堂,又是一次全新的感受。上次培训后,通过对瑜伽的...
    龙竹前阅读 828评论 0 0
  • 繞過山水 繞過風霜 我們向著白雲前進 哪怕最後 也無法飛上天堂 Photo by Nandor Szotak
    憨憨爹阅读 117评论 0 0
  • 接到单位出差的任务,是去合肥去做市场调研,飞机是小型飞机,不是那么满意,上了飞机,提供的服务还是很不错的,早餐比较...
    OO碰到OO阅读 102评论 0 1