angularjs Angular - $监 windows 体上的$dirty不工作?

7kjnsjlb  于 2023-02-03  发布在  Angular
关注(0)|答案(2)|浏览(164)

我正在尝试使用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,以及是否有这样做的后备计划?-谢谢

oalqel3c

oalqel3c1#

在把头撞到墙上很久之后,我想我已经弄明白了。看起来$valid是一个对象,$dirty是一个值。这就是第三个参数的作用。$watch语句末尾的“true”告诉$watch它正在监视什么。True意味着它是一个对象,False意味着它是一个值。也就是说,下面的代码是有效的:

$scope.$watch('forms.editForm.$dirty', function (value) {
    // This is how we tell if there are unsaved form changes so we don't navigate away
    $scope.unsavedFormChanges = value;
    $log.info('Form Dirty Changed: ' + value);
}, false);

我还将oldval/newval修改为一个值,因为这是我们得到的所有值。

ocebsuys

ocebsuys2#

我无法让监视器可靠地触发form $dirty属性,所以我改为监视模型的更改,然后检查form dirty属性,如下所示

$scope.$watch("$scope.data", function () {
        if ($scope.myform.$dirty) $rootScope.pageDirty = true;
    }, true);

相关问题