これは、あなたがそれを行うことができる方法である。
app.factory('autoCompleteDataService', ['$http', function($http) {
return {
getSource: function() {
return function(request, response) {
$http.get(url).success(function(data) {
response(data);
});
}
}
}
}]);
あなたが最初に全体のデータをダウンロードして、オートコンプリートウィジェットは、クライアント側のデータを検索できるようにしたい場合は、これはあなたがそれを行うことができる方法の例です:
app.directive('autoComplete', function(autoCompleteDataService, $http) {
return {
restrict : 'A',
link : function(scope, elem, attr, ctrl) {
autoCompleteDataService.getData(function(err, data) {
if (err) {
console.log("Could not retrieve data.");
return;
}
elem.autocomplete({
minLength: 0,
source: data,
focus: function(event, ui) {
elem.val(ui.item.label);
return false;
},
select: function(event, ui) {
elem.val(ui.item.label);
return false;
}
})
.data("ui-autocomplete")._renderItem = function(ul, item) {
return $("<li>")
.append("<a>" + item.label + "</a>")
.appendTo(ul);
};
});
}
};
});
app.factory('autoCompleteDataService', ['$http', '$rootScope', function($http, $scope) {
return {
getData: function(callback) {
if ($scope.data) {
return callback(null, $scope.data);
}
$http.get('URL')
.success(function(data) {
$scope.data = data;
return callback(null, data);
})
.error(function(data) {
return callback(true, null);
});
}
}
}]);
これで、 "TypeError:this.sourceは関数ではありません"というメッセージが表示されます –
$ hhtpサービスをどのように使用しているのか分かりませんので、例を設定できますか? – asgoth
タイプミス、私はそれを修正し、今はエラーがないだけでなく、データが返されません。上記のあなたの答えとまったく同じ$ httpサービスを使います。 –