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
}
});