如何警告放弃Angularjs的变化

时间:2014-12-10 18:02:38

标签: angularjs

背景:我正在使用AngularJS。我计划在关闭浏览器窗口之前发出用户对话框警告,如果有任何更改,即"您有未保存的更改。变更将会丢失。继续"

问题:在AngularJS中,我如何监控任何模型的变化?即,以便我可以设置像var pageWasModified = true;

这样的标志

换句话说,我想知道是否触及了整个Angular系统中的任何模型。当然,我不应该为我的每个模型注册手表......

2 个答案:

答案 0 :(得分:1)

对于很多情况,您可以使用 myForm。$ dirty 属性(其中myForm是表单的名称),它告诉您用户是否与表单进行了交互。它不完全是你要求的,但它可能足以解决你的问题。

如果这还不够,您可能需要考虑检查一些数据管理库,例如breezejs,这样可以非常轻松地检查模型更改。只是角度我不知道检查整个模型的简单方法,您可能需要相当多的自己的代码。

答案 1 :(得分:1)

AngularJS在您使用ng-model的任何输入字段上设置CSS类ng-pristine和ng-dirty,并且您的FormController具有属性$ pristine和$ dirty,您可以检查该表单是否脏或不。是的,这是可能的。

因此,要监视所有字段,不需要使用watch,只需使用$ scope.myform。$ setPristine();这意味着您的表单尚未被触及或修改。 然后,如果发生任何修改,那么您可以使用ng-dirty检查它们,如果修改则设置为true,否则这将是false。所以你可以使用ngdirty或ngprestine来检查。

其次,您在警告框中提供了选项,表示您希望在点击保存后保存更改,然后再次将表单设置为原始状态,以便您可以跟踪下次更改。

第三件事是您必须在保存按钮上触发事件,因此请使用ngclick。因为如果用户输入单个字符然后形成类更改并且ngdirty变为true。 你可以google,你会喜欢很多例子。对不起,我现在无法进行演示,因为我正在使用我的手机。 祝你好运