javascript - Angular : check if a model value has changed

标签 javascript angularjs

有没有办法独立于 View 检查模型本身的脏标志?

我需要 Angular Controller 知道哪些属性已更改,以便仅将更改的变量保存到服务器。

我已经实现了关于我的整个表单是脏的还是原始的逻辑,但这不够具体

我可以在每个输入上添加一个名称和 ng-form 属性,使其在 Controller 中被识别为一个表单,但最终我得到了一个与 View 紧密耦合的 Controller 。

另一种不太吸引人的方法是将每个输入绑定(bind)到的初始值存储在一个单独的对象中,然后将当前值与初始值进行比较以了解它们是否已更改。

我检查了Monitor specific fields for pristine/dirty form stateAngularJS : $pristine for ng-check checked inputs

最佳答案

我能想到的一个选项是

  1. 当您从服务中获取模型/对象时,在模型中创建模型的副本并将这个新模型绑定(bind)到您的 View 。

  2. 在新模型上添加一个 watch ,随着模型的变化,使用复制品来比较新旧模型,如下所示

    var myModel = {
        property1: "Property1",
        property2: "Property2",
        array1:["1","2","3"]
    }
    var getModel = function(myModel){
       var oldData = {};
       for(var prop in myModel){
          oldData.prop = myModel[prop];
       }
       myModel.oldData = oldData;
       return myModel;
    }
    var getPropChanged = function(myModel){
      var oldData = myModel.oldData;
      for(var prop in myModel){
       if(prop !== "oldData"){
        if(myModel[prop] !== oldData[prop]){
            return{
                propChanged: prop,
                oldValue:oldData[prop],
                newValue:myModel[prop]
            }
          }
        }
      }
    }
    

关于javascript - Angular : check if a model value has changed,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27000366/

相关文章:

javascript - ASP.NET MVC 接收 "null"作为字符串而不是 null

angularjs - 如何在 angularjs 中的选择框选项内进行 ng-translate

AngularJS 动画基本 ng-repeat slider

javascript - 识别两个数组之间的删除、附加和前置

javascript - fullCalendar - 未捕获类型错误 : Cannot call method 'split' of undefined

javascript - 通过 AJAX 提交表单

javascript - Angular.js 方法被调用的次数超出了我的预期

来自 2 个来源的 javascript 键值数组

javascript - 模块误差 Angular 1.5

javascript - 将数字添加到对象返回 NaN