我正在尝试使用Angular 1.x来监视表单的变化。我这样做是为了在用户保存数据之前离开页面时显示警告。我可以$watch for form.$valid,但form.$dirty永远不会触发。所以要明确的是,这是可行的:
$scope.$watch('forms.editForm.$valid', function (newVal, oldVal) {
// This is how we tell if there are unsaved form changes so we don't navigate away
$scope.unsavedFormChanges = oldVal;
}, true);
而这并不:
$scope.$watch('forms.editForm.$dirty', function (newVal, oldVal) {
// This is how we tell if there are unsaved form changes so we don't navigate away
$scope.unsavedFormChanges = oldVal;
}, true);
有谁能告诉我为什么我不能$watch $dirty,以及是否有这样做的后备计划?-谢谢
2条答案
按热度按时间oalqel3c1#
在把头撞到墙上很久之后,我想我已经弄明白了。看起来$valid是一个对象,$dirty是一个值。这就是第三个参数的作用。$watch语句末尾的“true”告诉$watch它正在监视什么。True意味着它是一个对象,False意味着它是一个值。也就是说,下面的代码是有效的:
我还将oldval/newval修改为一个值,因为这是我们得到的所有值。
ocebsuys2#
我无法让监视器可靠地触发form $dirty属性,所以我改为监视模型的更改,然后检查form dirty属性,如下所示