从影响形式$ pristine中排除控制

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了从影响形式$ pristine中排除控制相关的知识,希望对你有一定的参考价值。

我在一个指令中有一个文本输入,我想用它作为显示项目列表的过滤器,但我不想输入过滤器来影响包含的表格$ pristine值,这样进入过滤器就不会启用保存并显示重置。我如何在angularJS(1.6.x)中执行此操作?

指令模板

<form name='myForm'>
    <input placeholder="Filter" class='form-control' type='text' ng-model='vm.searchText'>
    <ul><li ng-repeat='item in vm.list | filter:vm.searchText'/></ul>
    <div>
        <br>
        <button class='btn btn-primary' ng-click='vm.save()' ng-disabled="myForm.$pristine || frmCrm.$invalid">Save</button>
        <div class='pull-right'>
            <button class='btn btn-warning' ng-click="vm.reset()" ng-hide="myForm.$pristine">Reset</button>
        </div>
    </div>
</form>

是的我知道在这个例子中我可以很容易地将过滤器输入放在表单之外,但是在我的实际情况中这是不可行的,因为我有嵌套的表单和一个基本上包装整个页面的表单。

这是plnkr的例子:http://plnkr.co/edit/y1dJLPbyvlZuIW1f7ey9

答案

您可以覆盖ngModel的$setDirty$setPristine方法:

angular.module('xyz').directive('dontCheck', function() {
  return {
    restrict: 'A',
    require: 'ngModel',
    link: function(scope, element, attrs, ngModelCtrl) {
      //set to empty functions
      ngModelCtrl.$setPristine = angular.noop;
      ngModelCtrl.$setDirty = angular.noop;
    }
  }
});

我已经分叉你的plunker,你可以尝试解决方案:http://plnkr.co/edit/6UVTQjJtwu4mOXVt7sPT?p=preview

编辑:更新了plunker以遵循您的代码风格。我会将代码留在这里。

以上是关于从影响形式$ pristine中排除控制的主要内容,如果未能解决你的问题,请参考以下文章

从代码覆盖中排除生成的源而不影响整体代码覆盖

从 before_action 中排除控制器

提交时的表单验证 - angularjs 1.5 - 当字段 $pristine 时 $invalid

从源代码管理中排除 app.config?

如何在Sublime Text中添加代码片段

如何从RegEx分组中“排除”空白区域?