AngularJS指令不是每次都执行
AngularJS directive not executing everytime
我编写了一个AngularJS指令来验证百分比值
AngularJS指令
app.directive('validatePercent', function () {
return {
restrict: 'A',
link: function ($scope, elem, attr) {
$scope.$watch(function () { return elem.val(); },
function (newVal, oldVal) {
console.log("old : ", oldVal);
console.log("new : ", newVal);
if (newVal < 0 || newVal > 100)
{
elem.val(oldVal);
}
}
);
}
};
});
这是我的HTML
<input validate-percent ng-model="obj.progress" type="number" class="form-control" />
注意:obj.progress是int类型,输入类型也是数字
问题是,当我尝试多次快速更改此输入字段的值时,一个又一个值有时会变为-1甚至101。尽管我指令中的条件是newVal < 0 || newVal > 100
需要帮助。
更新1:
只有当用户使用鼠标滚轮更改值时才会发生这种情况。当通过键盘上的箭头键递增或递减时,不会发生这种情况。
您可以使用焦点/模糊事件来处理它,而不是使用$watch。
app.directive('validatePercent', function () {
return {
restrict: 'A',
link: function ($scope, elem, attr) {
var oldVal = elem.val();
elem.bind('focus', function(e) {
oldVal = elem.val();
});
elem.bind('blur', function(e) {
if ( elem.val()< 0 || elem.val() > 100)
{
elem.val(oldVal);
}
});
}
};
});
希望能有所帮助。
相关文章:
- 通过指令在控制器中执行javascript函数
- AngularJS执行指令模板中的控制器函数
- 我的指令在ngRepeat和ngInclude之前执行,尽管默认优先级为0
- Angular 指令似乎没有使用元素传入的选项执行
- 在不使用隔离作用域的情况下执行函数的角度指令
- 就绪函数上的指令只能执行一次
- 隔离范围-仅在指令范围内定义的值必须执行更改
- 验证指令代码在ng重复中的每个项目上执行
- AngularJS指令不是每次都执行
- 如何在路由更改后停止 setInterval 函数在角度指令上执行
- ng 类指令调用执行两次
- angularJS在内存中执行指令并获取innerHTML
- 如何确保在执行指令之前解决工厂承诺
- Yeoman Angularjs如何执行指令
- 范围更改不会;t执行指令中的代码
- node . js /套接字.Io /express执行指令
- 在控制器前执行指令代码
- Angular测试不执行指令代码
- 执行指令的参数's的链接功能依赖于DI
- 如何在AngularJS模板被评估后执行指令逻辑