我遇到了一个奇怪的错误,我不确定发生了什么。
当我检查一个对象时,我可以看到 $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);
});
有人知道为什么会发生这种情况吗?
最佳答案
我怀疑问题是,该函数中的值仍在更新;它正在监视值的更改,但仍未应用更改的值。这可能会使该处理程序中的代码变得不可预测。
既然您提到应用范围会引发“进行中”错误,这似乎是有效的(摘要仍在工作)。此代码片段检查正在进行的摘要,并在必要时回避它。
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/