vue - angularjs是什么



AngularJs。$ setPristine重置表单 (4)

$ setPristine()是在angularjs的1.1.x分支中引入的。 您需要使用该版本而不是1.0.7才能运行。

请参阅http://plnkr.co/edit/815Bml?p=preview

https://code.i-harness.com

提交表单后,我一直在努力重置表单。 有人发布Here我想使它工作但没有成功。 这是我的代码示例

$scope.form.$setPristine(); 没有将Pristine: {{user_form.$pristine}}true 。 见上面的例子。


DavidLn的回答在过去对我很有帮助 。 但它并没有捕获setPristine的所有功能,这一次让我失望了。 这是一个更完整的垫片:

var form_set_pristine = function(form){
    // 2013-12-20 DF TODO: remove this function on Angular 1.1.x+ upgrade
    // function is included natively

    if(form.$setPristine){
        form.$setPristine();
    } else {
        form.$pristine = true;
        form.$dirty = false;
        angular.forEach(form, function (input, key) {
            if (input.$pristine)
                input.$pristine = true;
            if (input.$dirty) {
                input.$dirty = false;
            }
        });
    }
};

我解决了在Angular version 1.0.7中不得不重置表单的原始状态的相同问题(no $ setPristine方法)

在我的使用案例中,表格在填写和提交后必须消失,直到再次填写另一条记录为止。 所以我通过使用ng-switch而不是ng-show来实现显示/隐藏效果。 正如我怀疑的那样,使用ng-switch,表单DOM子树被完全删除并稍后重新创建。 所以原始状态会自动恢复。

我喜欢它,因为它简单而干净,但它可能不适合任何人的用例。

它也可能意味着一些性能问题的大表单(?)在我的情况下,我还没有面对这个问题。


有一个类似的问题,我必须将表单设置回原始状态,但也是未触及的,因为$ invalid和$ error都用于显示错误消息。 仅使用setPristine()不足以清除错误消息。

我通过使用setPristine()和setUntouched()来解决它。 (请参阅Angular的文档: https://docs.angularjs.org/api/ng/type/ngModel.NgModelControllerhttps://docs.angularjs.org/api/ng/type/ngModel.NgModelController

所以,在我的控制器中,我使用了:

$scope.form.setPristine(); 
$scope.form.setUntouched();

这两个函数将整个表单重置为$ pristine并返回到$ notouched,以便清除所有错误消息。





angularjs