用于隐藏负值的自定义过滤器

时间:2018-02-05 09:46:25

标签: javascript html angularjs

我有一个文本框,如果ng-model包含负值,我想在文本框中不显示任何内容,我想保留ng-model。如果数据为负值则不应显示数据,如果值为负,则我想在文本框中显示空白,但ng-model应包含该负值。我需要一个自定义过滤器来实现此功能

Plunker

router.post('/httpOnly/mkdir', function (req, res, next) {
    var fs = require('fs');
    var dir = req.body.dir;
    fs.mkdir(dir, 0777, function (err) {
        if (err) {
            if (err.code === "EEXIST") console.log("folder exists")
            else return console.log(err)
        };
        res.json(dir);
    });
});

1 个答案:

答案 0 :(得分:2)

Filters can be added in AngularJS to format data.

现在,如果您正在考虑将“ngModel与文本框绑定”并希望对其应用过滤器(即标记:<input ng-model="number | nonNegative" />),请自行尝试,您将获得在fiddle

中查看时出现以下错误
  

错误:不可分配的模型表达式:number | nonNegative()

当您想要显示以下值时,使用过滤器,您将能够这样做。

angular.module('myApp', [])
.controller('LoginController', function ($scope) {
    $scope.number = -10;
    $scope.number1 = -20;
    $scope.number2 = 30;
})
.filter('nonNegative', function(){
  return function(val){
     if(val >= 0) return val; else '';
  }
})

HTML:

Number: {{number | nonNegative}}
<br/>
Number1: {{number1 | nonNegative}}
<br/>
Number2: {{number2 | nonNegative}}

---- ----- EDIT
即使您使用$watch,实际值也会有所不同,文本框中的值也会不同 请检查此fiddle

angular.module('myApp', [])
.controller('LoginController', function ($scope) {
  $scope.number1 = -20;

  $scope.$watch('number1', function(newVal, oldVal) {
    if(newVal < 0) newVal = '';
  })
})

HTML

<div ng-app="myApp" ng-controller="LoginController">
    <input type = "text" ng-model="number1" />
    <input type="submit" ng-click="login()" value="Login" />
<br/>
Number1: {{number1 | nonNegative}}
</div>

number字段没有值,正如您在小提琴中看到的那样,但文本框仍显示负值