Angularjs从$http自动完成
我正在尝试编写一个autocomplete指令,它使用$http请求从服务器获取数据(不使用任何外部插件或脚本)。目前,它仅适用于静态数据。现在,我知道我需要将$http请求插入指令的Angularjs从$http自动完成,angularjs,autocomplete,directive,angular-http,Angularjs,Autocomplete,Directive,Angular Http,我正在尝试编写一个autocomplete指令,它使用$http请求从服务器获取数据(不使用任何外部插件或脚本)。目前,它仅适用于静态数据。现在,我知道我需要将$http请求插入指令的源代码:,但是我找不到任何关于这个主题的好文档 function getMyHttpData(){ var deferred = $q.defer(); $http.jsonp(request).success(function(data){ // the promise gets resolved
源代码:
,但是我找不到任何关于这个主题的好文档
function getMyHttpData(){
var deferred = $q.defer();
$http.jsonp(request).success(function(data){
// the promise gets resolved with the data from HTTP
deferred.resolve(data);
});
// return the promise
return deferred.promise;
}
http请求
指示
看法
function getMyHttpData(){
var deferred = $q.defer();
$http.jsonp(request).success(function(data){
// the promise gets resolved with the data from HTTP
deferred.resolve(data);
});
// return the promise
return deferred.promise;
}
function getMyHttpData(){
var deferred = $q.defer();
$http.jsonp(request).success(function(data){
// the promise gets resolved with the data from HTTP
deferred.resolve(data);
});
// return the promise
return deferred.promise;
}
那么,我该如何正确地将这一切以角度的方式组合在一起呢 您需要在作用域中编写具有
ng change
功能的控制器。在ng change
回调中,您可以调用服务器并更新完成。(不带$http
,因为这是一个plunk):
function getMyHttpData(){
var deferred = $q.defer();
$http.jsonp(request).success(function(data){
// the promise gets resolved with the data from HTTP
deferred.resolve(data);
});
// return the promise
return deferred.promise;
}
HTML
function getMyHttpData(){
var deferred = $q.defer();
$http.jsonp(request).success(function(data){
// the promise gets resolved with the data from HTTP
deferred.resolve(data);
});
// return the promise
return deferred.promise;
}
模型:{selected | json}
{{states}}
function getMyHttpData(){
var deferred = $q.defer();
$http.jsonp(request).success(function(data){
// the promise gets resolved with the data from HTTP
deferred.resolve(data);
});
// return the promise
return deferred.promise;
}
JS
angular.module('plunker',['ui.bootstrap']);
function getMyHttpData(){
var deferred = $q.defer();
$http.jsonp(request).success(function(data){
// the promise gets resolved with the data from HTTP
deferred.resolve(data);
});
// return the promise
return deferred.promise;
}
函数类型headCtrl($scope){
$scope.selected=未定义;
$scope.states=[];
$scope.onedit=函数(){
$scope.states=[];
对于(var i=0;i
使用角度ui引导
function getMyHttpData(){
var deferred = $q.defer();
$http.jsonp(request).success(function(data){
// the promise gets resolved with the data from HTTP
deferred.resolve(data);
});
// return the promise
return deferred.promise;
}
它对$http和promises有很大的支持。
此外,它根本不包括任何JQuery,纯AngularJS
(我总是喜欢使用现有的库,如果它们缺少打开问题或请求的内容,那就比重新创建自己的库要好得多)我发出了一个自动完成指令,并将其上传到GitHub。它还应该能够处理来自HTTP请求的数据 下面是演示: 这里是文档和存储库: 因此,当您希望从HTTP请求获取数据时,基本上必须返回一个
承诺
,该承诺在加载数据时得到解决。因此,您必须在发出HTTP请求的地方注入$q
服务/指令/控制器
function getMyHttpData(){
var deferred = $q.defer();
$http.jsonp(request).success(function(data){
// the promise gets resolved with the data from HTTP
deferred.resolve(data);
});
// return the promise
return deferred.promise;
}
例如:
<input type="text" list="autocompleList" ng-model="ctrl.query" placeholder={{ctrl.msg}}>
<datalist id="autocompleList">
<option ng-repeat="Ids in ctrl.dataList value={{Ids}} >
</datalist>
我希望这有帮助。我发现这个链接很有帮助
在angularjs或angularjs中,在没有外部模块或指令的情况下,最简单的方法是使用list和datalist HTML5。您只需获得一个json,并使用ng repeat在datalist中提供选项。您可以从ajax获取json 在本例中:
angular.module('plunker', ['ui.bootstrap']);
function TypeaheadCtrl($scope) {
$scope.selected = undefined;
$scope.states = [];
$scope.onedit = function(){
$scope.states = [];
for(var i = 0; i < Math.floor((Math.random()*10)+1); i++){
var value = "";
for(var j = 0; j < i; j++){
value += j;
}
$scope.states.push(value);
}
}
}
angular.module('plunker', ['ui.bootstrap']);
function TypeaheadCtrl($scope) {
$scope.selected = undefined;
$scope.states = [];
$scope.onedit = function(){
$scope.states = [];
for(var i = 0; i < Math.floor((Math.random()*10)+1); i++){
var value = "";
for(var j = 0; j < i; j++){
value += j;
}
$scope.states.push(value);
}
}
}
然后,您可以在ng reapet中添加过滤器和orderby
!!列表和数据列表id必须具有相同的名称强>
function getMyHttpData(){
var deferred = $q.defer();
$http.jsonp(request).success(function(data){
// the promise gets resolved with the data from HTTP
deferred.resolve(data);
});
// return the promise
return deferred.promise;
}
谢谢你的回答,疯子。但是,正如我在问题中所说的,我试图避免使用任何外部脚本。在回答中,您使用的是angular ui引导脚本。我在寻找纯角度解。干杯,GidonI正在为typeahead
指令(自动完成本身)使用angular ui。感谢Urigo的回答。但是,正如我在问题中所说的,我试图避免使用任何外部脚本。我在寻找纯角度解。干杯,Gidon请记住,从今天开始,angular ui引导程序中的Typeahead与angular 1.3Thanks@Rocco不兼容,您为我省去了很多麻烦!如何获取select上的id。这对我来说是在下载中包含的模板html文件上抛出了一个错误。这是必需的吗?如果是这样的话,您可能希望在文档中明确这一点。是否需要将所有数据提取到内存中?如果我有1000万以上的变体呢?:)@tuxSlayer下载前20个与您的标准相匹配的任何属性来限制结果的数量?这是否有一个可以设置的超时,例如。。。停止键入1秒后是否执行http请求?我不想让它在每个按键上都发出请求@你能提供完整的示例源代码吗?我只是想知道你实际上在什么时候进行HTTP调用。提前谢谢。你找到解决办法了吗?我面临着同样的问题,似乎$scope.names在加载指令时是空的,ajax调用被抛在后面
function getMyHttpData(){
var deferred = $q.defer();
$http.jsonp(request).success(function(data){
// the promise gets resolved with the data from HTTP
deferred.resolve(data);
});
// return the promise
return deferred.promise;
}