如何防止$ watch内部的价值变化

时间:2013-11-22 14:01:40

标签: angularjs

我正在观看用户可以在输入字段中编辑的范围值。 我想确保newValue始终是一个数字,如果不是,请保留oldValue,直到用户键入正确的数字值。

我该怎么做?

我目前正在做的是(在指令的链接功能中):

scope.$watch('count',function(newValue,oldValue)
{
    newValue=parseInt(newValue,10);
    if(isNaN(newValue))
    {
        newValue=oldValue;
    }
});

这是正确的方法,还是有更好的方法?

感谢。

2 个答案:

答案 0 :(得分:8)

我会像$watch那样写:

 $scope.$watch('count',function(newValue,oldValue)
{
  if(newValue !== undefined && !newValue.match(/^[\d]+$/g)){

    $scope.count=oldValue;
  }
});

演示 Plunker

答案 1 :(得分:2)

@Maxim解决方案的一个方面是它需要对模型进行硬编码。它有效,但改进的解决方案可能如下所示:

$scope.$watch('count',function(newValue,oldValue,scope) {
  if(newValue !== undefined && !newValue.match(/^[\d]+$/g)){
    scope[this.exp] = oldValue;
  }
});
  • 为参数添加了“范围”。
  • 使用“this.exp”
  • 查找型号名称
  • 将oldValue直接存储到范围
  • 上的模型中