Angularjs 筛选器未在第一个字符上注册

Angularjs 筛选器未在第一个字符上注册,angularjs,Angularjs,I用户在文本字段中键入@时弹出的用户列表。当这种情况发生时,我希望用户列表中的@符号后键入的每个字母都被过滤。因此,如果他们键入“@s”,所有以“s”开头的用户名都会显示出来。我正在记录在@之后键入的文本,并将其指定为要筛选的文本,但在键入两个字符之前,筛选器不会起作用。有人能告诉我为什么会这样吗?谢谢你的帮助 HTML/SLIM: / USER LIST .user-list.list-group [ng-show="usersShow"] a.user.list-group-item [

I用户在文本字段中键入@时弹出的用户列表。当这种情况发生时,我希望用户列表中的@符号后键入的每个字母都被过滤。因此,如果他们键入“@s”,所有以“s”开头的用户名都会显示出来。我正在记录在@之后键入的文本,并将其指定为要筛选的文本,但在键入两个字符之前,筛选器不会起作用。有人能告诉我为什么会这样吗?谢谢你的帮助

HTML/SLIM:

/ USER LIST
.user-list.list-group [ng-show="usersShow"]
  a.user.list-group-item [ng-repeat="user in users | filter:formattedUser"]
    strong
      | {{user.username}}
    | {{' : ' + (user | fullName)}}

/ COMMENT FORM
= form_for Comment.new, html: {action: nil, name: 'newCommentForm', 'ng-submit' => 'createComment($event, comment)'} do |f|

   = f.text_field :text, placeholder: 'Add comment...',
  'ng-model' => 'comment.text', 'ng-change' => 'showUserList(comment.text)'
    span.input-group-btn
      button.btn type="submit" Add Comment
JS:


你有没有可能把这个放到JSFIDLE里?@Jorg抱歉耽搁了。我这里有一个电话。奇怪的是,它在小提琴上似乎工作得很好,但在我的应用程序中,它不会启动过滤器,直到我在@符号后键入第二个字符。我正在试图找出原因。在你的应用程序中,它是在键入@时触发
showUserList
,只是不识别正则表达式还是什么,还是只在第二个字符之后触发?@Jorg我认为正则表达式和所有东西都正常工作,因为在小提琴上它工作得很好,但在应用程序本身上,在输入@和两个字符之前,它不会过滤任何内容。我不确定我能帮到你,因为我真的没有什么要做的:(
$scope.showUserList = function(comment) {
  var USERNAME_PATTERN = /(?:^|\s)@\S*$/;
  var comment = comment || '';
  var userMatch = comment.match(USERNAME_PATTERN) || '';

  if(userMatch) {
    $scope.userFormatted = userMatch[0].replace('@', '').trim();
  }

  $scope.usersShow = USERNAME_PATTERN.test(comment);
};