角度js中的搜索框

use*_*911 24 angularjs

我想在angularJs应用程序中实现一个搜索框.一旦用户开始在搜索框中键入一些名称,就应该调用一些REST服务,它应该获取与搜索文本框中键入的名称相匹配的所有名称.请注意,没有按钮,一旦用户开始输入,结果就会自动出现.REST服务已经存在.我只需要在用户开始输入时调用REST服务并将结果作为列表返回.例如: - 如果我输入James,那么名字以James开头的所有用户都应该作为搜索框中的列表.

一旦名称列表到来,用户可以单击其中一个名称,并且应该在当前页面中加载他的信息.

如何在角度js中实现这种类型化的搜索框?对它有任何指示吗?任何人都可以给我一些方向.

Jor*_*ola 30

您应该定义一个监听onkeypress的指令.

app.directive('myOnKeyDownCall', function () {
    return function (scope, element, attrs) {
        element.bind("keydown keypress", function (event) {            
                scope.$apply(function (){
                    scope.$eval(attrs.ngEnter);
                });
                event.preventDefault();
        });
    };
});
Run Code Online (Sandbox Code Playgroud)

HTML

 <input type="text" my-on-key-down-call="callRestService()">   
Run Code Online (Sandbox Code Playgroud)

CONTROLLER

$scope.callRestService= function() {
  $http({method: 'GET', url: '/someUrl'}).
    success(function(data, status, headers, config) {
         $scope.results.push(data);  //retrieve results and add to existing results
    })
}
Run Code Online (Sandbox Code Playgroud)

很高兴等到键入3个键,对于指令中的键:

var numKeysPress=0;
element.bind("keydown keypress", function (event) {   
         numKeysPress++;
             if(numKeysPress>=3){
                scope.$apply(function (){
                    scope.$eval(attrs.myOnKeyDownCall);
                });
                event.preventDefault();
              }
        });
Run Code Online (Sandbox Code Playgroud)

也许,你可以使用angular-ui存在typeahead指令: angular-ui typeahead 我希望它可以帮助你

  • 我发现打字头链接非常有用.谢谢@Jorge !! (2认同)

Rya*_*ley 5

发现这是对已接受答案的简化.

// Directive
app.directive('search', function () {
    return function ($scope, element) {
        element.bind("keyup", function (event) {
          var val = element.val();
          if(val.length > 2) {
            $scope.search(val);
          }
        });
    };
});

// In Controller
$scope.search= function(val) {
  // fetch data
}

// HTML
<input type="text" search>
Run Code Online (Sandbox Code Playgroud)