有没有办法独立于 View 检查模型本身的脏标志?
我需要 Angular Controller 知道哪些属性已更改,以便仅将更改的变量保存到服务器。
我已经实现了关于我的整个表单是脏的还是原始的逻辑,但这不够具体
我可以在每个输入上添加一个名称和 ng-form 属性,使其在 Controller 中被识别为一个表单,但最终我得到了一个与 View 紧密耦合的 Controller 。
另一种不太吸引人的方法是将每个输入绑定(bind)到的初始值存储在一个单独的对象中,然后将当前值与初始值进行比较以了解它们是否已更改。
我检查了Monitor specific fields for pristine/dirty form state和 AngularJS : $pristine for ng-check checked inputs
最佳答案
我能想到的一个选项是
当您从服务中获取模型/对象时,在模型中创建模型的副本并将这个新模型绑定(bind)到您的 View 。
在新模型上添加一个 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/