var cnJqueryUi = angular.module('cn.jquery', []); cnJqueryUi.directive('autoComplete', function($http) { // by default do not format autocomplete data var defaultFormatter = function(data) { return data }; return { scope: { source: "@", // autocomplete url to call formatter: "=", // (optional) transform data returned before for passing to autocomplete callBack: "=", // (optional) callback when user selects an item }, link: function(scope, element, attrs) { var formatter = scope.formatter || defaultFormatter , onSelect = scope.callBack || {}; var dataSource = function(term, responseCallBack) { $http.get(scope.source + 'term/' + term.term).then(function(response) { responseCallBack(formatter(response.data)); }); }; // init jqueryUi autocomplete element.autocomplete({ source: dataSource, minLength: 2, select: onSelect }); } }; });