Angularjs筛选带有验证规则的搜索文本输入

Angularjs筛选带有验证规则的搜索文本输入,angularjs,validation,angularjs-filter,Angularjs,Validation,Angularjs Filter,现在,我有一个非常典型的过滤器使用示例: ... Search: <input ng-model="searchText"> <table> <tr ng-repeat="friend in friends | filter:searchText"> <td>{{friend}}</td> </tr> </table> ... 除非您通过了验证规则,否则此过滤器将开始工作,似乎验证规

现在,我有一个非常典型的过滤器使用示例:

...
Search: <input ng-model="searchText">
<table>
   <tr ng-repeat="friend in friends | filter:searchText">
       <td>{{friend}}</td>
   </tr>
</table>
...

除非您通过了验证规则,否则此过滤器将开始工作,似乎验证规则阻止将关键字传递到过滤器,直到关键字满足正则表达式规则,我所期望的是验证仅在searchText失去焦点时生效

我现在使用了一个非常难看的解决方法,它类似于
动态ng模式
,我将表达式放入一个参数中,比如
$scope.regex=/John | Mary | Mike | Adam/
,然后将searchText更改为

有更好的解决方案吗?

您应该看看API,它可以根据各种事件或延迟更新
ng模型

ng-model-options="{ updateOn: 'blur' }"

示例(从官方网站复制)

以下示例显示如何覆盖即时更新。只有当控件失去焦点(模糊事件)时,表单中输入的更改才会更新模型。如果在输入字段聚焦时按下escape键,则该值将重置为当前模型中的值

<div ng-controller="ExampleController">
  <form name="userForm">
    <label>Name:
      <input type="text" name="userName"
             ng-model="user.name"
             ng-model-options="{ updateOn: 'blur' }"
             ng-keyup="cancel($event)" />
    </label><br />
    <label>Other data:
      <input type="text" ng-model="user.data" />
    </label><br />
  </form>
  <pre>user.name = <span ng-bind="user.name"></span></pre>
</div>

姓名:

其他数据:
user.name=
你到底想在这里实现什么?是的,这个
ng model options
正是我所期望的,事实上我需要把
ng model options=“{allowInvalid:true}”放进去解决我的问题。thanks@z.Neeson很高兴帮助你……谢谢
<div ng-controller="ExampleController">
  <form name="userForm">
    <label>Name:
      <input type="text" name="userName"
             ng-model="user.name"
             ng-model-options="{ updateOn: 'blur' }"
             ng-keyup="cancel($event)" />
    </label><br />
    <label>Other data:
      <input type="text" ng-model="user.data" />
    </label><br />
  </form>
  <pre>user.name = <span ng-bind="user.name"></span></pre>
</div>