var app = angular.module('plunker', []);
app.controller('MainCtrl', function($scope) {
});
app.directive('list', function() {
return {
restrict: 'A',
require: '?ngModel',
link: function(s, e, attr, ctrl) {
if (ctrl && e[0].nodeName === 'INPUT') {
console.log('do');
e.data('ngModelName', attr.ngModel);
}
}
}
});
app.directive('datalist', function($compile) {
var supportsDatalist = !!('list' in document.createElement('input')) &&
!!(document.createElement('datalist') && window.HTMLDataListElement);
return {
restrict: 'E',
transclude: true,
link: function(s, e, a, c, t) {
if (!supportsDatalist) {
var listId = a.id;
//Assumes inputs that use datalist are unique. A better directive would probably include the input itself
var input = document.querySelectorAll("input[list="+ listId +"]")
input = input[0];
var ngModelName = angular.element(input).data('ngModelName');
var select = $compile('<select ng-model="'+ngModelName+'"></select>')(s);
e.append(select);
e = select;
}
t(function(te) {
e.append(te);
})
}
}
});
<!DOCTYPE html>
<html ng-app="plunker">
<head>
<meta charset="utf-8" />
<title>AngularJS Plunker</title>
<script>document.write('<base href="' + document.location + '" />');</script>
<link rel="stylesheet" href="style.css" />
<script data-require="angular.js@1.4.x" src="https://cdnjs.cloudflare.com/ajax/libs/angular.js/1.4.7/angular.min.js" data-semver="1.4.7"></script>
<script src="app.js"></script>
</head>
<body ng-controller="MainCtrl">
Enter contact's name:
<input type="text" list="contacts" ng-model="selectedContact" />
<datalist id="contacts">
<option value="John">John</option>
<option value="Kyle">Kyle</option>
</datalist>
{{selectedContact | json}}
</body>
</html>
/* Put your css in here */