javascript - $scope.$watch 整个表单,但仅获取旧值一次

标签 javascript angularjs frontend

我想在整个表单输入上使用 $scope.$watch 并检测更改,然后显示警报“数据已更改。请保存”。问题是我只想在从服务器获取数据时传递 oldValue 。

$http({
        method: "post",
        url: "url",
        data: {
            Pages: {
                id: pageId
            }
        },
        headers: { 'Content-Type': 'application/x-www-form-urlencoded' }
    }).success(function(data) {
        $scope.data = data.editedPage.jkOutputContainer.editedPage.pagesObject;

        $scope.$watch('data',function(newValue, oldValue) {
            if(newValue != oldValue) {
                $scope.dataHasChanged = true;
            } else {
                $scope.dataHasChanged = false;
            }
        }, true);
    });

我可以在表单中的每个输入上使用 ng-init 和 ng-change ,但我想在表单上使用 $scope.$watch 。

编辑:简而言之,当用户将其更改返回到从服务器获取的状态时,我想隐藏警报。

最佳答案

$scope.watch('[formname]', checkChanged, true)
function checkChanged(newVal) {
    if (!angular.equals(newVal,$scope.data)) warnUser()
}

^这将监视表单中的每个表达式并提醒用户

关于javascript - $scope.$watch 整个表单,但仅获取旧值一次,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31848555/

相关文章:

css - 努力将 CSS 样式应用到 Elm 应用程序

javascript - 专门支持测试异步代码的 node.js 单元测试框架?

javascript - 为什么我无法得到结果?

javascript - 日志: function() {} in javascript?是什么

javascript - Angular/JS 程序意外提前结束

javascript - 将服务器(c#/Razor)值传递到 AngularJS 应用程序的最佳方法

javascript - $watch 和 2 个 Controller

javascript - 如何更改 HTML 元素并重定向到另一个页面

javascript - 保存系列图表类型以供以后使用

javascript - 显示/隐藏适用于 JQuery 1.3.2,但不适用于 JQuery 1.4