Angularjs 如何在Angular$parsers管道中修改ng模型
我在表单中有一个Angularjs 如何在Angular$parsers管道中修改ng模型,angularjs,parsing,angularjs-directive,angular-ngmodel,Angularjs,Parsing,Angularjs Directive,Angular Ngmodel,我在表单中有一个box.widthng模型值,用于以英寸为单位存储框的宽度。不过,我希望用户能够看到“英尺”和“英寸”的宽度。在大多数情况下,我让它工作。我有两条指令,将总英寸格式化为英尺和剩余英寸 例如: 问题: 当用户修改表单中的英寸数时触发的解析器只能在某种程度上可靠地工作。如果用户反复单击向上勾号箭头,英寸字段有时将保持在11(根据需要,作为最大值),但有时允许输入12。从控制台日志判断,解析器在某些时候甚至没有被触发(可能是由于我在解析器中设置element.val()的方式)。下面是
box.width
ng模型值,用于以英寸为单位存储框的宽度。不过,我希望用户能够看到“英尺”和“英寸”的宽度。在大多数情况下,我让它工作。我有两条指令,将总英寸格式化为英尺和剩余英寸
例如:
问题:
当用户修改表单中的英寸数时触发的解析器只能在某种程度上可靠地工作。如果用户反复单击向上勾号箭头,英寸字段有时将保持在11(根据需要,作为最大值),但有时允许输入12。从控制台日志判断,解析器在某些时候甚至没有被触发(可能是由于我在解析器中设置element.val()的方式)。下面是相关的解析器函数:
function inchesOnlyParser(input) {
var numFeet = Math.floor(ngModelController.$modelValue / 12);
var inchesEntered = input;
if (inchesEntered > 11) {
var small = numFeet * 12 + 11;
element.val(11);
return small;
}
return numFeet * 12 + inchesEntered;
}
起初,我尝试在英寸细分的输入字段中输入max=11
,但这会导致angular在总英寸数上输入一个最大值,因此这对我来说不是一个解决方案
我尝试过使用中提到的各种ngModelController方法,但没有找到适合我的解决方案,包括$rollbackViewValue、$render、$setViewValue等的组合。不过,我可能对文档的理解不太正确
正如我所暗示的,我想要的UI是用户在英寸输入字段中不能超过11英寸;如果不涉及角度,它的作用类似于
max=11
设置。在inchesolly
指令中,而不是使用element.val(11)设置输入元素的值代码>,设置视图值并再次渲染
ngModelController.$setViewValue(11);
ngModelController.$render();
相关的问题非常有意义。文档中说“预期ng model指令的用户将实现此方法。”因此我试图编写ngModelController.$render=function(){…}
,但看起来我错了,因为这是必要的。但是,回顾您的建议和底部的示例,如果我将您的建议与ngModelController.$render=function(){element.val(ngModelController.$viewValue);}
一起实现,它也会起作用,谢谢!