Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/24.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
使用$validators管道在AngularJS中进行密码匹配会产生意外结果_Angularjs_Angularjs Directive - Fatal编程技术网

使用$validators管道在AngularJS中进行密码匹配会产生意外结果

使用$validators管道在AngularJS中进行密码匹配会产生意外结果,angularjs,angularjs-directive,Angularjs,Angularjs Directive,参见示例 使用$validators管道,我试图检查一个字段是否包含与另一个字段相同的值 本例中的每个输入都与其他输入相关联,因此预期结果如下: 在输入#1中输入一个值 在输入#2中输入相同的值 这两个字段现在都应该有效 更改输入#1中的值 输入#1应无效(或输入#2或两者都无效) 最初,我在当前模型和要等于的目标上都使用了$watch,因此只有两个字段中的一个需要使用该指令。然而,随着$validators管道的引入,此方法意外停止工作(可能是一个bug) 无论如何,正如您所看到的,当第二

参见示例

使用$validators管道,我试图检查一个字段是否包含与另一个字段相同的值

本例中的每个输入都与其他输入相关联,因此预期结果如下:

  • 在输入#1中输入一个值
  • 在输入#2中输入相同的值
  • 这两个字段现在都应该有效
  • 更改输入#1中的值
  • 输入#1应无效(或输入#2或两者都无效)
最初,我在当前模型和要等于的目标上都使用了
$watch
,因此只有两个字段中的一个需要使用该指令。然而,随着
$validators
管道的引入,此方法意外停止工作(可能是一个bug)

无论如何,正如您所看到的,当第二个输入被更改时,相关输入的值为
未定义

解决方案 我通过以下方法解决了这个问题:

正如Nikos所说,这两个实例相互抵消,因此这由以下代码修复:

$scope.$watch('passwordWatch', function(pass) {
    $control.$validate();
});

现在,当目标输入更改时,当前输入将重新验证。当当前输入更改时,它会自动验证(与往常一样)

一个问题是,当验证器失败(返回
false
)时,基础模型值被设置为
未定义
。因此:

  • 你在密码中输入了一些东西,比如说
    “aaa”
    ;这与
    passwordConfirm
    不同,因此验证器返回
    false
    ,模型获得
    未定义的值
  • 在passwordConfirm中键入相同的值;但是从上面看,密码的值是
    未定义的
    未定义的!==“aaa”
    ,因此密码确认验证器也返回
    false
  • 等等

  • 哈哈,我完全忽略了这一点。$validators管道上的文档目前缺乏,所以我不知道它是这样做的。有没有关于怎么做的建议?:)事实上我试过调整小提琴,但它似乎比调整更复杂,或者我做错了什么。希望稍后我会回到这个话题。我想做的是使用经典的
    $parsers
    /
    $formatters
    而不是
    $validator
    $parsers
    /
    $formatters
    允许您返回一个值,即使输入无效,仍然可以(?)更新模型,然后下一次检查可能会成功。请查看主问题中的“我的编辑”。目前,我只通过监听两个输入中的一个,并在目标发生变化时重新验证,使其正常工作。