Javascript 我必须绕过ngModelController.$parsers来存储值
我刚开了一家店。然而,我正在开发的应用程序提示输入错误报告,它仍然是一个正在进行的项目,我需要找到一个解决方案 由于该错误,以下代码不起作用。该代码还使用了1.5:Javascript 我必须绕过ngModelController.$parsers来存储值,javascript,jquery,angularjs,Javascript,Jquery,Angularjs,我刚开了一家店。然而,我正在开发的应用程序提示输入错误报告,它仍然是一个正在进行的项目,我需要找到一个解决方案 由于该错误,以下代码不起作用。该代码还使用了1.5: link: function (scope, element, attrs, ctrl) { // Build mask. var mask = '99999?-9999'; $(element).mask(mask); // Store all zip codes without non-digi
link: function (scope, element, attrs, ctrl) {
// Build mask.
var mask = '99999?-9999';
$(element).mask(mask);
// Store all zip codes without non-digit characters
// E.G.: 12345-6789 -> 123456789
// 12345 -> 12345
ctrl.$parsers.unshift(function (viewValue) {
var nonDigitCharacters = /[^0-9]/g;
var digitsOnly = viewValue.replace(nonDigitCharacters, '');
return digitsOnly;
});
ctrl.$formatters.push(function (value) {
return $filter('zip')(value, false);
});
}
但是,如果不使用ngModelController.$parser
函数,我真的不知道如何将当前的$viewValue
应用于模型。我正在考虑这样做:
$(element).on('keyup', function () {
var nonDigitCharacters = /[^0-9]/g,
digitsOnly = ctrl.$viewValue.replace(nonDigitCharacters, '');
// Something with digitsOnly?
});
…作为临时解决办法,但我不知道具体怎么办
问题:有哪些选项可以将指令中的值直接应用于模型?我发现了一个解决方法。差不多……你必须用蛮力来对付这类事情
ngModelController.$parsers
在幕后主要做的是以下列表:
$viewvalue
$viewValue
传递到当前的$parser
函数中$parser
函数的结果;把它传给下一个$parser
函数的结果直接应用于模型$(element).on('keyup', function() {
ctrl.$setViewValue($(element).val());
var nonDigitCharacters = /[^0-9]/g,
digitsOnly = ctrl.$viewValue.replace(nonDigitCharacters, '');
var model = $parse(attrs.ngModel),
modelSetter = model.assign;
scope.$apply(function () {
modelSetter(scope, digitsOnly);
});
});
这样做将允许您直接绕过
ngModelController.$parsers
。话虽如此,我不确定是否有任何细微之处我遗漏了,需要注意。希望这能帮助我度过难关,直到找到一个更好的解决方法,或者Angular团队对这个错误进行了修复。我发现了一个解决方法。差不多……你必须用蛮力来对付这类事情
ngModelController.$parsers
在幕后主要做的是以下列表:
$viewvalue
$viewValue
传递到当前的$parser
函数中$parser
函数的结果;把它传给下一个$parser
函数的结果直接应用于模型$(element).on('keyup', function() {
ctrl.$setViewValue($(element).val());
var nonDigitCharacters = /[^0-9]/g,
digitsOnly = ctrl.$viewValue.replace(nonDigitCharacters, '');
var model = $parse(attrs.ngModel),
modelSetter = model.assign;
scope.$apply(function () {
modelSetter(scope, digitsOnly);
});
});
这样做将允许您直接绕过ngModelController.$parsers
。话虽如此,我不确定是否有任何细微之处我遗漏了,需要注意。希望这能帮助我度过难关,直到发现bug,找到更好的解决方法,或者Angular团队对bug进行修复