需要在AngularJS中重新渲染视图并重新初始化控制器

时间:2013-09-24 08:27:04

标签: angularjs

我有一个我要重置的表单。如果我在Angular中使用$setPristine方法,这会让我有所帮助。

但是,如果您查看以下单独的案例,您会看到当您按下重置按钮重置表单时,save消息将记录到控制台。这是我编写代码以保存对表单所做的任何更改的地方。

http://jsbin.com/OLIziRe/14/edit

在此示例中,当值不同时,将记录save这包括将表单设置为pristine 时,因为之前的值将是表单重置之前的值,而新值将为undefined

我不想要这种行为。如果有更改,我只想记录save消息 - 如果表单被重置,则不应该有“之前的值”。

我能想出的唯一解决方案是做一些诡计,以便重新渲染视图并重新初始化控制器,从而丢失所有先前的状态。

http://jsbin.com/OLIziRe/12/edit

AngularJS的做法是什么?

1 个答案:

答案 0 :(得分:0)

你可以用你的第一个解决方案做到这一点:

var app = angular.module('myApp', []);

app.directive('someDirective', function () {
  return {
    restrict: 'A',
    require: 'ngModel',
    link: function (scope, element, attrs, ctrl) {

        scope.$watch(function () {
          return ctrl.$modelValue;
        }, function (newValue, lastValue) {
          // Only save if the values do not match
          if(scope.someForm.$dirty){
            console.log(newValue !== lastValue ? 'save' : '');
          }
        });

    }
  }
});

在console.log之前,如果用户已为表单设置了值,则检查表单是否处于$ dirty状态,

当你执行$ setPristine()时,你在$ pristine状态重置表单,所以$ dirty状态为false。

希望它有所帮助!