javascript - forms.$valid 显示 true,但打印为 false

标签 javascript angularjs validation

我遇到了一个奇怪的错误,我不确定发生了什么。

当我检查一个对象时,我可以看到 $valid 标签设置为 true (而 $invalid 显示为 false)。但是,当我只打印该标签(例如 object.$valid)时,它会打印 false(而 object.$invalid 会打印 true)。

$scope.$watch('ctrl.form', form => {
    console.log('The form is set to: ', form);
    console.log('The form is valid: ', form.$valid);
});

console log

有人知道为什么会发生这种情况吗?

最佳答案

我怀疑问题是,该函数中的值仍在更新;它正在监视值的更改,但仍未应用更改的值。这可能会使该处理程序中的代码变得不可预测。

既然您提到应用范围会引发“进行中”错误,这似乎是有效的(摘要仍在工作)。此代码片段检查正在进行的摘要,并在必要时回避它。

if ( ! $scope.$$phase ) {
   $scope.$apply ();
}

请注意,Angular 中的“$$”变量是“私有(private)”的。您仍然可以访问它们,但您“不应该”这样做。然而,这样做的好处是不会像零超时那样随机模糊。

或者,正如您已经看到的,0 超时可以强制更新。这是一个 hack,但它确实有效,而且我已经看到它使用过几次了。

最后,生命周期事件之一可能是这些跟踪的更好选择,这样您就知道您正在组件的自然流中跟踪信息,其中摘要是可预测的。

关于生命周期 Hook ,如果您使用的是 1.5(最后一段似乎适合这里,并且可能就是您想要的):

New: $onChanges

This new hook is similar to ng2’s ngOnChanges. It is called whenever one way bindings are updated, with a hash containing the changes objects.

Prior to this hook you sometimes had to use a $watch in order to do some work whenever a value you’re bound to changes. Using this hook makes things clearer and removes the need to introduce a watch and a dependency on $scope.

关于javascript - forms.$valid 显示 true,但打印为 false,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43746203/

相关文章:

html - 使用伪元素在有效输入字段上显示 ✓ 标记

javascript - 使用 JQuery 从 JSON 回复中读取数据

javascript - 单击切换到不同的按钮

javascript - Math.pow 给出了错误的结果

javascript - 对空对象使用 ng-if

jquery - 带有丹麦语字符的正则表达式

jquery - ASP.NET MVC - JQuery - 验证可编辑表列的唯一值

javascript - 包装 float 元素后最小化行,同时最小化宽度

javascript - $watch 不适用于指令值

javascript - Angular .js : How to use templates and JSON for building a SPA