Javascript 如何仅在输入中键入内容时加载数据

Javascript 如何仅在输入中键入内容时加载数据,javascript,jquery,angularjs,Javascript,Jquery,Angularjs,我有: <input type="search" name="" placeholder="Search" class="inputsearchform" ng-model="search"/> <tr class="rowR" ng-repeat="data in loaded | filter:{song_name: search}"> 或者,最好的解决方案是在加载页面时加载数据,但不向用户显示,因为它有10000个项目。然后仅在键入4个字符后搜索并显示结果。我

我有:

<input type="search" name="" placeholder="Search" class="inputsearchform" ng-model="search"/> 

<tr class="rowR" ng-repeat="data in loaded | filter:{song_name: search}">

或者,最好的解决方案是在加载页面时加载数据,但不向用户显示,因为它有10000个项目。然后仅在键入4个字符后搜索并显示结果。我该怎么做呢?

您需要使用ngChange:

您可以将其添加到输入中

<input ng-change="inputChange()" ... />

您将要使用ngChange:

您可以将其添加到输入中

<input ng-change="inputChange()" ... />

ng change=“inputChange()”
添加到输入中。

ng change=“inputChange()”
添加到输入中。

只需按照Matthew的答案操作即可

删除jquery并使用angular

app.controller('main_control',function($scope, $http){
    $scope.inputChange = function(){
        if($scope.search.length > 4){
            $http.get("http://localhost:7001/load").success(function(data){
                $scope.loaded=data; 
            });
        }
    }       
});

按照马修的回答去做

删除jquery并使用angular

app.controller('main_control',function($scope, $http){
    $scope.inputChange = function(){
        if($scope.search.length > 4){
            $http.get("http://localhost:7001/load").success(function(data){
                $scope.loaded=data; 
            });
        }
    }       
});

只是想补充一下OP不应该在控制器中使用jQuery的原因:Angular的想法是让模板智能化,并基于数据更改进行渲染(这称为“声明性”)。您不希望在图片中插入jQuery并试图强制操作DOM,因为这可能会干扰控制器中其他地方的数据更改。谢谢,它可以工作,但根本不能。我试着输入5个字符,搜索效果很好。然后我清除输入并键入1个字符。它不应该搜索,但会搜索。在if语句中添加另一个条件,这样,如果数据已经加载,它就不会再次搜索。我将编辑我的答案。@MatthewClise这个条件没有帮助。我的意思是我只需要输入4个字符就可以开始搜索。也许我应该在
tr
中添加函数?也许尝试if($scope.search.length==4)?只是想补充一点OP不应该在控制器中使用jQuery的原因:Angular的想法是让模板智能化,并根据数据更改进行渲染(这称为“声明性”)。您不希望在图片中插入jQuery并试图强制操作DOM,因为这可能会干扰控制器中其他地方的数据更改。谢谢,它可以工作,但根本不能。我试着输入5个字符,搜索效果很好。然后我清除输入并键入1个字符。它不应该搜索,但会搜索。在if语句中添加另一个条件,这样,如果数据已经加载,它就不会再次搜索。我将编辑我的答案。@MatthewClise这个条件没有帮助。我的意思是我只需要输入4个字符就可以开始搜索。也许我应该在
tr
中添加函数?如果($scope.search.length==4)可以试试?