<!DOCTYPE html>
<html>
<head>
<script data-require="jquery@1.9.1" data-semver="1.9.1" src="//ajax.googleapis.com/ajax/libs/jquery/1.10.2/jquery.min.js"></script>
<script data-require="angular.js@*" data-semver="1.2.3" src="http://code.angularjs.org/1.2.3/angular.js"></script>
<script data-require="typeahead.js@*" data-semver="0.9.3" src="http://twitter.github.io/typeahead.js/releases/0.9.3/typeahead.js"></script>
<script src="angular-typeahead.min.js"></script>
<link rel="stylesheet" href="style.css" />
<script src="script.js"></script>
</head>
<body ng-app="App" ng-controller="MyController">
<div>
<h2>select languages.</h2>
<p>languages = {{languages.local}}</p>
<ul ng-repeat="u in users">
<useritem user="u" languages="languages" />
</ul>
</div>
</body>
</html>
var app = angular.module('App', ['siyfion.sfTypeahead']);
app.directive('useritem', function($compile) {
var linker = function(scope, element, attr) {
element.html('<li class="user"><div>{{user.name}}</div>' +
'<input type="text" class="sfTypeahead" ' +
' datasets="languages" ng-model="user.language"></li>');
$compile(element.contents())(scope);
};
return {
restrict: 'E',
replace: true,
link: linker,
scope: {
user: '=',
languages: "="
}
};
});
app.controller('MyController', ['$scope',
function($scope) {
$scope.users = [{
name: "bill",
language: ""
}, {
name: "luis",
language: ""
}];
$scope.languages = {
name: 'items',
local: ['java', 'javascript', 'c++', 'ruby', 'perl', 'python']
};
}
]);
.user{
}
t.typeahead {
background-color: #fff;
}
.typeahead:focus {
border: 2px solid #0097cf;
}
.tt-hint {
color: #999
}
.tt-dropdown-menu {
width: 150px;
background-color: #fff;
border: 1px solid #ccc;
}
.tt-suggestion {
padding: 3px 20px;
font-size: 14px;
line-height: 24px;
}
.tt-suggestion.tt-is-under-cursor {
color: #fff;
background-color: #0097cf;
}
.tt-suggestion p {
margin: 0;
}
angular.module("siyfion.sfTypeahead",[]).directive("sfTypeahead",function(){return{restrict:"ACE",scope:{datasets:"=",ngModel:"="},link:function(a,b){function c(c,e,f){var g=b.val();a.$apply(function(){d=!0,a.ngModel=e,a.selectedDataset=f}),b.val(g)}var d=!1;b.typeahead(a.datasets),b.bind("typeahead:selected",c),b.bind("typeahead:autocompleted",c),b.bind("input",function(){a.$apply(function(){d=!0;var c=b.val();a.ngModel=c})}),a.$watch("ngModel",function(c){var e;if(d)return d=!1,void 0;if($.isArray(a.datasets)){for(var f=0;f<a.datasets.length;f++)if(a.datasets[f].name==a.selectedDataset){e=a.datasets[f].valueKey;break}}else e=a.datasets.valueKey;c&&e&&c.hasOwnProperty(e)&&(c=c[e]),b.typeahead("setQuery",c||"")})}}});