Javascript 指令内部的角度输入

Javascript 指令内部的角度输入,javascript,angularjs,Javascript,Angularjs,我有一个角度指令,我正在构建一些分页控件 <div> <!-- table logic here --> </div> <div> <button bg-click="current=prevPage(current);">Prev</button> <input ng-model="current" /> /{{pages}} <button bg-click="c

我有一个角度指令,我正在构建一些分页控件

<div>
    <!-- table logic here -->
</div>
<div>
    <button bg-click="current=prevPage(current);">Prev</button>
    <input ng-model="current" />
    /{{pages}}
    <button bg-click="current=nextPage(current);">Next</button>
</div>

上
/{{pages}
下一个
它可以正常工作,但是当您更改
输入中的值时

它还将在删除过程中拾取空字符串,然后在中输入新值


在指令实际触发
当前值的更改之前,是否有办法在指令中嗅出这一点。我可能理解错了您的问题。
这将仅在您在输入外部单击时更新模型

<input ng-model="current" ng-model-options="{updateOn: 'blur'}" />

ngModelOptions
在这种情况下很有用。你可以这样写

<input ng-model="current" ng-model-options="{ updateOn: 'default', debounce: {'default': 500, 'blur': 0} }" /> 

如果
oldVal
也为null或空字符串,则可以在newVal有值时将
$scope.current
复制到另一个作用域变量(例如
$scope.savedCurrent
),如果没有,则将其复制回
$scope.current

在分页之前,只需检查变量
current
的值即可

我假设您正在使用
$watch()
来侦听变量
当前值的更改

指令链接中的代码

scope.$watch("current", function(newVal, oldVal){
    if(angular.isNumber(newVal)){
        // your variable is a number
        // Do your pagination here
    }
});

如果我完全删除该值,
current
值仍然会触发,无论函数调用如何。这就是为什么需要我描述的
debounce
。我的错误,输入ng模型中的输入错误。我知道,这是有道理的。不是只有一个
ng change=“changefurrent(this.value)”
。在这种情况下,似乎比绑定更直接。刚刚发现了一个问题,因为
currentInput
没有设置值,现在我无法初始化输入字段。好的,这看起来像是延迟。如果用户删除输入并将其留空一段时间(几秒钟,也许更多,谁知道呢)。我不想名单变成空的。它应该只更新一个有效的整数,而不做任何其他事情。要添加,我想根据
>0
less
计数检查它。因此,我需要在某个地方拦截此消息,而不触发
current
中的更改。好的,我想我现在理解得更好了。您可以建立一个监视函数来侦听更改,并在该监视函数中将值复制到范围变量或使用oldval重置以前的值。如果您认为可以,请参阅我的更新。哦,将输入切换到
将有助于用户输入文本而不是数字,您至少可以使用属性'min=“1”将其限制为大于零的数字。您如何侦听变量
当前
的更改?
<input ng-model="current" ng-model-options="{ updateOn: 'default', debounce: {'default': 500, 'blur': 0} }" /> 
$scope.$watch(
   function() {
      return $scope.current;
   }, function(oldVal, newVal) {
      if (!newVal) {
         $scope.current = oldVal
      }
   }
);
scope.$watch("current", function(newVal, oldVal){
    if(angular.isNumber(newVal)){
        // your variable is a number
        // Do your pagination here
    }
});