过滤器未在第一个字符上注册

时间:2014-04-08 03:42:19

标签: angularjs

我是一个用户列表,当用户在文本字段中输入@时弹出。当发生这种情况时,我希望对@符号后面输入的每个字母过滤用户列表。所以,如果他们输入" @ 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:

$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);
};

0 个答案:

没有答案