【问题标题】:Style font for input field (Angularjs)输入字段的样式字体(Angularjs)
【发布时间】:2016-03-09 19:13:40
【问题描述】:

这是plunker链接-> http://plnkr.co/edit/iFnjcq?p=preview

正如您在链接中看到的,它执行输入字段的验证。只允许输入数字,它会自动添加逗号。

我的问题是->如果我在该字段中给出负数,我如何自动更改在该字段中输入的值的颜色。

即一个正数应该按原样显示。当用户输入负数时,数字会以文本的红色输入。

我有什么办法可以做到这一点吗??

HTML-

<div ng-controller="MainCtrl">
  <input type="text" ng-model="amount" format="number" />
</div>

JS 指令

var app = angular.module('App',[]);
app.controller('MainCtrl', function ($scope) { 
});

app.directive('format', ['$filter', function ($filter) {
return {
    require: 'ngModel',

    link: function (scope, elem, attrs, ctrl) {
        if (!ctrl) return;


        ctrl.$formatters.unshift(function (a) {
            return $filter(attrs.format)(ctrl.$modelValue);
        });


        ctrl.$parsers.unshift(function (viewValue) {
            var plainNumber = viewValue.replace(/[^\d|\-+]/g, '');
            elem.val($filter('number')(plainNumber/100,2));
            return plainNumber;
        });
    }
};
}]);

关于下面讨论的样式覆盖问题,这里是问题。

实际的 HTML 代码

<div class="Ip"><input type="text" ng-model="amount" format="number" /></div>

CSS 通过 scss 应用于 Ip 类。在这里

$font:#fff;    //this font gets overwritten. even if i exclude this font of bootstrap is there which will overwite the class mentioned in directive. 

.inputCl{
        color:$font;
}

.Ip{                     
    input{
          @extend .inputCl;                         
}

}

【问题讨论】:

    标签: javascript jquery css angularjs validation


    【解决方案1】:

    当您应用格式时,只需检查它是否为负数并根据需要添加一个 css 类

    ctrl.$parsers.unshift(function (viewValue) {
            var plainNumber = viewValue.replace(/[^\d|\-+]/g, '');
            elem.val($filter('number')(plainNumber/100,2));
            if (plainNumber < 0) {
               elem.addClass('negative');
            } else {
                elem.removeClass('negative');
            }
            return plainNumber;
        });
    

    http://plnkr.co/edit/GdneR70Rw6RtTbwMrfx4?p=preview

    你的 SASS

    $font:#fff; 
    $fontNegative:#ff0000;   
    
    .inputCl{
        color:$font;
    }
    
    .Ip{                     
        input{
              @extend .inputCl;                         
        }
        input.negative {
             color: $fontNegative;    
        }
    
    }
    

    【讨论】:

    • 此输入类型在 div 内。所以 div 的 css 会覆盖我们在指令中提到的 css。我怎么能不让它覆盖?
    • 你能发布你正在使用的css吗? CSS 有一个特殊性的概念,具有最高特殊性的 CSS 将“获胜”。我需要查看您的 css 以了解可能导致覆盖问题的原因。
    • 应该这样做:.Ip input.negative { color: #ff0000}
    • 我不是 SASS 方面的专家,但我认为在你的情况下应该是:$font:#fff; //这个字体被覆盖。即使我排除了这种引导字体,它也会覆盖指令中提到的类。 .inputCl{ 颜色:$字体; } .Ip{ 输入{ @extend .inputCl; } input.negative { 颜色:#ff0000; } }
    【解决方案2】:

    您可以在现有的 format 指令中添加几个条件,但这并不酷:指令应该集中并做自己的事情,例如格式化。

    相反,创建一个非常简单的指令来添加新的验证约束。我们称之为positive指令:

    .directive('positive', [function() {
        return {
            require: 'ngModel',
            link: function(scope, elem, attrs, ctrl) {
                if (!ctrl) return;
                ctrl.$validators.positive = function(value) {
                    return value && value >= 0;
                };
            }
        };
    }]);
    

    那么用法就是

    <input type="text" ng-model="amount" format="number" positive />
    

    之后,您可以使用 .ng-invalid-positive 类设置输入的有效/无效状态,Angular 将根据当前输入为您添加该类:

    .ng-invalid-positive {
        color: red;
    }
    

    演示: http://plnkr.co/edit/2RAlx0DoFH1HEmdT0XCv?p=preview

    【讨论】:

    • @dfsq- 此输入类型在 div 内。所以 div 的 css 会覆盖我们在指令中提到的 css。我怎么能不让它覆盖?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-10-23
    • 2014-04-07
    • 2010-12-19
    • 2016-06-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多