Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/365.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 我必须绕过ngModelController.$parsers来存储值_Javascript_Jquery_Angularjs - Fatal编程技术网

Javascript 我必须绕过ngModelController.$parsers来存储值

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

我刚开了一家店。然而,我正在开发的应用程序提示输入错误报告,它仍然是一个正在进行的项目,我需要找到一个解决方案

由于该错误,以下代码不起作用。该代码还使用了1.5:

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进行修复